15 KiB
⚠️ THIS CHART HAS MOVED ⚠️
New location: https://github.com/airflow-helm/charts/tree/main/charts/airflow
Upgrading Steps
v7.12.X → v7.13.0
The following values have been ADDED:
flower.oauthDomains
v7.11.X → v7.12.0
The following values have been ADDED:
ingress.web.labelsingress.flower.labelsingress.flower.precedingPathsingress.flower.succeedingPaths
v7.10.X → v7.11.0
The following IMPROVEMENTS have been made:
- You can now use
scheduler.existingSecretConnectionswith an externally created Secret to store airflow connections. (Rather than storing them in plain-text withscheduler.connections)
The following values have been ADDED:
scheduler.existingSecretConnections
v7.9.X → v7.10.0
The following IMPROVEMENTS have been made:
- We now make use of the
_CMDvariables forAIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD,AIRFLOW__CELERY__RESULT_BACKEND_CMD, andAIRFLOW__CELERY__BROKER_URL_CMD:- This fixes the Scheduler liveness probe implemented in
7.8.0 - This fixes using
kubectl execto run commands likeairflow create_user
- This fixes the Scheduler liveness probe implemented in
- Configs passed with
airflow.configare now passed as-defined in yourvalues.yaml:- This fixes an issue where people had to escape
"characters in JSON strings
- This fixes an issue where people had to escape
v7.8.X → v7.9.0
The following IMPROVEMENTS have been made:
- You can now give the airflow ServiceAccount GET/LIST on Event resources
- This is needed for
KubernetesPodOperator(log_events_on_failure=True) - To enable, set
rbac.eventstotrue(Default:false)
- This is needed for
The following values have been ADDED:
rbac.events
v7.7.X → v7.8.0
WARNING:
If you install many pip packages with:
airflow.extraPipPackages,web.extraPipPackages, ordags.installRequirementsEnsure you set
scheduler.livenessProbe.initialDelaySecondsto longer than the install time
The following IMPROVEMENTS have been made:
- Upgraded to Airflow:
1.10.12 - The scheduler now has a liveness probe which will force the pod to restart if it becomes unhealthy for more than some threshold of time (default: 150sec)
- NOTE: this is on by default, but can be disabled with:
scheduler.livenessProbe.enabled
- NOTE: this is on by default, but can be disabled with:
The following values have been ADDED:
scheduler.livenessProbe.enabledscheduler.livenessProbe.initialDelaySecondsscheduler.livenessProbe.periodSecondsscheduler.livenessProbe.failureThreshold
v7.6.X → v7.7.0
If you are using an INTERNAL redis database, some configs have changed:
| 7.6.x | 7.7.x | Notes |
|---|---|---|
redis.existingSecretKey |
redis.existingSecretPasswordKey |
Changed to align with stable/redis |
v7.5.X → v7.6.0
WARNING:
We now annotate all pods with
cluster-autoscaler.kubernetes.io/safe-to-evictby default.If you want to disable this:
- Set:
flower.safeToEvict,scheduler.safeToEvict,web.safeToEvict,workers.safeToEvicttofalse- Set:
postgresql.master.podAnnotations,redis.master.podAnnotations,redis.slave.podAnnotationsto{}Note for GKE:
- GKE's cluster-autoscaler will not honor a
gracefulTerminationPeriodof more than 10min, if your jobs need more than this amount of time to finish, please setworkers.safeToEvicttofalse
The following IMPROVEMENTS have been made:
- The chart YAML has been refactored
- You can now configure
safe-to-evictannotations (so that pods with emptyDir Volumes can be evicted by cluster-autoscaler) - You can now create PodDisruptionBudgets for all components: {flower, webserver, worker}
- The chart now forces the correct ports to be used (NOTE: this will not prevent you changing Service/Ingress ports)
- You can now run multiple instances of flower
- You can now specify minReadySeconds for flower
The following values have CHANGED DEFAULTS:
workers.celery.instances:- Is now
16by default (letting each worker take 16 tasks)
- Is now
postgresql.master.podAnnotations:- Is now
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}
- Is now
redis.master.podAnnotations:- Is now
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}
- Is now
redis.slave.podAnnotations:- Is now
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}
- Is now
The following values have been ADDED:
flower.minReadySecondsflower.podDisruptionBudget.*flower.replicasflower.safeToEvictscheduler.safeToEvictweb.podDisruptionBudget.*web.safeToEvictworkers.podDisruptionBudget.*workers.safeToEvict
v7.4.X → v7.5.0
The following IMPROVEMENTS have been made:
- Added an ability to setup external database connection propertites with the value
externalDatabase.propertiesfor TLS or other advanced parameters
The following values have been ADDED:
externalDatabase.properties
v7.3.X → v7.4.0
The following IMPROVEMENTS have been made:
- Reduced how likely it is for a celery worker to receive SIGKILL with graceful termination enabled.
New celery worker graceful shutdown lifecycle:
- prevent worker accepting new tasks
- wait AT MOST
workers.celery.gracefullTerminationPeriodfor tasks to finish - send
SIGTERMto worker - wait AT MOST
workers.terminationPeriodfor kill to finish - send
SIGKILLto worker
The following values have been ADDED:
workers.celery.gracefullTerminationPeriod:- if you currently use a high value of
workers.terminationPeriod, consider lowering it to60and setting a high value forworkers.celery.gracefullTerminationPeriod
- if you currently use a high value of
v7.2.X → v7.3.0
The following IMPROVEMENTS have been made:
- Added an ability to specify a specific port for Flower when using NodePort service type with the value
flower.service.nodePort.http
The following values have been ADDED:
flower.service.nodePort.http
v7.1.X → v7.2.0
The following IMPROVEMENTS have been made:
- Fixed Flower's liveness probe when Basic Authentication is enabled for Flower.
You can specify a basic auth value via a Kubernetes Secret using the values
flower.basicAuthSecretandflower.basicAuthSecretKey. The secret value will get encoded and included in the liveness probe's header.
The following values have been ADDED:
flower.basicAuthSecretflower.basicAuthSecretKey
v7.0.X → v7.1.0
The following IMPROVEMENTS have been made:
- We have dramatically reduced the start time of airflow pods.
This was mostly achieved by removing arbitrary delays in the start commands for airflow pods.
If you still want these delays, please set the added
*.initialStartupDelayto non-zero values. - We have improved support for when
airflow.executoris set toKubernetesExecutor:- redis configs/components are no longer deployed
- we now set
AIRFLOW__KUBERNETES__NAMESPACE,AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME, andAIRFLOW__KUBERNETES__ENV_FROM_CONFIGMAP_REF
- We have fixed an error caused by including a
'in your redis/postgres/mysql password. - We have reverted a change in 7.0.0 which prevented the use of airflow docker images with embedded DAGs.
(Just ensure that
dags.initContainer.enabledandgit.gitSync.enabledarefalse) - The
AIRFLOW__CORE__SQL_ALCHEMY_CONN,AIRFLOW__CELERY__RESULT_BACKEND, andAIRFLOW__CELERY__BROKER_URLenvironment variables are now available if youkubectl exec ...into airflow Pods. - We have improved the script used when
workers.celery.gracefullTerminationistrue. - We have fixed an error with pools in
scheduler.poolsnot being added to the scheduler. - We have fixed an error with the
scheduler.preinitdbcontainer not knowing the database connection string.
The following values have CHANGED DEFAULTS:
airflow.fernetKey:Is now""by default, to enforce that users generate a custom one.(However, please consider using(We have undone this change inairflow.extraEnvto define it from a pre-created secret)7.1.1, but we still encourage you to set a custom fernetKey!)
dags.installRequirements:- Is now
falseby default, as this was an unintended change with the 7.0.0 upgrade.
- Is now
The following values have been ADDED:
scheduler.initialStartupDelayworkers.initialStartupDelayflower.initialStartupDelayweb.readinessProbe.enabledweb.livenessProbe.enabled
v6.X.X → v7.0.0
WARNING:
You MUST stop using images derived from
puckel/docker-airflowand instead derive fromapache/airflow
This version updates to Airflow 1.10.10, and moves to the official Airflow Docker images. Due to the size of these changes, it may be easier to create a new values.yaml, starting from the one in this repo.
The official image has a new AIRFLOW_HOME, you must change any references in your custom values.yaml:
| Variable | 6.x.x | 7.x.x |
|---|---|---|
AIRFLOW_HOME |
/usr/local/airflow |
/opt/airflow |
dags.path |
/usr/local/airflow/dags |
/opt/airflow/dags |
logs.path |
/usr/local/airflow/logs |
/opt/airflow/logs |
These internal mount paths have moved, you must update any references:
| 6.x.x | 7.x.x |
|---|---|
/usr/local/git |
/home/airflow/git |
/usr/local/scripts |
/home/airflow/scripts |
/usr/local/connections |
/home/airflow/connections |
/usr/local/variables-pools |
/home/airflow/variables-pools |
/usr/local/airflow/.local |
/home/airflow/.local |
The following values have been MOVED:
| 6.x.x | 7.x.x |
|---|---|
airflow.podDisruptionBudgetEnabled |
scheduler.podDisruptionBudget.enabled |
airflow.podDisruptionBudget.maxUnavailable |
scheduler.podDisruptionBudget.maxUnavailable |
airflow.podDisruptionBudget.minAvailable |
scheduler.podDisruptionBudget.minAvailable |
airflow.webReplicas |
web.replicas |
airflow.initdb |
scheduler.initdb |
airflow.preinitdb |
scheduler.preinitdb |
airflow.extraInitContainers |
scheduler.extraInitContainers |
airflow.schedulerNumRuns |
scheduler.numRuns |
airflow.connections |
scheduler.connections |
airflow.variables |
scheduler.variables |
airflow.pools |
scheduler.pools |
airflow.service.* |
web.service.* |
dags.initContainer.installRequirements |
dags.installRequirements |
logsPersistence.* |
logs.persistence.* |
persistence.* |
dags.persistence.* |
If you are using an EXTERNAL postgres database, some configs have changed:
| 6.x.x | 7.x.x | Notes |
|---|---|---|
N/A |
externalDatabase.type |
can choose mysql or postgres |
postgresql.postgresHost |
externalDatabase.host |
|
postgresql.service.port |
externalDatabase.port |
we no longer support changing the port of the embedded postgresql chart |
postgresql.postgresqlDatabase |
externalDatabase.database |
|
postgresql.postgresqlUsername |
externalDatabase.user |
|
postgresql.postgresqlPassword |
N/A |
we don't support storing external database passwords in plain text |
postgresql.existingSecret |
externalDatabase.passwordSecret |
|
postgresql.existingSecretKey |
externalDatabase.passwordSecretKey |
If you are using an EXTERNAL redis database, some configs have changed:
| 6.x.x | 7.x.x | Notes |
|---|---|---|
redis.redisHost |
externalRedis.host |
|
redis.master.service.port |
externalRedis.port |
we no longer support changing the port of the embedded redis chart |
redis.password |
N/A |
we don't support storing external redis passwords in plain text |
N/A |
externalRedis.databaseNumber |
changing the database number was not previously supported |
redis.existingSecret |
externalRedis.passwordSecret |
|
redis.existingSecretKey |
externalRedis.passwordSecretKey |
The following values have been SPLIT:
web.initialDelaySeconds:- -->
web.readinessProbe.initialDelaySeconds - -->
web.livenessProbe.initialDelaySeconds
- -->
The following values have CHANGED BEHAVIOUR:
airflow.executor:- Previously you specified the executor name without the
Executorsuffix, now you must include it. - For example:
Celery-->CeleryExecutor
- Previously you specified the executor name without the
airflow.fernetKey:- Previously if omitted, this would be generated for you, we now have a default value, which we STRONGLY ENCOURAGE you to change.
- Also note, you should consider using
airflow.extraEnvto prevent this value being stored in yourvalues.yaml
dags.installRequirements:- Previously,
dags.installRequirementsonly worked ifdags.initContainer.enabledwas true, now it will work regardless of other settings.
- Previously,
The following values have NEW DEFAULTS:
dags.persistence.accessMode:ReadWriteOnce-->ReadOnlyMany
logs.persistence.accessMode:ReadWriteOnce-->ReadWriteMany
The following values have been REMOVED:
postgresql.service.port:- As there is no reason to change the port of the embedded postgresql, and we have separated the external database configs.
redis.master.service.port:- As there is no reason to change the port of the embedded redis, and we have separated the external redis configs.
The following values have been ADDED:
airflow.extraPipPackages:- Allows extra pip packages to be installed in the airflow-web/scheduler/worker containers.
web.extraPipPackages:- Allows extra pip packages to be installed in the airflow-web container only.
Other changes:
- Special characters will now be correctly encoded in passwords for postgres/mysql/redis.
v5.X.X → v6.0.0
This version updates postgresql and redis dependencies.
Thee following values have CHANGED:
| 5.x.x | 6.x.x | Notes |
|---|---|---|
postgresql.postgresHost |
postgresql.postgresqlHost |
|
postgresql.postgresUser |
postgresql.postgresqlUsername |
|
postgresql.postgresPassword |
postgresql.postgresqlPassword |
|
postgresql.postgresDatabase |
postgresql.postgresqlDatabase |
|
postgresql.persistence.accessMode |
postgresql.persistence.accessModes |
Instead of a single value, now the config accepts an array |
redis.master.persistence.accessMode |
redis.master.persistence.accessModes |
Instead of a single value, now the config accepts an array |
v4.X.X → v5.0.0
WARNING:
This upgrade will fail if a custom ingress path is set for web and/or flower and
web.baseUrland/orflower.urlPrefix
This version splits the configuration for webserver and flower web UI from Ingress configurations, for separation of concerns.
The following values have been ADDED:
web.baseUrlflower.urlPrefix
v3.X.X → v4.0.0
This version splits the specs for the NodeSelector, Affinity and Toleration features.
Instead of being global, and injected in every component, they are now defined by component to provide more flexibility for your deployments.
As such, the migration steps are really simple, just ust copy and paste your node/affinity/tolerance definitions in the four airflow components, which are worker, scheduler, flower and web.
The default values.yaml file should help you with locating those.