stable/airflow/UPGRADE.md
v7.12.X → v7.13.0The following values have been ADDED:
flower.oauthDomainsv7.11.X → v7.12.0The following values have been ADDED:
ingress.web.labelsingress.flower.labelsingress.flower.precedingPathsingress.flower.succeedingPathsv7.10.X → v7.11.0The following IMPROVEMENTS have been made:
scheduler.existingSecretConnections with an externally created Secret to store airflow connections.
(Rather than storing them in plain-text with scheduler.connections)The following values have been ADDED:
scheduler.existingSecretConnectionsv7.9.X → v7.10.0The following IMPROVEMENTS have been made:
_CMD variables for AIRFLOW__CORE__SQL_ALCHEMY_CONN_CMD, AIRFLOW__CELERY__RESULT_BACKEND_CMD, and AIRFLOW__CELERY__BROKER_URL_CMD:
7.8.0kubectl exec to run commands like airflow create_userairflow.config are now passed as-defined in your values.yaml:
" characters in JSON stringsv7.8.X → v7.9.0The following IMPROVEMENTS have been made:
KubernetesPodOperator(log_events_on_failure=True)rbac.events to true (Default: false)The following values have been ADDED:
rbac.eventsv7.7.X → v7.8.0WARNING:
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:
1.10.12scheduler.livenessProbe.enabledThe following values have been ADDED:
scheduler.livenessProbe.enabledscheduler.livenessProbe.initialDelaySecondsscheduler.livenessProbe.periodSecondsscheduler.livenessProbe.failureThresholdv7.6.X → v7.7.0If 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.0WARNING:
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:
safe-to-evict annotations (so that pods with emptyDir Volumes can be evicted by cluster-autoscaler)The following values have CHANGED DEFAULTS:
workers.celery.instances:
16 by default (letting each worker take 16 tasks)postgresql.master.podAnnotations:
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}redis.master.podAnnotations:
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}redis.slave.podAnnotations:
{"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"}The following values have been ADDED:
flower.minReadySecondsflower.podDisruptionBudget.*flower.replicasflower.safeToEvictscheduler.safeToEvictweb.podDisruptionBudget.*web.safeToEvictworkers.podDisruptionBudget.*workers.safeToEvictv7.4.X → v7.5.0The following IMPROVEMENTS have been made:
externalDatabase.properties for TLS or other advanced parametersThe following values have been ADDED:
externalDatabase.propertiesv7.3.X → v7.4.0The following IMPROVEMENTS have been made:
workers.celery.gracefullTerminationPeriod for tasks to finishSIGTERM to workerworkers.terminationPeriod for kill to finishSIGKILL to workerThe following values have been ADDED:
workers.celery.gracefullTerminationPeriod:
workers.terminationPeriod, consider lowering it to 60 and setting a high value for workers.celery.gracefullTerminationPeriodv7.2.X → v7.3.0The following IMPROVEMENTS have been made:
flower.service.nodePort.httpThe following values have been ADDED:
flower.service.nodePort.httpv7.1.X → v7.2.0The following IMPROVEMENTS have been made:
flower.basicAuthSecret and flower.basicAuthSecretKey.
The secret value will get encoded and included in the liveness probe's header.The following values have been ADDED:
flower.basicAuthSecretflower.basicAuthSecretKeyv7.0.X → v7.1.0The following IMPROVEMENTS have been made:
*.initialStartupDelay to non-zero values.airflow.executor is set to KubernetesExecutor:
AIRFLOW__KUBERNETES__NAMESPACE, AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME, and AIRFLOW__KUBERNETES__ENV_FROM_CONFIGMAP_REF' in your redis/postgres/mysql password.dags.initContainer.enabled and git.gitSync.enabled are false)AIRFLOW__CORE__SQL_ALCHEMY_CONN, AIRFLOW__CELERY__RESULT_BACKEND, and AIRFLOW__CELERY__BROKER_URL environment variables are now available if you kubectl exec ... into airflow Pods.workers.celery.gracefullTermination is true.scheduler.pools not being added to the scheduler.scheduler.preinitdb container not knowing the database connection string.The following values have CHANGED DEFAULTS:
airflow.fernetKey:
"" by default, to enforce that users generate a custom one.airflow.extraEnv to define it from a pre-created secret)7.1.1, but we still encourage you to set a custom fernetKey!)dags.installRequirements:
false by default, as this was an unintended change with the 7.0.0 upgrade.The following values have been ADDED:
scheduler.initialStartupDelayworkers.initialStartupDelayflower.initialStartupDelayweb.readinessProbe.enabledweb.livenessProbe.enabledv6.X.X → v7.0.0WARNING:
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.initialDelaySecondsweb.livenessProbe.initialDelaySecondsThe following values have CHANGED BEHAVIOUR:
airflow.executor:
Executor suffix, now you must include it.Celery --> CeleryExecutorairflow.fernetKey:
airflow.extraEnv to prevent this value being stored in your values.yamldags.installRequirements:
dags.installRequirements only worked if dags.initContainer.enabled was true, now it will work regardless of other settings.The following values have NEW DEFAULTS:
dags.persistence.accessMode:
ReadWriteOnce --> ReadOnlyManylogs.persistence.accessMode:
ReadWriteOnce --> ReadWriteManyThe following values have been REMOVED:
postgresql.service.port:
redis.master.service.port:
The following values have been ADDED:
airflow.extraPipPackages:
web.extraPipPackages:
Other changes:
v5.X.X → v6.0.0This 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.0WARNING:
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.urlPrefixv3.X.X → v4.0.0This 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.