Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Add meeting information

...

https://github.com/apache/airflow/issues/64037

Discussion

https://lists.apache.org/thread/9714k5wo2jwz1xwdnh9xnp98hloxms15

Bi-Weekly Interest Group Alignment/Dicuss Call

Helm Release Discussion 

Thursday 7 May • 18:00-19:00 CEST (Central European Summer Time)

Link to video call: https://meet.google.com/yjo-ueoq-nak

Complexity Analysis and Rating - Chart Parameters

...

Parameter

Description

Default

Opinion Jens

Opinion Bugra

Opinion Przemek

airflowLocalSettings

airflow_local_settings file as a string (templated). You can bake an airflow_local_settings.py into your image instead. In that case, set this value to null.

See values.yaml

keep

keep

Keep

airflowVersion

Airflow version (Used to make some decisions based on Airflow Version being deployed).

3.1.7

keep

keep

Keep

apiSecretAnnotations

Annotations to add to the Api secret.

{}

Why is this for flask in AF3?

Description remains from v2 terms. 

Move under apiServer section

apiSecretKey

The Flask secret key for Airflow Api to encrypt browser session.

~

Why is this for flask in AF3?

Description remains from v2 terms. 

Maybe dedicated section for flask-related configs 🤔


 

apiServer.apiServerConfig

This string (templated) will be mounted into the Airflow API Server as a custom webserver_config.py. You can bake a webserver_config.py in to your image instead or specify a configmap containing the webserver_config.py.

~

Examples:

apiServerConfig: |-
  from airflow import configuration as conf

  # The SQLAlchemy connection string.
  SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')

  # Flask-WTF flag for CSRF
  CSRF_ENABLED = True

keep

Is example still relevant?

This is still relevant if the user is using providers-fab and adding more fine-grained authentication integration through fab. That also generalised to BaseAuthManager and to providers that implement 3rd-party libraries and tools. I think the description should be updated.

webserver_config.py migration check mentioned above.

apiServer.apiServerConfigConfigMapName

The configmap name containing the webserver_config.py.

~

Examples:

apiServerConfigConfigMapName: my-api-server-configmap

keep

keep

keep

config

Settings to go into the mounted airflow.cfg

See values.yaml

keep

keep

keep

createUserJob.defaultUser.enabled

Enable default user creation.

True

keep

keep

If I remember correctly it is only flask-related, so maybe move to flask dedicated section?

defaultAirflowDigest

Default airflow digest to deploy. Overrides tag.

~

keepkeepkeep

defaultAirflowRepository

Default airflow repository. Overrides all the specific images below.

apache/airflow

keep

keep

keep

defaultAirflowTag

Default airflow tag to deploy.

3.1.7

keep

keep

keep

executor

Airflow executor.

CeleryExecutor

 

 

keep

fernetKey

The Fernet key used to encrypt passwords (can only be set during install, not upgrade).

~

keep

keep

Move to the new encryption section

fernetKeySecretAnnotations

Annotations to add to the Fernet Key secret.

{}

keep

keep

fullnameOverride

Provide a name to substitute for the full names of resources

""

 

 

keep

jwtSecret

Secret key used to encode and decode JWTs to authenticate to public and private APIs (can only be set during install, not upgrade).

~

keep

keep

Move to the new encryption section

jwtSecretAnnotations

Annotations to add to the JWT secret.

{}

keep

keep

nameOverride

Override the name of the chart

""

 

 

Change to chartNameOverride

pgbouncer.enabled

Enable PgBouncer.

False

keep

keep

Whole section comment is under pgbouncer section 

pgbouncer.mountConfigSecret

Whether to mount the config secret files under /etc/pgbouncer/ by default.

True

keep

keep

schedulerName

Specify kube scheduler name for Pods.

~

Put this to Kustomize?

No disagreement with Jens.No strong opinion

useStandardNaming

Use standard naming for all resources using airflow.fullname template

False

 

  Deprecate the false value and remove it in future

webserver.webserverConfig

This string (templated) will be mounted into the Airflow webserver as a custom webserver_config.py. You can bake a webserver_config.py in to your image instead or specify a configmap containing the webserver_config.py.

~

Examples:

webserverConfig: |-
  from airflow import configuration as conf

  # The SQLAlchemy connection string.
  SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')

  # Flask-WTF flag for CSRF
  CSRF_ENABLED = True

removed with dropping AF2 support




Drop with Airflow 2

 

 

webserver.webserverConfigConfigMapName

The configmap name containing the webserver_config.py.

~

Examples:

webserverConfigConfigMapName: my-webserver-configmap

 

webserverSecretAnnotations

Annotations to add to the webserver secret.

{}

 

webserverSecretKey

The Flask secret key for Airflow Webserver to encrypt browser session.

~

 

workers.schedulerName

Specify kube scheduler name for Airflow Celery workers objects and pods created with pod-template-file.

~

Put this to Kustomize?

No disagreement with Jens.

No strong opinion

...

Parameter

Description

Default

Opinion Jens

Opinion Bugra

Opinion Przemek

workers.affinity

Specify scheduling constraints for Airflow Celery worker pods and pods created with pod-template-file.

See values.yaml

All "workers" options should go to "workers.celery", Deprecations /fallback removed

 

Move proper sections to workers.celery/workers.kubernetes sections and remove all other under the workers section (finish work started in https://github.com/apache/airflow/issues/28880)

workers.annotations

Annotations to add to the Airflow Celery worker deployment.

{}

ditto

 

workers.args

Args to use when running Airflow Celery workers (templated) (deprecated, use workers.celery.args instead).

['bash', '-c', 'exec \\\nairflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "celery worker" "worker" }}\n{{- if and .Values.workers.queue (ne .Values.workers.queue "default") }}\n{{- " -q " }}{{ .Values.workers.queue }}\n{{- end }}']

ditto 

 

workers.celery.args

Args to use when running Airflow Celery workers (templated).

~

 

 

keep

workers.celery.command

Command to use when running Airflow Celery workers (templated).

~

 

 

keep

workers.celery.enableDefault

Enable the default worker defined by the workers and workers.celery configurations.

True

Should we have a "default" worker and sets in parallel? Can we not make the set havinf one default to reduce complexity?

 

keep

workers.celery.kerberosInitContainer.enabled

Enable Kerberos init container.

~

 

 

Move to Kustomize with the whole Kerberos stuff

workers.celery.kerberosInitContainer.resources

Resources on kerberos init container.

{}

Examples:

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

 

 

workers.celery.livenessProbe.command

Command for LivenessProbe

~

 

 

keep

workers.celery.livenessProbe.enabled

Enable liveness probe for Airflow Celery workers.

~

 

 

keep

workers.celery.livenessProbe.failureThreshold

Minimum consecutive failures for the probe to be considered failed after having succeeded. Minimum value is 1.

~

 

 

keep

workers.celery.livenessProbe.initialDelaySeconds

Number of seconds after the container has started before liveness probes are initiated.

~

 

 

keep

workers.celery.livenessProbe.periodSeconds

How often (in seconds) to perform the probe. Minimum value is 1.

~

 

 

keep

workers.celery.livenessProbe.timeoutSeconds

Number of seconds after which the probe times out. Minimum value is 1 seconds.

~

 

 

keep

workers.celery.persistence.annotations

Annotations to add to Airflow Celery worker volumes.

{}

 

 

keep

workers.celery.persistence.enabled

Enable persistent volumes.

~

 

 

keep

workers.celery.persistence.fixPermissions

Execute init container to chown log directory. This is currently only needed in kind, due to usage of local-path provisioner.

~

 

 

keep

workers.celery.persistence.size

Volume size for Airflow Celery worker StatefulSet.

~

 

 

keep

workers.celery.persistence.storageClassName

If using a custom StorageClass, pass name ref to all StatefulSets here (templated).

~

 

 

keep

workers.celery.podManagementPolicy

Specifies the policy for managing pods within the Airflow Celery worker. Only applicable to StatefulSet.

~

 

 

keep

workers.celery.queue

Queue name for the worker.

default

 

 

keep

workers.celery.replicas

Number of Airflow Celery workers.

~

 

 

keep

workers.celery.sets

List of worker sets. Each item can overwrite values from the parent workers and workers.celery sections.

[]

Here all properties from above and below should go in, with one "default"?

 


workers.celery.strategy

Specifies the strategy used to replace old Airflow Celery worker pods by new ones when deployed as a Deployment.

~

 

 

keep

workers.celery.updateStrategy

Specifies the strategy used to replace old Airflow Celery worker pods by new ones when deployed as a StatefulSet.

~

 

 

keep

workers.command

Command to use when running Airflow Celery workers and using pod-template-file (templated). Use workers.celery.command and/or workers.kubernetes.command to separate value between Celery workers and pod-template-file.

~

^^^ ditto

 

Move proper sections to workers.celery/workers.kubernetes sections and remove all other under the workers section (finish work started in https://github.com/apache/airflow/issues/28880)

workers.env

Add additional env vars to the Airflow Celery workers and pods created with pod-template-file.

[]

ditto

 

workers.extraContainers

Launch additional containers into Airflow Celery workers and pods created with pod-template-file (templated). Note, if used with KubernetesExecutor, you are responsible for signaling sidecars to exit when the main container finishes so Airflow can continue the worker shutdown process!

[]

ditto

 

workers.extraInitContainers

Add additional init containers into Airflow Celery workers and pods created with pod-template-file (templated).

[]

ditto

 

workers.extraPorts

Expose additional ports of Airflow Celery worker container.

[]

ditto

 

workers.extraVolumeMounts

Additional volume mounts attached to the Airflow Celery workers and pods created with pod-template-file.

[]

ditto

 

workers.extraVolumes

Additional volumes attached to the Airflow Celery workers and pods created with pod-template-file.

[]

ditto

 

workers.hostAliases

Specify HostAliases for Airflow Celery worker pods and pods created with pod-template-file.

[]

Examples:

hostAliases:
- hostnames:
  - test.hostname.one
  ip: 127.0.0.2
hostAliases:
- hostnames:
  - test.hostname.two
  ip: 127.0.0.3

ditto

 

workers.hpa.behavior

HorizontalPodAutoscalerBehavior configures the scaling behavior of the target.

{}

Should we have HPA and KEDA? How about moving this to Kustomize?

I really love this idea, as mentioned above, I would move them to Kustomize. 

workers.hpa.enabled

Allow HPA autoscaling (KEDA must be disabled).

False

 

 

workers.hpa.maxReplicaCount

Maximum number of Airflow Celery workers created by HPA.

5

 

 

workers.hpa.metrics

Specifications for which to use to calculate the desired replica count.

[{'type': 'Resource', 'resource': {'name': 'cpu', 'target': {'type': 'Utilization', 'averageUtilization': 80}}}]

 

 

workers.hpa.minReplicaCount

Minimum number of Airflow Celery workers created by HPA.

0

 

 

workers.keda.advanced

Advanced KEDA configuration.

{}

 

 

Move to Kustomize

 

 

 

 

workers.keda.advanced.horizontalPodAutoscalerConfig

HorizontalPodAutoscalerConfig specifies horizontal scale config.

{}

 

 

workers.keda.advanced.horizontalPodAutoscalerConfig.behavior

HorizontalPodAutoscalerBehavior configures the scaling behavior of the target.

{}

 

 

workers.keda.cooldownPeriod

How many seconds KEDA will wait before scaling to zero.

30

 

 

workers.keda.enabled

Allow KEDA autoscaling.

False

 

 

workers.keda.maxReplicaCount

Maximum number of Airflow Celery workers created by KEDA.

10

 

 

workers.keda.minReplicaCount

Minimum number of Airflow Celery workers created by KEDA.

0

 

 

workers.keda.namespaceLabels

Labels used in matchLabels for namespace in the PgBouncer NetworkPolicy.

{}

 

 

workers.keda.pollingInterval

How often KEDA polls the airflow DB to report new scale requests to the HPA.

5

 

 

workers.keda.query

Query to use for KEDA autoscaling. Must return a single integer.

SELECT ceil(COUNT(*)::decimal / {{ .Values.config.celery.worker_concurrency }}) FROM task_instance WHERE (state='running' OR state='queued') AND queue IN ( {{- range $i, $q := splitList "," .Values.workers.queue -}} {{- if $i }},{{ end }}'{{ $q | trim }}' {{- end -}} ) {{- if contains "CeleryKubernetesExecutor" .Values.executor }} AND queue != '{{ .Values.config.celery_kubernetes_executor.kubernetes_queue }}' {{- else if contains "KubernetesExecutor" .Values.executor }} AND executor IS DISTINCT FROM 'KubernetesExecutor' {{- else if contains "airflow.providers.edge3.executors.EdgeExecutor" .Values.executor }} AND executor IS DISTINCT FROM 'EdgeExecutor' {{- end }}

 

 

workers.keda.usePgbouncer

Weather to use PGBouncer to connect to the database or not when it is enabled. This configuration will be ignored if PGBouncer is not enabled.

True

 

 

workers.kerberosInitContainer.enabled

Enable Kerberos init container.

False

^^^ ditto

I agree, and Kerberos in Kustomize looks more manageable from both perspectives.

workers.kerberosInitContainer.resources

Resources on kerberos init container.

{}

Examples:

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

ditto

 

workers.kerberosSidecar.enabled

Enable Kerberos sidecar.

False

ditto 

 

workers.kerberosSidecar.resources

Resources on kerberos sidecar.

{}

Examples:

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

ditto

 

workers.kubernetes.command

Command to use in pod-template-file (templated).

~

 

 

keep

workers.kubernetes.kerberosInitContainer.enabled

Enable kerberos init container.

~

 

 

Move to Kustomize

workers.kubernetes.kerberosInitContainer.resources

Resources on kerberos init container.

{}

Examples:

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

 

 

workers.labels

Labels to add to the Airflow Celery workers objects and pods created with pod-template-file.

{}

^^^ ditto

 

Move proper sections to workers.celery/workers.kubernetes sections and remove all other under the workers section (finish work started in https://github.com/apache/airflow/issues/28880)

workers.livenessProbe.command

Command for LivenessProbe (deprecated, use workers.celery.livenessProbe.command instead)

~

ditto

 

workers.livenessProbe.enabled

Enable liveness probe for Airflow Celery workers (deprecated, use workers.celery.livenessProbe.enabled instead).

True

ditto

 

workers.livenessProbe.failureThreshold

Minimum consecutive failures for the probe to be considered failed after having succeeded. Minimum value is 1 (deprecated, use workers.celery.livenessProbe.failureThreshold instead).

5

ditto

 

workers.livenessProbe.initialDelaySeconds

Number of seconds after the container has started before liveness probes are initiated (deprecated, use workers.celery.livenessProbe.initialDelaySeconds instead).

10

ditto

 

workers.livenessProbe.periodSeconds

How often (in seconds) to perform the probe. Minimum value is 1 (deprecated, use workers.celery.livenessProbe.periodSeconds instead).

60

ditto

 

workers.livenessProbe.timeoutSeconds

Number of seconds after which the probe times out. Minimum value is 1 seconds (deprecated, use workers.celery.livenessProbe.timeoutSeconds instead).

20

ditto

 

workers.nodeSelector

Select certain nodes for Airflow Celery worker pods and pods created with pod-template-file.

{}

ditto

 

workers.persistence.annotations

Annotations to add to Airflow Celery worker volumes (deprecated, use workers.celery.persistence.annotations instead).

{}

ditto

 

workers.persistence.enabled

Enable persistent volumes (deprecated, use workers.celery.persistence.enabled instead).

True

ditto

 

workers.persistence.fixPermissions

Execute init container to chown log directory. This is currently only needed in kind, due to usage of local-path provisioner (deprecated, use workers.celery.persistence.fixPermissions instead).

False

ditto

 

Probably remove and/or move to Kustomize. It is only used in volume-permissions sidecar in workers, which, looking at the comment, is only needed with the local path provisioner https://github.com/rancher/local-path-provisioner setup.

workers.persistence.size

Volume size for Airflow Celery worker StatefulSet (deprecated, use workers.celery.persistence.size instead).

100Gi

ditto

 

Move proper sections to workers.celery/workers.kubernetes sections and remove all other under the workers section (finish work started in https://github.com/apache/airflow/issues/28880)

 

 

workers.persistence.storageClassName

If using a custom StorageClass, pass name ref to all StatefulSets here (templated) (deprecated, use workers.celery.persistence.storageClassName instead).

~

ditto

 

workers.podAnnotations

Annotations to add to the Airflow Celery workers and pods created with pod-template-file.

{}

ditto

 

workers.podDisruptionBudget.config.maxUnavailable

Max unavailable pods for worker.

1

ditto

 

workers.podDisruptionBudget.config.minAvailable

Min available pods for worker.

1

ditto

 

workers.podDisruptionBudget.enabled

Enable pod disruption budget.

False

ditto

 

workers.podManagementPolicy

Specifies the policy for managing pods within the Airflow Celery worker (deprecated, use workers.celery.podManagementPolicy instead). Only applicable to StatefulSet.

~

ditto

 

workers.priorityClassName

Specify priority for Airflow Celery worker pods and pods created with pod-template-file.

~

ditto

 

workers.replicas

Number of Airflow Celery workers (deprecated, use workers.celery.replicas instead).

1

ditto

 

workers.resources

Resource configuration for Airflow Celery workers and pods created with pod-template-file.

{}

Examples:

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

ditto

 

workers.runtimeClassName

Specify runtime for Airflow Celery worker pods and pods created with pod-template-file.

~

ditto

 

workers.safeToEvict

This setting tells Kubernetes that it’s ok to evict when it wants to scale a node down. It is used by Airflow Celery workers and pod-template-file.

False

ditto

 

workers.securityContext

Security context for the Airflow Celery worker pods and pods created with pod-template-file (deprecated, use securityContexts instead). If not set, the values from securityContext will be used.

{}

Examples:

securityContext:
  fsGroup: 0
  runAsGroup: 0
  runAsUser: 50000

ditto

 

workers.serviceAccount.annotations

Annotations to add to the worker Kubernetes ServiceAccount.

{}

ditto

 

workers.serviceAccount.automountServiceAccountToken

Specifies if ServiceAccount’s API credentials should be mounted onto Pods

True

ditto

 

workers.serviceAccount.create

Specifies whether a ServiceAccount should be created.

True

ditto

 

workers.serviceAccount.name

The name of the ServiceAccount to use. If not set and create is true, a name is generated using the release name.

~

ditto

 

workers.strategy

Specifies the strategy used to replace old Airflow Celery worker pods by new ones when deployed as a Deployment (deprecated, use workers.celery.strategy instead).

{'rollingUpdate': {'maxSurge': '100%', 'maxUnavailable': '50%'}}

ditto

 

workers.terminationGracePeriodSeconds

Grace period for tasks to finish after SIGTERM is sent from Kubernetes. It is used by Airflow Celery workers and pod-template-file.

600

ditto

 

workers.tolerations

Specify Tolerations for Airflow Celery worker pods and pods created with pod-template-file.

[]

ditto

 

workers.topologySpreadConstraints

Specify topology spread constraints for Airflow Celery worker pods and pods created with pod-template-file.

[]

ditto

 

workers.updateStrategy

Specifies the strategy used to replace old Airflow Celery worker pods by new ones when deployed as a StatefulSet (deprecated, use workers.celery.updateStrategy instead).

~

ditto

 

workers.volumeClaimTemplates

Specify additional volume claim template for Airflow Celery workers.

[]

Examples:

volumeClaimTemplates:
- accessModes:
  - ReadWriteOnce
  name: data-volume-1
  resources:
    requests:
      storage: 10Gi
  storageClassName: storage-class-1
volumeClaimTemplates:
- accessModes:
  - ReadWriteOnce
  name: data-volume-2
  resources:
    requests:
      storage: 20Gi
  storageClassName: storage-class-2

ditto

 

workers.waitForMigrations.enabled

Enable wait-for-airflow-migrations init container.

True

ditto

 

workers.waitForMigrations.env

Add additional env vars to wait-for-airflow-migrations init container.

[]

ditto

 

...