1# Licensed to the Apache Software Foundation (ASF) under one
2# or more contributor license agreements. See the NOTICE file
3# distributed with this work for additional information
4# regarding copyright ownership. The ASF licenses this file
5# to you under the Apache License, Version 2.0 (the
6# "License"); you may not use this file except in compliance
7# with the License. You may obtain a copy of the License at
9# http://www.apache.org/licenses/LICENSE-2.0
11# Unless required by applicable law or agreed to in writing,
12# software distributed under the License is distributed on an
13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14# KIND, either express or implied. See the License for the
15# specific language governing permissions and limitations
17# Provide a name to substitute for the full names of resources
19# Default values for Airflow.
20# This is a YAML-formatted file.
21# Declare variables to be passed into your templates.
23# Provide a name to substitute for the name of the chart
25# Use standard naming for all resources using airflow.fullname template
26# Consider removing this later and default it to true
27# to make this chart follow standard naming conventions using the fullname template.
28# For now this is an opt-in switch for backwards compatibility to leverage the standard naming convention
29# and being able to use fully fullnameOverride and nameOverride in all resources
30# For new installations - it is recommended to set it to True to follow standard naming conventions
31# For existing installations, this will rename and redeploy your resources with the new names. Be aware that
32# this will recreate your Deployment/StatefulSets along with their persistent volume claims and data storage
33# migration may be needed to keep your old data
34useStandardNaming: false
35# Max number of old replicasets to retain. Can be overridden by each Deployment's revisionHistoryLimit
36revisionHistoryLimit: ~
37# User and group of Airflow user
40# Default security context for Airflow (deprecated, use `securityContexts` instead)
46# Detailed default security context for Airflow Deployments
50# Global container lifecycle hooks for Airflow containers
51containerLifecycleHooks: {}
52# Airflow home directory
54airflowHome: /opt/airflow
55# Default Airflow repository -- overridden by all the specific images below
56defaultAirflowRepository: cgr.dev/chainguard-private/airflow
57# Default Airflow tag to deploy
58defaultAirflowTag: latest
59# Default Airflow digest. If specified, it takes precedence over tag
60defaultAirflowDigest: sha256:b6f84d34e308de2c13d6545b2b27139c6ebbe058a6aef3420c709d8fd0485133
61# Airflow version (Used to make some decisions based on Airflow Version being deployed)
62# Version 3.1.0 and above is supported.
63airflowVersion: "3.2.2"
68 # Specifying digest takes precedence over tag.
70 pullPolicy: IfNotPresent
71 # To avoid images with user code, you can turn this to 'true' and
72 # all the 'run-airflow-migrations' and 'wait-for-airflow-migrations' jobs/containers
73 # will use the images from 'defaultAirflowRepository:defaultAirflowTag' values
74 # to run and wait for DB migrations .
75 useDefaultImageForMigration: false
76 # timeout (in seconds) for airflow-migrations to complete
77 migrationsWaitTimeout: 60
79 # Note that `images.pod_template.repository` and `images.pod_template.tag` parameters can be overridden
80 # in `config.kubernetes_executor` section. So for these parameters to have effect
81 # `config.kubernetes_executor.worker_container_repository` and
82 # `config.kubernetes_executor.worker_container_tag` must be not set .
85 pullPolicy: IfNotPresent
87 repository: cgr.dev/chainguard-private/flower
88 tag: latest@sha256:717be87c725ded6b34ebeaf0f077acf9c3520f12c66bb6aac56ba9fa9fe27db3
89 pullPolicy: IfNotPresent
91 repository: cgr.dev/chainguard-private/prometheus-statsd-exporter
92 tag: latest@sha256:2a28d85d64c22f549ad7fd48bbd40ff2de95650e7cde7adc9f5e2793fe70e448
93 pullPolicy: IfNotPresent
95 repository: cgr.dev/chainguard-private/redis
96 # Redis is limited to 7.2-bookworm due to licencing change
97 # https://redis.io/blog/redis-adopts-dual-source-available-licensing/
98 tag: latest@sha256:d13a71528be960770ccdd5a0dc7afa9afec54d67ed4fe4c118a9ee009ac62bd0
99 pullPolicy: IfNotPresent
101 repository: cgr.dev/chainguard-private/pgbouncer
102 tag: latest@sha256:e2b6293fc391686b939af9c90c70c8ee3add321f8512faf95a824ff062c0b1d1
103 pullPolicy: IfNotPresent
105 repository: cgr.dev/chainguard-private/prometheus-pgbouncer-exporter
106 tag: latest@sha256:4bb81191d9efc4d97a1ed86007fdb675a6edd61019bb0342351d8f0db8180653
107 pullPolicy: IfNotPresent
109 repository: cgr.dev/chainguard-private/git-sync
110 tag: latest@sha256:6f6f4d0cd27303d8d6306a49cfab019f875f70d1e3acf454826b319c6f2ef0cf
111 pullPolicy: IfNotPresent
113 repository: otel/opentelemetry-collector-contrib
115 pullPolicy: IfNotPresent
116# Select certain nodes for Airflow pods.
120topologySpreadConstraints: []
122# Add common labels to all objects and pods defined in this chart.
124# Whenever service links should be added to each pod.
126# List of existing Kubernetes secrets containing Base64 encoded credentials to connect to private
127# registries. Items can be either strings or {name: secret} objects.
129# Ingress configuration
131 # Enable all ingress resources
133 # `ingress.web.enabled`,
134 # `ingress.apiServer.enabled` and/or
135 # `ingress.flower.enabled`
138 # Configs for the Ingress of the API Server (Airflow 3+)
140 # Enable API Server ingress resource
142 # Annotations for the API Server Ingress
144 # The path for the API Server Ingress
146 # The pathType for the above path
147 pathType: "ImplementationSpecific"
148 # The hostname for the API Server Ingress (deprecated, use `ingress.apiServer.hosts` instead)
150 # The hostnames or hosts configuration for the API Server Ingress (templated)
153 # # configs for API Server Ingress TLS
155 # # Enable TLS termination for the API Server Ingress
157 # # The name of a pre-created Secret containing a TLS private key and certificate
160 # The Ingress Class for the API Server Ingress
162 # Configs for API Server Ingress TLS (deprecated, use `ingress.apiServer.hosts[*].tls` instead)
164 # Enable TLS termination for the API Server Ingress
166 # The name of a pre-created Secret containing a TLS private key and certificate
168 # HTTP paths to add to the API Server Ingress before the default path
170 # HTTP paths to add to the API Server Ingress after the default path
172 # Configs for the Ingress of the web Service (Airflow <3.0.0)
174 # Enable web ingress resource
176 # Annotations for the web Ingress
178 # The path for the web Ingress
180 # The pathType for the above path
181 pathType: "ImplementationSpecific"
182 # The hostname for the web Ingress (deprecated, use `ingress.web.hosts` instead)
184 # The hostnames or hosts configuration for the web Ingress (templated)
187 # # Configs for web Ingress TLS
189 # # Enable TLS termination for the web Ingress
191 # # The name of a pre-created Secret containing a TLS private key and certificate
194 # The Ingress Class for the web Ingress
196 # Configs for web Ingress TLS (deprecated, use `ingress.web.hosts[*].tls` instead)
198 # Enable TLS termination for the web Ingress
200 # The name of a pre-created Secret containing a TLS private key and certificate
202 # HTTP paths to add to the web Ingress before the default path
204 # HTTP paths to add to the web Ingress after the default path
206 # Configs for the Ingress of the flower Service
208 # Enable web ingress resource
210 # Annotations for the flower Ingress
212 # The path for the flower Ingress
214 # The pathType for the above path
215 pathType: "ImplementationSpecific"
216 # The hostname for the flower Ingress (deprecated, use `ingress.flower.hosts` instead)
218 # The hostnames or hosts configuration for the flower Ingress (templated)
222 # # Enable TLS termination for the flower Ingress
224 # # The name of a pre-created Secret containing a TLS private key and certificate
227 # The Ingress Class for the flower Ingress
229 # Configs for flower Ingress TLS (deprecated, use `ingress.flower.hosts[*].tls` instead)
231 # Enable TLS termination for the flower Ingress
233 # The name of a pre-created Secret containing a TLS private key and certificate
235 # Configs for the Ingress of the StatsD Service
237 # Enable web ingress resource
239 # Annotations for the StatsD Ingress
241 # The path for the StatsD Ingress
243 # The pathType for the above path
244 pathType: "ImplementationSpecific"
245 # The hostname for the StatsD Ingress (deprecated, use `ingress.statsd.hosts` instead)
247 # The hostnames or hosts configuration for the StatsD Ingress (templated)
251 # # Enable TLS termination for the StatsD Ingress
253 # # The name of a pre-created Secret containing a TLS private key and certificate
256 # The Ingress Class for the StatsD Ingress
258 # Configs for the Ingress of the PgBouncer Service
260 # Enable web ingress resource
262 # Annotations for the PgBouncer Ingress
264 # The path for the PgBouncer Ingress
266 # The pathType for the above path
267 pathType: "ImplementationSpecific"
268 # The hostname for the PgBouncer Ingress (deprecated, use `ingress.pgbouncer.hosts` instead)
270 # The hostnames or hosts configuration for the PgBouncer Ingress (templated)
274 # # Enable TLS termination for the PgBouncer Ingress
276 # # The name of a pre-created Secret containing a TLS private key and certificate
279 # The Ingress Class for the PgBouncer Ingress
281# Network policy configuration
283 # Enabled network policies
285# Extra annotations to apply to all Airflow pods (templated)
286airflowPodAnnotations: {}
287# Extra annotations to apply to main Airflow ConfigMap
288airflowConfigAnnotations: {}
289# 'airflow_local_settings' file as a string (templated)
290airflowLocalSettings: |-
291 {{- if semverCompare "<3.0.0" .Values.airflowVersion }}
292 {{- if not (or .Values.webserverSecretKey .Values.webserverSecretKeySecretName) }}
293 from airflow.www.utils import UIAlert
295 DASHBOARD_UIALERTS = [
297 'Usage of a dynamic webserver secret key detected. We recommend a static webserver secret key instead.'
299 '"https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#webserver-secret-key" '
300 'target="_blank" rel="noopener noreferrer">'
301 'Helm Chart Production Guide</a> for more details.',
309# Enable RBAC (default on most clusters these days)
311 # Specifies whether RBAC resources should be created
313 createSCCRoleBinding: false
315# One or multiple of: LocalExecutor, CeleryExecutor, KubernetesExecutor
316# For Airflow <3.0, LocalKubernetesExecutor and CeleryKubernetesExecutor are supported.
317# Specify executors in a prioritized list to leverage multiple execution environments as needed:
318# https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/index.html#using-multiple-executors-concurrently
319executor: "CeleryExecutor"
320# If this is true and using LocalExecutor/KubernetesExecutor/CeleryKubernetesExecutor, the scheduler's
321# Service Account will have access to communicate with the api-server and launch pods/jobs.
322# If this is true and using CeleryExecutor/KubernetesExecutor/CeleryKubernetesExecutor, the workers
323# will be able to launch pods/jobs.
324allowPodLaunching: true
325allowJobLaunching: false
326# Environment variables for all Airflow containers
331# Volumes for all Airflow containers
333# VolumeMounts for all Airflow containers
335# Secrets for all Airflow containers
341# Enables selected built-in secrets that are set via environment variables by default.
342# Those secrets are provided by the Helm Chart secrets by default but in some cases you
343# might want to provide some of those variables with _CMD or _SECRET variable, and you should
344# in this case disable setting of those variables by setting the relevant configuration to 'false'.
345enableBuiltInSecretEnvVars:
346 AIRFLOW__CORE__FERNET_KEY: true
347 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: true
348 AIRFLOW_CONN_AIRFLOW_DB: true
349 AIRFLOW__API__SECRET_KEY: true
350 AIRFLOW__API_AUTH__JWT_SECRET: true
351 AIRFLOW__WEBSERVER__SECRET_KEY: true
352 AIRFLOW__CELERY__RESULT_BACKEND: true
353 AIRFLOW__CELERY__BROKER_URL: true
354 AIRFLOW__ELASTICSEARCH__HOST: true
355 AIRFLOW__OPENSEARCH__HOST: true
356# Priority Classes that will be installed by charts.
357# Ideally, there should be an entry for dagProcessor, flower,
358# pgbouncer, scheduler, statsd, triggerer, webserver/api-server, worker.
359# The format for priorityClasses is an array with each element having:
360# * name is the name of the priorityClass. Ensure the same name is given to the respective section as well
361# * preemptionPolicy for the priorityClass
362# * value is the preemption value for the priorityClass
364# - name: class1 (if this is for dagProcessor, ensure overriding `dagProcessor.priorityClass` too)
365# preemptionPolicy: PreemptLowerPriority
368# preemptionPolicy: Never
371# Extra secrets that will be managed by the chart
372# (You can use them with `extraEnv` or `extraEnvFrom` or some of the `extraVolumes` values).
373# The format for secret data is "key/value" where
374# * key (templated) is the name of the secret that will be created
375# * value: an object with the standard 'data' or 'stringData' key (or both).
376# The value associated with those keys must be a string (templated)
379# '{{ .Release.Name }}-airflow-connections':
382# my.custom.label/v1: my_custom_label_value_1
384# AIRFLOW_CONN_GCP: 'base64_encoded_gcp_conn_string'
385# AIRFLOW_CONN_AWS: 'base64_encoded_aws_conn_string'
387# AIRFLOW_CONN_OTHER: 'other_conn'
388# '{{ .Release.Name }}-other-secret-name-suffix':
393# HTTP_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
394# HTTPS_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
395# NO_PROXY: "localhost,127.0.0.1,.svc.cluster.local,kubernetes.default.svc"
397# Extra ConfigMaps that will be managed by the chart
398# (You can use them with `extraEnv` or `extraEnvFrom` or some of the `extraVolumes` values).
399# The format for ConfigMap data is "key/value" where
400# * key (templated) is the name of the ConfigMap that will be created
401# * value: an object with the standard 'data' key.
402# The value associated with this keys must be a string (templated)
405# '{{ .Release.Name }}-airflow-variables':
407# my.custom.label/v2: my_custom_label_value_2
409# AIRFLOW_VAR_HELLO_MESSAGE: "Hi!"
410# AIRFLOW_VAR_KUBERNETES_NAMESPACE: "{{ .Release.Namespace }}"
412# Extra env 'items' that will be added to the definition of Airflow containers
413# a string is expected (templated).
414# TODO: difference from `env`? This is a templated string. Probably should template `env` and remove this.
417# - name: AIRFLOW__CORE__LOAD_EXAMPLES
420# Extra envFrom 'items' that will be added to the definition of Airflow containers
421# A string is expected (templated).
425# name: '{{ .Release.Name }}-airflow-connections'
427# name: '{{ .Release.Name }}-airflow-variables'
429# Airflow database & redis config
431 # If secret name is provided, secret itself has to be created manually with 'connection' key like:
436 # name: custom-airflow-metadata-secret
439 # connection: base64_encoded_connection_string
441 # The 'connection' key is base64-encoded SQLAlchemy connection string, e.g.:
442 # postgresql+psycopg2://airflow:password@postgres/airflow
443 metadataSecretName: ~
444 # If not set, falls back to metadataSecretName. The secret must contain 'connection' key which is
445 # a base64-encoded connection string, e.g.:
446 # postgresql+psycopg2://user:password@host/db
447 resultBackendSecretName: ~
448 brokerUrlSecretName: ~
449 # If `metadataSecretName` is not specified, pass connection values below
458 # Add custom annotations to the metadata connection secret
459 secretAnnotations: {}
460 # `resultBackendConnection` defaults to the same database as metadataConnection
461 resultBackendConnection: ~
462 # or, you can use a different database like:
463 # resultBackendConnection:
466 # protocol: postgresql
472 # Add custom annotations to the result backend connection secret
473 resultBackendConnectionSecretAnnotations: {}
474 # Note: `brokerUrl` can only be set during 'helm install', not 'helm upgrade' command
476 # Add custom annotations to the broker url secret
477 brokerUrlSecretAnnotations: {}
479# Note: `fernetKey` can only be set during 'helm install', not 'helm upgrade' command
481# If set, the secret must contain a 'fernet-key' key with a base64-encoded key value
482fernetKeySecretName: ~
483# Fernet key secret example:
487# name: custom-fernet-key-secret
490# fernet-key: <base64_encoded_fernet_key>
492# Add custom annotations to the fernet key secret
493fernetKeySecretAnnotations: {}
494# Flask secret key for Airflow 3+ Api: '[api] secret_key' in airflow.cfg
496# Add custom annotations to the api secret
497apiSecretAnnotations: {}
498# If set, the secret must contain a key 'api-secret-key' with a base64-encoded key value
499apiSecretKeySecretName: ~
500# API secret key example:
504# name: custom-api-secret
507# api-secret-key: <base64_encoded_api_secret_key>
509# Secret key used to encode and decode JWTs: '[api_auth] jwt_secret' in airflow.cfg
510# Note: It is not advised to use in production as during helm upgrade it will be changed
511# which can cause dag failures during component rollouts
513# Add custom annotations to the JWT secret
514jwtSecretAnnotations: {}
515# If set, the secret must contain a key 'jwt-secret' with a base64-encoded key value
521# name: custom-jwt-secret
524# jwt-secret: <base64_encoded_jwt_secret>
526# Flask secret key for Airflow <3 Webserver: '[webserver] secret_key' in airflow.cfg
527# (deprecated, use `apiSecretKey` instead (Airflow 3+))
529# Add custom annotations to the webserver secret
530# (deprecated, use `apiSecretAnnotations` instead (Airflow 3+))
531webserverSecretAnnotations: {}
532# If set, the secret must contain a key 'webserver-secret-key' with a base64-encoded key value
533# (deprecated, use `apiSecretKeySecretName` instead (Airflow 3+))
534webserverSecretKeySecretName: ~
535# Webserver secret key secret example:
539# name: custom-webserver-secret
542# webserver-secret-key: <base64_encoded_secret_key>
544# In order to use kerberos you need to create secret containing the keytab file.
545# The secret name should follow naming convention of the application where resources are
546# name '{{ .Release.Name }}-<postfix>'. In case of the keytab file, the '<postfix>' is "kerberos-keytab".
547# If your release is named "my-release" the name of the secret should be "my-release-kerberos-keytab".
549# The Keytab content should be available in the "kerberos.keytab" key of the secret.
553# kerberos.keytab: <base64_encoded keytab file content>
556# If you have keytab file you can do it with similar:
557# kubectl create secret generic {{ .Release.Name }}-kerberos-keytab --from-file=kerberos.keytab
559# Alternatively, instead of manually creating the secret, it is possible to specify
560# `kerberos.keytabBase64Content` parameter. This parameter should contain base64 encoded keytab.
563 ccacheMountPath: /var/kerberos-ccache
564 ccacheFileName: cache
565 configPath: /etc/krb5.conf
566 keytabBase64Content: ~
567 keytabPath: /etc/airflow.keytab
568 principal: airflow@FOO.COM
569 reinitFrequency: 3600
571 # This is an example config showing how you can use templating and how "example" config
572 # might look like. It works with the test kerberos server that we are using during integration
573 # testing at Apache Airflow (see 'scripts/ci/docker-compose/integration-kerberos.yml' but in
574 # order to make it production-ready you must replace it with your own configuration that
575 # Matches your kerberos deployment. Administrators of your Kerberos instance should
576 # provide the right configuration.
579 default = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_libs.log"
580 kdc = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_kdc.log"
581 admin_server = "FILE:{{ template "airflow_logs_no_quote" . }}/kadmind.log"
584 default_realm = FOO.COM
585 ticket_lifetime = 10h
591 kdc = kdc-server.foo.com
592 admin_server = admin_server.foo.com
594# Airflow Worker Config
596 # Number of Airflow Celery workers (deprecated, use `workers.celery.replicas` instead)
598 # Max number of old Airflow Celery workers ReplicaSets to retain
599 # (deprecated, use `workers.celery.revisionHistoryLimit` instead)
600 revisionHistoryLimit: ~
601 # Command to use when running Airflow Celery workers and using pod-template-file (templated)
602 # (deprecated, use `workers.celery.command` and/or `workers.kubernetes.command` instead)
604 # Args to use when running Airflow Celery workers (templated)
605 # (deprecated, use `workers.celery.args` instead)
609 # The format below is necessary to get `helm lint` happy
612 airflow celery worker
613 {{- if and .Values.workers.queue (ne .Values.workers.queue "default") }}
614 {{- " -q " }}{{ .Values.workers.queue }}
616 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
617 # kill the worker and let Kubernetes restart it
618 # (deprecated, use `workers.celery.livenessProbe` section instead)
620 # (deprecated, use `workers.celery.livenessProbe.enabled` instead)
622 # (deprecated, use `workers.celery.livenessProbe.initialDelaySeconds` instead)
623 initialDelaySeconds: 10
624 # (deprecated, use `workers.celery.livenessProbe.timeoutSeconds` instead)
626 # (deprecated, use `workers.celery.livenessProbe.failureThreshold` instead)
628 # (deprecated, use `workers.celery.livenessProbe.periodSeconds` instead)
630 # (deprecated, use `workers.celery.livenessProbe.command` instead)
632 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
633 # (deprecated, use `workers.celery.updateStrategy` instead)
635 # Update Strategy when Airflow Celery worker is deployed as a Deployment
636 # (deprecated, use `workers.celery.strategy` instead)
640 maxUnavailable: "50%"
641 # Allow relaxing ordering guarantees for Airflow Celery worker while preserving its uniqueness and identity
642 # (deprecated, use `workers.celery.podManagementPolicy` instead)
643 # podManagementPolicy: Parallel
645 # When not set, the values defined in the global securityContext will
646 # be used in Airflow Celery workers and pod-template-file
647 # (deprecated, use `workers.celery.securityContexts` and/or `workers.kubernetes.securityContexts` instead)
653 # Detailed default security context for the
654 # Airflow Celery workers and pod-template-file on container and pod level
655 # (deprecated, use `workers.celery.securityContexts` and/or `workers.kubernetes.securityContexts` instead)
658 # `workers.celery.securityContexts.pod` and/or
659 # `workers.kubernetes.securityContexts.pod`
663 # `workers.celery.securityContexts.container` and/or
664 # `workers.kubernetes.securityContexts.container`
667 # Container level Lifecycle Hooks definition for
668 # Airflow Celery workers and pods created with pod-template-file
670 # `workers.celery.containerLifecycleHooks` and/or
671 # `workers.kubernetes.containerLifecycleHooks`
673 containerLifecycleHooks: {}
674 # Airflow Celery workers pod disruption budget
675 # (deprecated, use `workers.celery.podDisruptionBudget` instead)
677 # (deprecated, use `workers.celery.podDisruptionBudget.enabled` instead)
679 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
680 # (deprecated, use `workers.celery.podDisruptionBudget.config` instead)
682 # (deprecated, use `workers.celery.podDisruptionBudget.config.maxUnavailable` instead)
684 # (deprecated, use `workers.celery.podDisruptionBudget.config.minAvailable` instead)
686 # Create Service Account for Airflow Celery workers and pods created with pod-template-file
687 # (deprecated, use `workers.celery.serviceAccount` and/or `workers.kubernetes.serviceAccount` instead)
689 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
691 # `workers.celery.serviceAccount.automountServiceAccountToken` and/or
692 # `workers.kubernetes.serviceAccount.automountServiceAccountToken`
694 automountServiceAccountToken: true
695 # Specifies whether a Service Account should be created
697 # `workers.celery.serviceAccount.create` and/or
698 # `workers.kubernetes.serviceAccount.create`
701 # The name of the Service Account to use.
702 # If not set and `create` is 'true', a name is generated using the release name
704 # `workers.celery.serviceAccount.name` and/or
705 # `workers.kubernetes.serviceAccount.name`
708 # Annotations to add to worker Kubernetes Service Account.
710 # `workers.celery.serviceAccount.annotations` and/or
711 # `workers.kubernetes.serviceAccount.annotations`
714 # Allow KEDA autoscaling for Airflow Celery workers
715 # (deprecated, use `workers.celery.keda` instead)
717 # (deprecated, use `workers.celery.keda.enabled` instead)
719 # (deprecated, use `workers.celery.keda.namespaceLabels` instead)
721 # How often KEDA polls the Airflow DB to report new scale requests to the HPA
722 # (deprecated, use `workers.celery.keda.pollingInterval` instead)
724 # How many seconds KEDA will wait before scaling to zero.
725 # Note: HPA has a separate cooldown period for scale-downs
726 # (deprecated, use `workers.celery.keda.cooldownPeriod` instead)
728 # Minimum number of Airflow Celery workers created by keda
729 # (deprecated, use `workers.celery.keda.minReplicaCount` instead)
731 # Maximum number of Airflow Celery workers created by keda
732 # (deprecated, use `workers.celery.keda.maxReplicaCount` instead)
734 # Specify HPA related options
735 # (deprecated, use `workers.celery.keda.advanced` instead)
737 # horizontalPodAutoscalerConfig:
740 # stabilizationWindowSeconds: 300
746 # Query to use for KEDA autoscaling. Must return a single integer.
747 # (deprecated, use `workers.celery.keda.query` instead)
749 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 }}
750 # Weather to use PGBouncer to connect to the database or not when it is enabled
751 # This configuration will be ignored if PGBouncer is not enabled
752 # (deprecated, use `workers.celery.keda.usePgbouncer` instead)
754 # Allow HPA for Airflow Celery workers (KEDA must be disabled)
755 # (deprecated, use `workers.celery.hpa` instead)
757 # (deprecated, use `workers.celery.hpa.enabled` instead)
759 # Minimum number of Airflow Celery workers created by HPA
760 # (deprecated, use `workers.celery.hpa.minReplicaCount` instead)
762 # Maximum number of Airflow Celery workers created by HPA
763 # (deprecated, use `workers.celery.hpa.maxReplicaCount` instead)
765 # Specifications for which to use to calculate the desired replica count
766 # (deprecated, use `workers.celery.hpa.metrics` instead)
773 averageUtilization: 80
774 # Scaling behavior of the target in both Up and Down directions
775 # (deprecated, use `workers.celery.hpa.behavior` instead)
777 # Persistence volume configuration for Airflow Celery workers
778 # (deprecated, use `workers.celery.persistence` instead)
780 # Enable persistent volumes (deprecated, use `workers.celery.persistence.enabled` instead)
782 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
783 # (deprecated, use `workers.celery.persistence.persistentVolumeClaimRetentionPolicy` instead)
784 persistentVolumeClaimRetentionPolicy: ~
785 # persistentVolumeClaimRetentionPolicy:
786 # whenDeleted: Delete
789 # Volume size for Airflow Celery worker StatefulSet
790 # (deprecated, use `workers.celery.persistence.size` instead)
792 # If using a custom storageClass, pass name ref to all StatefulSets here
793 # (deprecated, use `workers.celery.persistence.storageClassName` instead)
795 # Execute init container to chown log directory.
796 # This is currently only needed in kind, due to usage
797 # of local-path provisioner.
798 # (deprecated, use `workers.celery.persistence.fixPermissions` instead)
799 fixPermissions: false
800 # Annotations to add to Airflow Celery worker volumes
801 # (deprecated, use `workers.celery.persistence.annotations` instead)
803 # Detailed default security context for persistence on container level
804 # (deprecated, use `workers.celery.persistence.securityContexts` instead)
806 # (deprecated, use `workers.celery.persistence.securityContexts.container` instead)
808 # Kerberos sidecar configuration for Airflow Celery workers and pods created with pod-template-file
809 # (deprecated, use `workers.celery.kerberosSidecar` and/or `workers.kubernetes.kerberosSidecar` instead)
811 # Enable kerberos sidecar
813 # `workers.celery.kerberosSidecar.enabled` and/or
814 # `workers.kubernetes.kerberosSidecar.enabled`
818 # `workers.celery.kerberosSidecar.resources` and/or
819 # `workers.kubernetes.kerberosSidecar.resources`
829 # Detailed default security context for kerberos sidecar on container level
831 # `workers.celery.kerberosSidecar.securityContexts` and/or
832 # `workers.kubernetes.kerberosSidecar.securityContexts`
836 # `workers.celery.kerberosSidecar.securityContexts.container` and/or
837 # `workers.kubernetes.kerberosSidecar.securityContexts.container`
840 # Container level lifecycle hooks
842 # `workers.celery.kerberosSidecar.containerLifecycleHooks` and/or
843 # `workers.kubernetes.kerberosSidecar.containerLifecycleHooks`
845 containerLifecycleHooks: {}
846 # Kerberos init container configuration for Airflow Celery workers and pods created with pod-template-file
848 # `workers.celery.kerberosInitContainer` and/or
849 # `workers.kubernetes.kerberosInitContainer`
851 kerberosInitContainer:
852 # Enable kerberos init container
854 # `workers.celery.kerberosInitContainer.enabled` and/or
855 # `workers.kubernetes.kerberosInitContainer.enabled`
859 # `workers.celery.kerberosInitContainer.resources` and/or
860 # `workers.kubernetes.kerberosInitContainer.resources`
870 # Detailed default security context for kerberos init container
872 # `workers.celery.kerberosInitContainer.securityContexts` and/or
873 # `workers.kubernetes.kerberosInitContainer.securityContexts`
877 # `workers.celery.kerberosInitContainer.securityContexts.container` and/or
878 # `workers.kubernetes.kerberosInitContainer.securityContexts.container`
881 # Container level lifecycle hooks
883 # `workers.celery.kerberosInitContainer.containerLifecycleHooks` and/or
884 # `workers.kubernetes.kerberosInitContainer.containerLifecycleHooks`
886 containerLifecycleHooks: {}
887 # Resource configuration for Airflow Celery workers and pods created with pod-template-file
888 # (deprecated, use `workers.celery.resources` and/or `workers.kubernetes.resources` instead)
897 # Grace period for tasks to finish after SIGTERM is sent from Kubernetes.
898 # It is used by Airflow Celery workers and pod-template-file.
900 # `workers.celery.terminationGracePeriodSeconds` and/or
901 # `workers.kubernetes.terminationGracePeriodSeconds`
903 terminationGracePeriodSeconds: 600
904 # This setting tells Kubernetes that its ok to evict when it wants to scale a node down.
905 # It is used by Airflow Celery workers and pod-template-file.
907 # `workers.celery.safeToEvict` and/or
908 # `workers.kubernetes.safeToEvict`
911 # Launch additional containers into Airflow Celery worker
912 # and pods created with pod-template-file (templated).
914 # `workers.celery.extraContainers` and/or
915 # `workers.kubernetes.extraContainers`
917 # Note: If used with KubernetesExecutor, you are responsible for signaling sidecars to exit when the main
918 # container finishes so Airflow can continue the worker shutdown process!
920 # Add additional init containers into Airflow Celery workers
921 # and pods created with pod-template-file (templated).
923 # `workers.celery.extraInitContainers` and/or
924 # `workers.kubernetes.extraInitContainers`
926 extraInitContainers: []
927 # Additional volumes attached to the Airflow Celery workers
928 # and pods created with pod-template-file
929 # (deprecated, use `workers.celery.extraVolumes` and/or `workers.kubernetes.extraVolumes` instead)
931 # Mount additional volumes into workers pods. It can be templated like in the following example:
933 # - name: my-templated-extra-volume
935 # secretName: '{{ include "my_secret_template" . }}'
939 # Additional volume mounts attached to the Airflow Celery workers
940 # and pods created with pod-template-file
942 # `workers.celery.extraVolumeMounts` and/or
943 # `workers.kubernetes.extraVolumeMounts`
945 extraVolumeMounts: []
946 # Mount additional volumes into workers pods. It can be templated like in the following example:
948 # - name: my-templated-extra-volume
949 # mountPath: "{{ .Values.my_custom_path }}"
952 # Expose additional ports of Airflow Celery workers. These can be used for additional metric collection.
953 # (deprecated, use `workers.celery.extraPorts` instead)
955 # Select certain nodes for Airflow Celery worker pods and pods created with pod-template-file
956 # (deprecated, use `workers.celery.nodeSelector` and/or `workers.kubernetes.nodeSelector` instead)
958 # (deprecated, use `workers.celery.runtimeClassName` and/or `workers.kubernetes.runtimeClassName` instead)
960 # (deprecated, use `workers.celery.priorityClassName` and/or `workers.kubernetes.priorityClassName` instead)
962 # (deprecated, use `workers.celery.affinity` and/or `workers.kubernetes.affinity` instead)
964 # Default Airflow Celery worker affinity is:
966 # preferredDuringSchedulingIgnoredDuringExecution:
971 # topologyKey: kubernetes.io/hostname
974 # (deprecated, use `workers.celery.tolerations` and/or `workers.kubernetes.tolerations` instead)
977 # `workers.celery.topologySpreadConstraints` and/or
978 # `workers.kubernetes.topologySpreadConstraints`
980 topologySpreadConstraints: []
981 # hostAliases to use in Airflow Celery worker pods and pods created with pod-template-file
982 # (deprecated, use `workers.celery.hostAliases` and/or `workers.kubernetes.hostAliases` instead)
984 # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
988 # - "test.hostname.one"
991 # - "test.hostname.two"
993 # Annotations for the Airflow Celery worker resource
994 # (deprecated, use `workers.celery.annotations` instead)
996 # Pod annotations for the Airflow Celery workers and pods created with pod-template-file (templated)
997 # (deprecated, use `workers.celery.podAnnotations` and/or `workers.kubernetes.podAnnotations` instead)
999 # Labels specific to Airflow Celery workers objects and pods created with pod-template-file
1000 # (deprecated, use `workers.celery.labels` and/or `workers.kubernetes.labels` instead)
1002 # Log groomer configuration for Airflow Celery workers
1003 # (deprecated, use `workers.celery.logGroomerSidecar` instead)
1005 # Whether to deploy the Airflow Celery worker log groomer sidecar
1006 # (deprecated, use `workers.celery.logGroomerSidecar.enabled` instead)
1008 # Whether persistence is required for log groomer sidecar. When false, the log groomer
1009 # can run on Deployments (without persistence) using an `emptyDir` volume for logs.
1010 # Note: This parameter is transitional for chart 1.2x. In chart 2.x, log groomer will
1011 # work without persistence by default and this parameter will be removed.
1012 # (deprecated, use `workers.celery.logGroomerSidecar.requirePersistence` instead)
1013 requirePersistence: true
1014 # Command to use when running the Airflow Celery worker log groomer sidecar (templated)
1015 # (deprecated, use `workers.celery.logGroomerSidecar.command` instead)
1017 # Args to use when running the Airflow Celery worker log groomer sidecar (templated)
1018 # (deprecated, use `workers.celery.logGroomerSidecar.args` instead)
1019 args: ["bash", "/clean-logs"]
1020 # Number of days to retain logs
1021 # (deprecated, use `workers.celery.logGroomerSidecar.retentionDays` instead)
1023 # Number of minutes to retain logs.
1024 # This can be used for finer granularity than days.
1025 # Total retention is `retentionDays` + `retentionMinutes`.
1026 # (deprecated, use `workers.celery.logGroomerSidecar.retentionMinutes` instead)
1028 # Frequency to attempt to groom logs (in minutes)
1029 # (deprecated, use `workers.celery.logGroomerSidecar.frequencyMinutes` instead)
1030 frequencyMinutes: 15
1031 # Max size of logs in bytes. 0 = disabled
1032 # (deprecated, use `workers.celery.logGroomerSidecar.maxSizeBytes` instead)
1034 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set.
1035 # (deprecated, use `workers.celery.logGroomerSidecar.maxSizePercent` instead)
1037 # (deprecated, use `workers.celery.logGroomerSidecar.resources` instead)
1046 # Detailed default security context for `logGroomerSidecar` for container level
1047 # (deprecated, use `workers.celery.logGroomerSidecar.securityContexts` instead)
1049 # (deprecated, use `workers.celery.logGroomerSidecar.securityContexts.container` instead)
1051 # (deprecated, use `workers.celery.logGroomerSidecar.env` instead)
1053 # Container level lifecycle hooks
1054 # (deprecated, use `workers.celery.logGroomerSidecar.containerLifecycleHooks` instead)
1055 containerLifecycleHooks: {}
1056 # Configuration of wait-for-airflow-migration init container for Airflow Celery workers
1057 # (deprecated, use `workers.celery.waitForMigrations` instead)
1059 # Whether to create init container to wait for db migrations
1060 # (deprecated, use `workers.celery.waitForMigrations.enabled` instead)
1062 # (deprecated, use `workers.celery.waitForMigrations.env` instead)
1064 # Detailed default security context for wait-for-airflow-migrations container
1065 # (deprecated, use `workers.celery.waitForMigrations.securityContexts` instead)
1067 # (deprecated, use `workers.celery.waitForMigrations.securityContexts.container` instead)
1069 # Additional env variable configuration for Airflow Celery workers and pods created with pod-template-file
1070 # (deprecated, use `workers.celery.env` and/or `workers.kubernetes.env` instead)
1072 # Additional volume claim templates for Airflow Celery workers.
1073 # Requires mounting of specified volumes under extraVolumeMounts.
1074 # (deprecated, use `workers.celery.volumeClaimTemplates` instead)
1075 volumeClaimTemplates: []
1076 # Volume Claim Templates example:
1077 # volumeClaimTemplates:
1079 # name: data-volume-1
1081 # storageClassName: "storage-class-1"
1088 # name: data-volume-2
1090 # storageClassName: "storage-class-2"
1097 # (deprecated, use `workers.celery.schedulerName` and/or `workers.kubernetes.schedulerName` instead)
1100 # Number of Airflow Celery workers
1102 # Max number of old Airflow Celery workers ReplicaSets to retain
1103 revisionHistoryLimit: ~
1104 # Command to use when running Airflow Celery workers (templated)
1106 # Args to use when running Airflow Celery workers (templated)
1108 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
1109 # kill the worker and let Kubernetes restart it
1112 initialDelaySeconds: ~
1117 # Enable the default workers defined by the root `workers` and `workers.celery`
1118 # configurations to be created.
1119 # If false, only dedicated workers defined in 'sets' will be created.
1121 # Queue name for the default workers
1123 # List of worker sets. Each item can overwrite values from the parent `workers` and `workers.celery`
1148 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
1150 # Update Strategy when Airflow Celery worker is deployed as a Deployment
1152 # Allow relaxing ordering guarantees for Airflow Celery worker
1153 # while preserving its uniqueness and identity
1154 # podManagementPolicy: Parallel
1156 # Detailed default security context for Airflow Celery workers for container and pod level
1157 # If not set, the values from `workers.securityContexts` section will be used.
1161 # Container level Lifecycle Hooks definition for Airflow Celery workers
1162 containerLifecycleHooks: {}
1163 # Airflow Celery workers pod disruption budget
1164 podDisruptionBudget:
1166 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
1170 # Create Service Account for Airflow Celery workers
1172 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1173 automountServiceAccountToken: ~
1174 # Specifies whether a Service Account should be created
1176 # The name of the Service Account to use.
1177 # If not set and `create` is 'true', a name is generated using the release name
1179 # Annotations to add to worker Kubernetes Service Account.
1181 # Allow KEDA autoscaling for Airflow Celery workers
1185 # How often KEDA polls the airflow DB to report new scale requests to the HPA
1187 # How many seconds KEDA will wait before scaling to zero.
1188 # Note: HPA has a separate cooldown period for scale-downs
1190 # Minimum number of Airflow Celery workers created by KEDA
1192 # Maximum number of Airflow Celery workers created by KEDA
1194 # Specify HPA related options
1196 # horizontalPodAutoscalerConfig:
1199 # stabilizationWindowSeconds: 300
1205 # Query to use for KEDA autoscaling. Must return a single integer
1207 # Weather to use PGBouncer to connect to the database or not when it is enabled
1208 # This configuration will be ignored if PGBouncer is not enabled
1210 # Allow HPA for Airflow Celery workers (KEDA must be disabled)
1213 # Minimum number of Airflow Celery workers created by HPA
1215 # Maximum number of Airflow Celery workers created by HPA
1217 # Specifications for which to use to calculate the desired replica count
1219 # Scaling behavior of the target in both Up and Down directions
1221 # Persistence volume configuration for Airflow Celery workers
1223 # Enable persistent volumes
1225 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
1226 persistentVolumeClaimRetentionPolicy: ~
1227 # persistentVolumeClaimRetentionPolicy:
1228 # whenDeleted: Delete
1229 # whenScaled: Delete
1231 # Volume size for Airflow Celery worker StatefulSet
1233 # If using a custom storageClass, pass name ref to all StatefulSets here
1235 # Execute init container to chown log directory.
1236 # This is currently only needed in kind, due to usage
1237 # of local-path provisioner.
1239 # Annotations to add to Airflow Celery worker volumes
1241 # Detailed default security context for persistence on container level
1244 # Kerberos sidecar configuration for Airflow Celery workers
1246 # Enable kerberos sidecar
1256 # Detailed default security context for kerberos sidecar on container level
1259 # Container level lifecycle hooks
1260 containerLifecycleHooks: {}
1261 # Kerberos init container configuration for Airflow Celery workers
1262 # If not set, the values from `workers.kerberosInitContainer` section will be used.
1263 kerberosInitContainer:
1264 # Enable kerberos init container
1265 # If `workers.kerberosInitContainer.enabled` is set to True, this flag has no effect
1275 # Detailed default security context for kerberos init container
1278 # Container level lifecycle hooks
1279 containerLifecycleHooks: {}
1280 # Resource configuration for Airflow Celery workers
1289 # Grace period for tasks to finish after SIGTERM is sent from Kubernetes
1290 terminationGracePeriodSeconds: ~
1291 # This setting tells Kubernetes that its ok to evict when it wants to scale a node down
1293 # Launch additional containers into Airflow Celery worker (templated)
1295 # Add additional init containers into Airflow Celery workers (templated)
1296 extraInitContainers: []
1297 # Additional volumes attached to the Airflow Celery workers
1299 # Mount additional volumes into workers pods. It can be templated like in the following example:
1301 # - name: my-templated-extra-volume
1303 # secretName: '{{ include "my_secret_template" . }}'
1307 # Additional volume mounts attached to the Airflow Celery workers
1308 extraVolumeMounts: []
1309 # Mount additional volumes into workers pods. It can be templated like in the following example:
1310 # extraVolumeMounts:
1311 # - name: my-templated-extra-volume
1312 # mountPath: "{{ .Values.my_custom_path }}"
1315 # Expose additional ports of Airflow Celery workers. These can be used for additional metric collection.
1317 # Select certain nodes for Airflow Celery worker pods
1320 priorityClassName: ~
1322 # Default Airflow Celery worker affinity is:
1324 # preferredDuringSchedulingIgnoredDuringExecution:
1325 # - podAffinityTerm:
1329 # topologyKey: kubernetes.io/hostname
1333 topologySpreadConstraints: []
1334 # hostAliases to use in Airflow Celery worker pods
1336 # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
1340 # - "test.hostname.one"
1343 # - "test.hostname.two"
1345 # Annotations for the Airflow Celery worker resource
1347 # Pod annotations for the Airflow Celery workers (templated)
1349 # Labels specific to Airflow Celery workers objects
1351 # Log groomer configuration for Airflow Celery workers
1353 # Whether to deploy the Airflow Celery worker log groomer sidecar
1355 # Whether persistence is required for log groomer sidecar. When false, the log groomer
1356 # can run on Deployments (without persistence) using an `emptyDir` volume for logs.
1357 # Note: This parameter is transitional for chart 1.2x. In chart 2.x, log groomer will
1358 # work without persistence by default and this parameter will be removed.
1359 requirePersistence: ~
1360 # Command to use when running the Airflow Celery worker log groomer sidecar (templated)
1362 # Args to use when running the Airflow Celery worker log groomer sidecar (templated)
1364 # Number of days to retain logs
1366 # Number of minutes to retain logs.
1367 # This can be used for finer granularity than days.
1368 # Total retention is `retentionDays` + `retentionMinutes`.
1370 # Frequency to attempt to groom logs (in minutes)
1372 # Max size of logs in bytes. 0 = disabled
1374 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set.
1384 # Detailed default security context for `logGroomerSidecar` for container level
1388 # Container level lifecycle hooks
1389 containerLifecycleHooks: {}
1390 # Configuration of wait-for-airflow-migration init container for Airflow Celery workers
1392 # Whether to create init container to wait for db migrations
1395 # Detailed default security context for wait-for-airflow-migrations container
1398 # Additional env variable configuration for Airflow Celery workers
1400 # Additional volume claim templates for Airflow Celery workers.
1401 # Requires mounting of specified volumes under extraVolumeMounts.
1402 volumeClaimTemplates: []
1403 # Volume Claim Templates example:
1404 # volumeClaimTemplates:
1406 # name: data-volume-1
1408 # storageClassName: "storage-class-1"
1415 # name: data-volume-2
1417 # storageClassName: "storage-class-2"
1426 # Command to use in pod-template-file (templated)
1428 # Detailed default security context for pod-template-file for container and pod level
1429 # If not set, the values from `workers.securityContexts` section will be used.
1433 # Container level Lifecycle Hooks definition for pods created with pod-template-file
1434 containerLifecycleHooks: {}
1435 # Create Service Account for pods created with pod-template-file
1436 # When this section is specified, the Service Account is created from
1437 # 'templates/workers/worker-kubernetes-serviceaccount.yaml' file
1439 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1440 # If not specified, the `workers.serviceAccount.automountServiceAccountToken` value will be taken
1441 automountServiceAccountToken: ~
1442 # Specifies whether a Service Account should be created.
1443 # If not specified, the Service Account will be generated and used from
1444 # 'templates/workers/worker-serviceaccount.yaml' file if `workers.serviceAccount.create`
1447 # The name of the Service Account to use.
1448 # If not set and `create` is 'true', a name is generated using the release name
1449 # with Kubernetes dedicated name
1451 # Annotations to add to worker Kubernetes Service Account.
1452 # If not specified, the `workers.serviceAccount.annotations` value will be taken
1454 # Kerberos sidecar configuration for pods created with pod-template-file
1456 # Enable kerberos sidecar
1466 # Detailed default security context for kerberos sidecar on container level
1469 # Container level lifecycle hooks
1470 containerLifecycleHooks: {}
1471 # Kerberos init container configuration for pods created with pod-template-file
1472 # If not set, the values from `workers.kerberosInitContainer` section will be used.
1473 kerberosInitContainer:
1474 # Enable kerberos init container
1475 # If `workers.kerberosInitContainer.enabled` is set to True, this flag has no effect
1485 # Detailed default security context for kerberos init container
1488 # Container level lifecycle hooks
1489 containerLifecycleHooks: {}
1490 # Resource configuration for pods created with pod-template-file
1499 # Grace period for tasks to finish after SIGTERM is sent from Kubernetes
1500 terminationGracePeriodSeconds: ~
1501 # This setting tells Kubernetes that its ok to evict when it wants to scale a node down
1503 # Launch additional containers into pods created with pod-template-file (templated).
1504 # Note: You are responsible for signaling sidecars to exit when the main
1505 # container finishes so Airflow can continue the worker shutdown process!
1507 # Add additional init containers into pods created with pod-template-file (templated)
1508 extraInitContainers: []
1509 # Additional volumes attached to the pods created with pod-template-file
1511 # Mount additional volumes into workers pods. It can be templated like in the following example:
1513 # - name: my-templated-extra-volume
1515 # secretName: '{{ include "my_secret_template" . }}'
1519 # Additional volume mounts attached to the pods created with pod-template-file
1520 extraVolumeMounts: []
1521 # Mount additional volumes into workers pods. It can be templated like in the following example:
1522 # extraVolumeMounts:
1523 # - name: my-templated-extra-volume
1524 # mountPath: "{{ .Values.my_custom_path }}"
1527 # Select certain nodes for pods created with pod-template-file
1530 priorityClassName: ~
1533 topologySpreadConstraints: []
1534 # hostAliases to use in pods created with pod-template-file
1536 # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
1540 # - "test.hostname.one"
1543 # - "test.hostname.two"
1545 # Pod annotations for the pods created with pod-template-file (templated)
1547 # Labels specific to pods created with pod-template-file
1549 # Additional env variable configuration for pods created with pod-template-file
1552# Airflow scheduler settings
1555 # hostAliases for the scheduler pod
1564 # If the scheduler stops heartbeating for 5 minutes (5*60s) kill the
1565 # scheduler and let Kubernetes restart it
1567 initialDelaySeconds: 10
1572 # Wait for at most 1 minute (6*10s) for the scheduler container to startup.
1573 # LivenessProbe kicks in after the first successful startupProbe
1575 initialDelaySeconds: 0
1580 # Amount of scheduler replicas
1582 # Max number of old replicasets to retain
1583 revisionHistoryLimit: ~
1584 # Command to use when running the Airflow scheduler (templated).
1586 # Args to use when running the Airflow scheduler (templated).
1587 args: ["bash", "-c", "exec airflow scheduler"]
1588 # Update Strategy when scheduler is deployed as a StatefulSet
1589 # (when using LocalExecutor and `workers.persistence`)
1591 # Update Strategy when scheduler is deployed as a Deployment
1592 # (when not using LocalExecutor and `workers.persistence`)
1594 # When not set, the values defined in the global `securityContext` will be used
1595 # (deprecated, use `scheduler.securityContexts` instead)
1601 # Detailed default security context for scheduler Deployments for container and pod level
1605 # Container level lifecycle hooks
1606 containerLifecycleHooks: {}
1607 # Grace period for tasks to finish after SIGTERM is sent from Kubernetes
1608 terminationGracePeriodSeconds: 10
1609 # Create Service Account
1611 # Affects all executors that launch pods
1612 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1613 automountServiceAccountToken: true
1614 # Specifies whether a Service Account should be created
1616 # The name of the Service Account to use.
1617 # If not set and `create` is 'true', a name is generated using the release name
1619 # Annotations to add to scheduler Kubernetes Service Account.
1621 # Service Account Token Volume configuration
1622 # This is only used when `automountServiceAccountToken` is 'false'
1623 # and allows manual configuration of the Service Account token volume
1624 serviceAccountTokenVolume:
1625 # Enable manual Service Account token volume configuration
1627 # Path where the Service Account token should be mounted
1628 mountPath: /var/run/secrets/kubernetes.io/serviceaccount
1629 # Name of the volume
1630 volumeName: kube-api-access
1631 # Token expiration in seconds
1632 expirationSeconds: 3600
1633 # Audience for the token
1635 # Scheduler pod disruption budget
1636 podDisruptionBudget:
1638 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
1650 # This setting tells Kubernetes that its ok to evict
1651 # when it wants to scale a node down.
1653 # Launch additional containers into scheduler (templated).
1655 # Add additional init containers into scheduler (templated).
1656 extraInitContainers: []
1657 # Mount additional volumes into scheduler.
1659 extraVolumeMounts: []
1660 # It can be templated like in the following example:
1662 # - name: my-templated-extra-volume
1664 # secretName: '{{ include "my_secret_template" . }}'
1668 # extraVolumeMounts:
1669 # - name: my-templated-extra-volume
1670 # mountPath: "{{ .Values.my_custom_path }}"
1673 # Select certain nodes for Airflow scheduler pods.
1676 # default scheduler affinity is:
1678 # preferredDuringSchedulingIgnoredDuringExecution:
1679 # - podAffinityTerm:
1682 # component: scheduler
1683 # topologyKey: kubernetes.io/hostname
1687 topologySpreadConstraints: []
1688 priorityClassName: ~
1689 # Annotations for scheduler Deployment
1691 # Pod annotations for scheduler pods (templated)
1693 # Labels specific to scheduler objects and pods
1696 # Whether to deploy the Airflow scheduler log groomer sidecar.
1698 # Command to use when running the Airflow scheduler log groomer sidecar (templated).
1700 # Args to use when running the Airflow scheduler log groomer sidecar (templated).
1701 args: ["bash", "/clean-logs"]
1702 # Number of days to retain logs
1704 # Number of minutes to retain logs.
1705 # This can be used for finer granularity than days.
1706 # Total retention is `retentionDays` + `retentionMinutes`.
1708 # Frequency to attempt to groom logs, in minutes
1709 frequencyMinutes: 15
1710 # Max size of logs in bytes. 0 = disabled
1712 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set.
1722 # Detailed default security context for `logGroomerSidecar` for container level
1725 # Container level lifecycle hooks
1726 containerLifecycleHooks: {}
1729 # Whether to create init container to wait for db migrations
1732 # Detailed default security context for waitForMigrations for container level
1736# Airflow create user job settings
1738 # Whether the create user job should be created
1740 # Create initial user.
1744 email: admin@example.com
1748 # Limit the lifetime of the job object after it finished execution.
1749 ttlSecondsAfterFinished: 300
1750 # Command to use when running the create user job (templated).
1752 # Args to use when running the create user job (templated).
1756 # The format below is necessary to get `helm lint` happy
1759 airflow users create "$@"
1761 # yamllint disable rule:line-length
1763 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.role }}{{ else }}{{ .Values.createUserJob.defaultUser.role }}{{ end }}"
1765 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.username }}{{ else }}{{ .Values.createUserJob.defaultUser.username }}{{ end }}"
1767 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.email }}{{ else }}{{ .Values.createUserJob.defaultUser.email }}{{ end }}"
1769 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.firstName }}{{ else }}{{ .Values.createUserJob.defaultUser.firstName }}{{ end }}"
1771 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.lastName }}{{ else }}{{ .Values.createUserJob.defaultUser.lastName }}{{ end }}"
1773 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.password }}{{ else }}{{ .Values.createUserJob.defaultUser.password }}{{ end }}"
1774 # Annotations on the create user job pod (templated)
1776 # `jobAnnotations` are annotations on the create user job
1778 restartPolicy: OnFailure
1779 # Labels specific to `createUserJob` objects and pods
1781 # When not set, the values defined in the global `securityContext` will be used
1782 # (deprecated, use `createUserJob.securityContexts` instead)
1788 # Detailed default security context for `createUserJob` for container and pod level
1792 # Container level lifecycle hooks
1793 containerLifecycleHooks: {}
1794 # Create Service Account
1796 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1797 automountServiceAccountToken: true
1798 # Specifies whether a Service Account should be created
1800 # The name of the Service Account to use.
1801 # If not set and `create` is 'true', a name is generated using the release name
1803 # Annotations to add to create user Kubernetes Service Account.
1805 # Launch additional containers into user creation job
1807 # Add additional init containers into user creation job (templated).
1808 extraInitContainers: []
1809 # Mount additional volumes into user creation job.
1811 extraVolumeMounts: []
1812 # It can be templated like in the following example:
1814 # - name: my-templated-extra-volume
1816 # secretName: '{{ include "my_secret_template" . }}'
1820 # extraVolumeMounts:
1821 # - name: my-templated-extra-volume
1822 # mountPath: "{{ .Values.my_custom_path }}"
1828 topologySpreadConstraints: []
1829 priorityClassName: ~
1830 # In case you need to disable the helm hooks that create the jobs after install.
1831 # Disable this if you are e.g. using ArgoCD
1833 applyCustomEnv: true
1842# Airflow database migration job settings
1845 # Limit the lifetime of the job object after it finished execution.
1846 ttlSecondsAfterFinished: 300
1847 # Command to use when running the migrate database job (templated).
1849 # Args to use when running the migrate database job (templated).
1857 # Annotations on the database migration pod (templated)
1859 # `jobAnnotations` are annotations on the database migration job
1861 restartPolicy: OnFailure
1862 # Labels specific to migrate database job objects and pods
1864 # When not set, the values defined in the global `securityContext` will be used
1865 # (deprecated, use `migrateDatabaseJob.securityContexts` instead)
1871 # Detailed default security context for `migrateDatabaseJob` for container and pod level
1875 # Container level lifecycle hooks
1876 containerLifecycleHooks: {}
1877 # Create Service Account
1879 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1880 automountServiceAccountToken: true
1881 # Specifies whether a Service Account should be created
1883 # The name of the Service Account to use.
1884 # If not set and `create` is 'true', a name is generated using the release name
1886 # Annotations to add to migrate database job Kubernetes Service Account.
1896 # Launch additional containers into database migration job
1898 # Add additional init containers into migrate database job (templated).
1899 extraInitContainers: []
1900 # Mount additional volumes into database migration job.
1902 extraVolumeMounts: []
1903 # It can be templated like in the following example:
1905 # - name: my-templated-extra-volume
1907 # secretName: '{{ include "my_secret_template" . }}'
1911 # extraVolumeMounts:
1912 # - name: my-templated-extra-volume
1913 # mountPath: "{{ .Values.my_custom_path }}"
1919 topologySpreadConstraints: []
1920 priorityClassName: ~
1921 # In case you need to disable the helm hooks that create the jobs after install.
1922 # Disable this if you are using ArgoCD for example
1924 applyCustomEnv: true
1928 # Number of Airflow API servers in the Deployment.
1929 # Omitted from the Deployment, when HPA is enabled.
1931 # Max number of old ReplicaSets to retain
1932 revisionHistoryLimit: ~
1933 # Labels specific to Airflow API server objects and pods
1935 # Command to use when running the Airflow API server (templated).
1937 # Args to use when running the Airflow API server (templated).
1938 args: ["bash", "-c", "exec airflow api-server"]
1939 # Example: To enable proxy headers support when running behind a reverse proxy:
1940 # args: ["bash", "-c", "exec airflow api-server --proxy-headers"]
1942 allowPodLogReading: true
1943 # Environment variables for the Airflow API server.
1945 # Example: To configure FORWARDED_ALLOW_IPS when running behind a reverse proxy:
1947 # - name: FORWARDED_ALLOW_IPS
1948 # value: "*" # Use "*" for trusted environments, or specify proxy IP ranges for production
1950 # Allow Horizontal Pod Autoscaler (HPA) configuration for api-server. (optional)
1951 # HPA automatically scales the number of api-server pods based on observed metrics.
1952 # HPA automatically adjusts api-server replicas between `minReplicaCount` and `maxReplicaCount` based on metrics.
1955 # Minimum number of api-servers created by HPA
1957 # Maximum number of api-servers created by HPA
1959 # Specifications for which to use to calculate the desired replica count
1966 averageUtilization: 50
1967 # Scaling behavior of the target in both Up and Down directions
1970 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1971 automountServiceAccountToken: true
1972 # Specifies whether a Service Account should be created
1974 # The name of the Service Account to use.
1975 # If not set and `create` is 'true', a name is generated using the release name
1977 # Annotations to add to Airflow API server Kubernetes Service Account.
1981 # Service annotations
1985 port: "{{ .Values.ports.apiServer }}"
1987 # Limit load balancer source ips to list of CIDRs
1988 loadBalancerSourceRanges: []
1989 # loadBalancerSourceRanges:
1991 podDisruptionBudget:
1993 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
1997 # Allow overriding Update Strategy for API server
1999 # Detailed default security contexts for Airflow API server Deployments for container and pod level
2003 # Container level lifecycle hooks
2004 containerLifecycleHooks: {}
2006 # Whether to create init container to wait for db migrations
2009 # Detailed default security context for waitForMigrations for container level
2012 # Launch additional containers into the Airflow API server pods.
2014 # Add additional init containers into API server (templated).
2015 extraInitContainers: []
2016 # Mount additional volumes into API server.
2018 extraVolumeMounts: []
2019 # It can be templated like in the following example:
2021 # - name: my-templated-extra-volume
2023 # secretName: '{{ include "my_secret_template" . }}'
2027 # extraVolumeMounts:
2028 # - name: my-templated-extra-volume
2029 # mountPath: "{{ .Values.my_custom_path }}"
2032 # Select certain nodes for Airflow API server pods.
2036 topologySpreadConstraints: []
2037 priorityClassName: ~
2038 # hostAliases for API server pod
2040 # Annotations for Airflow API server Deployment
2042 # Pod annotations for API server pods (templated)
2046 # Peers for Airflow API server NetworkPolicy ingress
2048 # Ports for Airflow API server NetworkPolicy ingress (if `from` is set)
2050 - port: "{{ .Values.ports.apiServer }}"
2059 # Add custom annotations to the `apiServer` ConfigMap
2060 configMapAnnotations: {}
2061 # This string (templated) will be mounted into the Airflow API Server
2062 # as a custom webserver_config.py. You can bake a webserver_config.py into
2063 # your image instead or specify a ConfigMap containing the
2064 # webserver_config.py.
2066 # apiServerConfig: |
2067 # from airflow import configuration as conf
2069 # # The SQLAlchemy connection string.
2070 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
2072 # # Flask-WTF flag for CSRF
2073 # CSRF_ENABLED = True
2074 apiServerConfigConfigMapName: ~
2076 initialDelaySeconds: 15
2082 initialDelaySeconds: 15
2088 initialDelaySeconds: 0
2093# Airflow webserver settings (only Airflow<3.0)
2096 # Add custom annotations to the webserver ConfigMap
2097 configMapAnnotations: {}
2098 # hostAliases for the webserver pod
2107 allowPodLogReading: true
2109 initialDelaySeconds: 15
2115 initialDelaySeconds: 15
2120 # Wait for at most 1 minute (6*10s) for the webserver container to startup.
2121 # LivenessProbe kicks in after the first successful startupProbe
2123 initialDelaySeconds: 0
2128 # Number of webservers
2130 # Max number of old replicasets to retain
2131 revisionHistoryLimit: ~
2132 # Command to use when running the Airflow webserver (templated).
2134 # Args to use when running the Airflow webserver (templated).
2135 args: ["bash", "-c", "exec airflow webserver"]
2136 # Grace period for webserver to finish after SIGTERM is sent from Kubernetes
2137 terminationGracePeriodSeconds: 30
2141 # Minimum number of webservers created by HPA
2143 # Maximum number of webservers created by HPA
2145 # Specifications for which to use to calculate the desired replica count
2152 averageUtilization: 80
2153 # Scaling behavior of the target in both Up and Down directions
2155 # Create Service Account
2157 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2158 automountServiceAccountToken: true
2159 # Specifies whether a Service Account should be created
2161 # The name of the Service Account to use.
2162 # If not set and `create` is 'true', a name is generated using the release name
2164 # Annotations to add to webserver Kubernetes Service Account.
2166 # Webserver pod disruption budget
2167 podDisruptionBudget:
2169 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
2173 # Allow overriding Update Strategy for Webserver
2175 # When not set, the values defined in the global `securityContext` will be used
2176 # (deprecated, use `webserver.securityContexts` instead)
2182 # Detailed default security contexts for webserver Deployments for container and pod level
2186 # Container level lifecycle hooks
2187 containerLifecycleHooks: {}
2188 # Additional network policies as needed (deprecated, use `webserver.networkPolicy.ingress.from` instead)
2189 extraNetworkPolicies: []
2192 # Peers for webserver NetworkPolicy ingress
2194 # Ports for webserver NetworkPolicy ingress (if `from` is set)
2196 - port: "{{ .Values.ports.airflowUI }}"
2205 # Create initial user. (deprecated, use `createUserJob` section instead)
2210 # email: admin@example.com
2215 # Launch additional containers into webserver (templated).
2217 # Add additional init containers into webserver (templated).
2218 extraInitContainers: []
2219 # Mount additional volumes into webserver.
2221 extraVolumeMounts: []
2222 # It can be templated like in the following example:
2224 # - name: my-templated-extra-volume
2226 # secretName: '{{ include "my_secret_template" . }}'
2230 # extraVolumeMounts:
2231 # - name: my-templated-extra-volume
2232 # mountPath: "{{ .Values.my_custom_path }}"
2235 # This string (templated) will be mounted into the Airflow Webserver
2236 # as a custom webserver_config.py. You can bake a webserver_config.py into
2237 # your image instead or specify a ConfigMap containing the
2238 # webserver_config.py.
2240 # webserverConfig: |
2241 # from airflow import configuration as conf
2243 # # The SQLAlchemy connection string.
2244 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
2246 # # Flask-WTF flag for CSRF
2247 # CSRF_ENABLED = True
2248 webserverConfigConfigMapName: ~
2251 # Service annotations
2255 port: "{{ .Values.ports.airflowUI }}"
2256 # To change the port used to access the webserver:
2258 # - name: airflow-ui
2260 # targetPort: airflow-ui
2261 # To only expose a sidecar, not the webserver directly:
2263 # - name: only_sidecar
2266 # If you have a public IP, set NodePort to set an external port.
2267 # Service type must be 'NodePort':
2269 # - name: airflow-ui
2275 # Limit load balancer source ips to list of CIDRs
2276 loadBalancerSourceRanges: []
2277 # loadBalancerSourceRanges:
2279 # Select certain nodes for Airflow webserver pods.
2281 priorityClassName: ~
2283 # default webserver affinity is:
2285 # preferredDuringSchedulingIgnoredDuringExecution:
2286 # - podAffinityTerm:
2289 # component: webserver
2290 # topologyKey: kubernetes.io/hostname
2294 topologySpreadConstraints: []
2295 # Annotations for webserver Deployment
2297 # Pod annotations for webserver pods (templated)
2299 # Labels specific webserver app
2302 # Whether to create init container to wait for db migrations
2305 # Detailed default security context for waitForMigrations for container level
2309# Airflow Triggerer Config
2312 # Number of Airflow triggerers in the Deployment
2314 # Max number of old replicasets to retain
2315 revisionHistoryLimit: ~
2316 # Command to use when running Airflow triggerers (templated).
2318 # Args to use when running Airflow triggerer (templated).
2319 args: ["bash", "-c", "exec airflow triggerer"]
2320 # Update Strategy when triggerer is deployed as a StatefulSet
2322 # Update Strategy when triggerer is deployed as a Deployment
2326 maxUnavailable: "50%"
2327 # If the triggerer stops heartbeating for 5 minutes (5*60s) kill the
2328 # triggerer and let Kubernetes restart it
2330 initialDelaySeconds: 10
2335 # Create Service Account
2337 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2338 automountServiceAccountToken: true
2339 # Specifies whether a Service Account should be created
2341 # The name of the Service Account to use.
2342 # If not set and `create` is 'true', a name is generated using the release name
2344 # Annotations to add to triggerer Kubernetes Service Account.
2346 # When not set, the values defined in the global `securityContext` will be used
2347 # (deprecated, use `triggerer.securityContexts` instead)
2353 # Detailed default security context for triggerer for container and pod level
2357 # Container level lifecycle hooks
2358 containerLifecycleHooks: {}
2360 # Enable persistent volumes
2362 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed.
2363 persistentVolumeClaimRetentionPolicy: ~
2364 # Volume size for triggerer StatefulSet
2366 # If using a custom storageClass, pass name ref to all statefulSets here
2368 # Execute init container to chown log directory.
2369 # This is currently only needed in kind, due to usage
2370 # of local-path provisioner.
2371 fixPermissions: false
2372 # Annotations to add to triggerer volumes
2374 # Triggerer pod disruption budget
2375 podDisruptionBudget:
2377 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
2389 # Grace period for triggerer to finish after SIGTERM is sent from Kubernetes
2390 terminationGracePeriodSeconds: 60
2391 # This setting tells Kubernetes that its ok to evict
2392 # when it wants to scale a node down.
2394 # Launch additional containers into triggerer (templated).
2396 # Add additional init containers into triggerers (templated).
2397 extraInitContainers: []
2398 # Mount additional volumes into triggerer.
2400 extraVolumeMounts: []
2401 # It can be templated like in the following example:
2403 # - name: my-templated-extra-volume
2405 # secretName: '{{ include "my_secret_template" . }}'
2409 # extraVolumeMounts:
2410 # - name: my-templated-extra-volume
2411 # mountPath: "{{ .Values.my_custom_path }}"
2414 # Select certain nodes for Airflow triggerer pods.
2417 # default triggerer affinity is:
2419 # preferredDuringSchedulingIgnoredDuringExecution:
2420 # - podAffinityTerm:
2423 # component: triggerer
2424 # topologyKey: kubernetes.io/hostname
2428 topologySpreadConstraints: []
2429 # hostAliases for the triggerer pod
2438 priorityClassName: ~
2439 # Annotations for the triggerer Deployment
2441 # Pod annotations for triggerer pods (templated)
2443 # Labels specific to triggerer objects and pods
2446 # Whether to deploy the Airflow triggerer log groomer sidecar.
2448 # Command to use when running the Airflow triggerer log groomer sidecar (templated).
2450 # Args to use when running the Airflow triggerer log groomer sidecar (templated).
2451 args: ["bash", "/clean-logs"]
2452 # Number of days to retain logs
2454 # Number of minutes to retain logs.
2455 # This can be used for finer granularity than days.
2456 # Total retention is `retentionDays` + `retentionMinutes`.
2458 # frequency to attempt to groom logs, in minutes
2459 frequencyMinutes: 15
2460 # Max size of logs in bytes. 0 = disabled
2462 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set.
2472 # Detailed default security context for `logGroomerSidecar` for container level
2475 # Container level lifecycle hooks
2476 containerLifecycleHooks: {}
2479 # Whether to create init container to wait for db migrations
2482 # Detailed default security context for waitForMigrations for container level
2486 # Allow KEDA autoscaling.
2490 # How often KEDA polls the Airflow DB to report new scale requests to the HPA
2492 # How many seconds KEDA will wait before scaling to zero.
2493 # Note that HPA has a separate cooldown period for scale-downs
2495 # Minimum number of triggerers created by keda
2497 # Maximum number of triggerers created by keda
2499 # Specify HPA related options
2501 # horizontalPodAutoscalerConfig:
2504 # stabilizationWindowSeconds: 300
2510 # Query to use for KEDA autoscaling. Must return a single integer.
2512 SELECT ceil(COUNT(*)::decimal / {{ include "triggerer.capacity" . }}) FROM trigger
2513 # Whether to use PGBouncer to connect to the database or not when it is enabled
2514 # This configuration will be ignored if PGBouncer is not enabled
2516# Airflow Dag Processor Config
2519 # Dag Bundle Configuration
2520 # Define Dag bundles in a structured YAML format. This will be automatically
2521 # converted to JSON string format for `config.dag_processor.dag_bundle_config_list`.
2522 dagBundleConfigList:
2524 classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
2527 # dagBundleConfigList:
2529 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
2531 # git_conn_id: "GITHUB__repo1"
2533 # tracking_ref: "main"
2534 # refresh_interval: 60
2536 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
2538 # git_conn_id: "GITHUB__repo2"
2540 # tracking_ref: "develop"
2541 # refresh_interval: 120
2542 # - name: dags-folder
2543 # classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
2546 # Number of Airflow dag processors in the Deployment
2548 # Max number of old ReplicaSets to retain
2549 revisionHistoryLimit: ~
2550 # Command to use when running Airflow dag processors (templated).
2552 # Args to use when running Airflow dag processor (templated).
2553 args: ["bash", "-c", "exec airflow dag-processor"]
2554 # Update Strategy for dag processors
2558 maxUnavailable: "50%"
2559 # If the dag processor stops heartbeating for 5 minutes (5*60s) kill the
2560 # dag processor and let Kubernetes restart it
2562 initialDelaySeconds: 10
2567 # Create Service Account
2569 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2570 automountServiceAccountToken: true
2571 # Specifies whether a Service Account should be created
2573 # The name of the Service Account to use.
2574 # If not set and `create` is 'true', a name is generated using the release name
2576 # Annotations to add to dag processor Kubernetes Service Account.
2578 # Dag processor pod disruption budget
2579 podDisruptionBudget:
2581 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
2585 # When not set, the values defined in the global `securityContext` will be used
2586 # (deprecated, use `dagProcessor.securityContexts` instead)
2592 # Detailed default security context for dagProcessor for container and pod level
2596 # Container level lifecycle hooks
2597 containerLifecycleHooks: {}
2606 # Grace period for dag processor to finish after SIGTERM is sent from Kubernetes
2607 terminationGracePeriodSeconds: 60
2608 # This setting tells Kubernetes that its ok to evict
2609 # when it wants to scale a node down.
2611 # Launch additional containers into dag processor (templated).
2613 # Add additional init containers into dag processors (templated).
2614 extraInitContainers: []
2615 # Mount additional volumes into dag processor.
2617 extraVolumeMounts: []
2618 # It can be templated like in the following example:
2620 # - name: my-templated-extra-volume
2622 # secretName: '{{ include "my_secret_template" . }}'
2626 # extraVolumeMounts:
2627 # - name: my-templated-extra-volume
2628 # mountPath: "{{ .Values.my_custom_path }}"
2631 # Select certain nodes for Airflow dag processor pods.
2634 # Default dag processor affinity is:
2636 # preferredDuringSchedulingIgnoredDuringExecution:
2637 # - podAffinityTerm:
2640 # component: dag-processor
2641 # topologyKey: kubernetes.io/hostname
2645 topologySpreadConstraints: []
2646 priorityClassName: ~
2647 # Annotations for the dag processor Deployment
2649 # Pod annotations for dag processor pods (templated)
2652 # Whether to deploy the Airflow dag processor log groomer sidecar.
2654 # Command to use when running the Airflow dag processor log groomer sidecar (templated).
2656 # Args to use when running the Airflow dag processor log groomer sidecar (templated).
2657 args: ["bash", "/clean-logs"]
2658 # Number of days to retain logs
2660 # Number of minutes to retain logs.
2661 # This can be used for finer granularity than days.
2662 # Total retention is `retentionDays` + `retentionMinutes`.
2664 # frequency to attempt to groom logs, in minutes
2665 frequencyMinutes: 15
2666 # Max size of logs in bytes. 0 = disabled
2668 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set.
2682 # Whether to create init container to wait for db migrations
2685 # Detailed default security context for waitForMigrations for container level
2688 # Labels specific to dag processor objects
2690 # Environment variables to add to dag processor container
2695 # If True, and using CeleryExecutor/CeleryKubernetesExecutor, will deploy flower app.
2698 initialDelaySeconds: 10
2700 failureThreshold: 10
2703 initialDelaySeconds: 10
2705 failureThreshold: 10
2707 # Wait for at most 1 minute (6*10s) for the flower container to startup.
2708 # LivenessProbe kicks in after the first successful StartupProbe
2710 initialDelaySeconds: 0
2714 # Max number of old ReplicaSets to retain
2715 revisionHistoryLimit: ~
2716 # Command to use when running flower (templated).
2718 # Args to use when running flower (templated).
2722 # The format below is necessary to get `helm lint` happy
2725 airflow celery flower
2726 # Additional network policies as needed (deprecated, use `flower.networkPolicy.ingress.from` instead)
2727 extraNetworkPolicies: []
2730 # Peers for flower NetworkPolicy ingress
2732 # Ports for flower NetworkPolicy ingress (if `from` is set)
2734 - port: "{{ .Values.ports.flowerUI }}"
2743 # When not set, the values defined in the global `securityContext` will be used
2744 # (deprecated, use `flower.securityContexts` instead)
2750 # Detailed default security context for flower for container and pod level
2754 # Container level lifecycle hooks
2755 containerLifecycleHooks: {}
2756 # Create Service Account
2758 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2759 automountServiceAccountToken: true
2760 # Specifies whether a Service Account should be created
2762 # The name of the Service Account to use.
2763 # If not set and `create` is 'true', a name is generated using the release name
2765 # Annotations to add to worker Kubernetes Service Account.
2767 # If set, the secret must contain a base64-encoded 'connection' key with
2768 # a Flower basic auth connection string user:password.
2774 # name: custom-flower-secret
2777 # connection: <base64_encoded_user_password>
2779 # Add custom annotations to the flower secret
2780 secretAnnotations: {}
2781 # If `secretName` is not specified, set username and password (secret will be created automatically)
2786 # Service annotations
2790 port: "{{ .Values.ports.flowerUI }}"
2791 # To change the port used to access flower:
2795 # targetPort: flower-ui
2798 # Limit load balancer source ips to list of CIDRs
2799 loadBalancerSourceRanges: []
2800 # loadBalancerSourceRanges:
2802 # Launch additional containers into the flower pods.
2804 # Mount additional volumes into the flower pods.
2806 extraVolumeMounts: []
2807 # It can be templated like in the following example:
2809 # - name: my-templated-extra-volume
2811 # secretName: '{{ include "my_secret_template" . }}'
2815 # extraVolumeMounts:
2816 # - name: my-templated-extra-volume
2817 # mountPath: "{{ .Values.my_custom_path }}"
2820 # Select certain nodes for Airflow flower pods.
2824 topologySpreadConstraints: []
2825 priorityClassName: ~
2826 # Annotations for the flower Deployment
2828 # Pod annotations for flower pods (templated)
2830 # Labels specific to flower objects and pods
2835 # Add custom annotations to the StatsD ConfigMap
2836 configMapAnnotations: {}
2837 # When otelCollector.metricsEnabled is true, [metrics] statsd_on is set to
2838 # False in the rendered Airflow config because Airflow can only export metrics
2839 # to one backend at a time.
2841 # Max number of old ReplicaSets to retain
2842 revisionHistoryLimit: ~
2843 # Arguments for StatsD exporter command.
2844 # By default contains path in the container to the mapping config file.
2845 args: ["--statsd.mapping-config=/etc/statsd-exporter/mappings.yml"]
2846 # If you ever need to fully override the entire `args` list, you can
2847 # supply your own array here; if set, all below flag-specific values
2848 # under `statsd.cache` section are ignored.
2850 # - "--statsd.cache-size=1000"
2851 # - "--statsd.cache-type=random"
2855 # Maximum number of metric‐mapping entries to keep in cache.
2856 # When you send more distinct metric names than this, older entries
2857 # will be evicted according to cacheType.
2859 # Metrics Eviction policy for the mapping cache.
2860 # - lru → Least‐Recently‐Used eviction
2861 # - random → Random eviction
2863 # Per‐metric time‐to‐live. When set to a non‐zero duration, any metric
2864 # series that hasn't received an update in this interval will be dropped
2865 # from the exported '/metrics' output.
2866 # Format: Go duration string (e.g. "30s", "5m", "1h")
2867 # Default: "0s" (disabled, never expires)
2869 # Annotations to add to the StatsD Deployment.
2871 # Grace period for StatsD to finish after SIGTERM is sent from Kubernetes
2872 terminationGracePeriodSeconds: 30
2873 # Create Service Account
2875 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2876 automountServiceAccountToken: true
2877 # Specifies whether a Service Account should be created
2879 # The name of the Service Account to use.
2880 # If not set and `create` is 'true', a name is generated using the release name
2882 # Annotations to add to worker Kubernetes Service Account.
2885 # (deprecated, use `statsd.securityContexts` instead)
2891 # Detailed default security context for StatsD Deployments for container and pod level
2895 # Container level lifecycle hooks
2896 containerLifecycleHooks: {}
2897 # Additional network policies as needed
2898 extraNetworkPolicies: []
2908 extraAnnotations: {}
2909 # Select certain nodes for StatsD pods.
2913 topologySpreadConstraints: []
2914 priorityClassName: ~
2915 # Additional mappings for StatsD exporter.
2916 # If set, will merge default mapping and extra mappings, where default mapping has higher priority.
2917 # If you want to change some default mapping, please use `overrideMappings` setting.
2919 # Override mappings for StatsD exporter.
2920 # If set, will ignore setting item in default and `extraMappings`.
2921 # If you use it, ensure that it contains all mapping items.
2922 overrideMappings: []
2923 # Pod annotations for StatsD pods (templated)
2925 # Labels specific to StatsD objects and pods
2927 # Environment variables to add to StatsD container
2929# OpenTelemetry Collector settings
2931 # Send Airflow traces to the OTel Collector (sets [traces] otel_on).
2932 tracesEnabled: false
2933 # Send Airflow metrics to the OTel Collector (sets [metrics] otel_on and disables statsd).
2934 metricsEnabled: false
2935 # Default value for the OTEL_METRIC_EXPORT_INTERVAL env var on Airflow pods.
2936 # Interval (in milliseconds) at which the OTel SDK exports metrics to the collector.
2937 metricExportIntervalMs: 30000
2938 # Override the OTel Collector config.yml. When set (non-empty), this string replaces
2939 # the chart's default collector config. The value is rendered with `tpl`, so you can
2940 # reference values like `{{ .Values.ports.otelCollectorOtlpHttp }}` or
2941 # `{{ include "airflow.fullname" . }}` from inside the string. Leave empty to use
2942 # the chart default.
2947 # endpoint: 0.0.0.0:13133
2952 # endpoint: 0.0.0.0:{{ .Values.ports.otelCollectorOtlpHttp }}
2959 # extensions: [health_check]
2963 # processors: [batch]
2964 # exporters: [logging]
2966 # Args to pass to the OTel Collector container (templated).
2968 - "--config=/etc/otel-collector/config.yml"
2969 # Max number of old ReplicaSets to retain
2970 revisionHistoryLimit: ~
2971 # Annotations to add to the OTel Collector Deployment
2973 # Grace period for OTel Collector to finish after SIGTERM
2974 terminationGracePeriodSeconds: 30
2976 initialDelaySeconds: 10
2979 initialDelaySeconds: 10
2994 topologySpreadConstraints: []
2995 priorityClassName: ~
3001 # Additional ingress peers/rules for the OTel Collector NetworkPolicy.
3002 # Only used when `networkPolicies.enabled` is true.
3003 extraNetworkPolicies: []
3005 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3006 # The default OTel Collector config does not talk to the Kubernetes API, so credentials
3007 # are not auto-mounted. Flip to true if you override `otelCollector.config` to use
3008 # processors that need API access (e.g. `k8sattributes`).
3009 automountServiceAccountToken: false
3010 # Specifies whether a Service Account should be created
3012 # The name of the Service Account to use.
3013 # If not set and `create` is 'true', a name is generated using the release name
3015 # Annotations to add to the OTel Collector Kubernetes ServiceAccount.
3021 # Number of PgBouncer replicas to run in Deployment
3023 # Max number of old replicasets to retain
3024 revisionHistoryLimit: ~
3025 # Command to use for PgBouncer (templated).
3026 command: ["pgbouncer", "-u", "nobody", "/etc/pgbouncer/pgbouncer.ini"]
3027 # Args to use for PgBouncer (templated).
3029 auth_type: scram-sha-256
3030 auth_file: /etc/pgbouncer/users.txt
3031 # Whether to mount the config secret files at a default location (/etc/pgbouncer/*).
3032 # Can be skipped to allow for other means to get the values, e.g. secrets provider class.
3033 mountConfigSecret: true
3034 # Annotations to be added to the PgBouncer Deployment
3036 # Pod annotations for PgBouncer pods (templated)
3038 # Add custom annotations to the PgBouncer certificates secret
3039 certificatesSecretAnnotations: {}
3040 # Create Service Account
3042 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3043 automountServiceAccountToken: true
3044 # Specifies whether a Service Account should be created
3046 # The name of the Service Account to use.
3047 # If not set and `create` is 'true', a name is generated using the release name
3049 # Annotations to add to worker Kubernetes Service Account.
3051 # Additional network policies as needed
3052 extraNetworkPolicies: []
3054 metadataPoolSize: 10
3055 resultBackendPoolSize: 5
3056 # Maximum clients that can connect to PgBouncer (higher = more file descriptors)
3058 # Supply the name of existing secret with 'pgbouncer.ini' and 'users.txt' defined
3064 # name: pgbouncer-config-secret
3066 # pgbouncer.ini: <base64_encoded pgbouncer.ini file content>
3067 # users.txt: <base64_encoded users.txt file content>
3070 # Add custom annotations to the PgBouncer config secret
3071 configSecretAnnotations: {}
3072 # PgBouncer pod disruption budget
3073 podDisruptionBudget:
3075 # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive)
3089 extraAnnotations: {}
3091 # https://www.pgbouncer.org/config.html
3093 logDisconnections: 0
3101 # Add extra PgBouncer ini configuration in the databases section:
3102 # https://www.pgbouncer.org/config.html#section-databases
3104 extraIniResultBackend: ~
3105 # Add extra general PgBouncer ini configuration: https://www.pgbouncer.org/config.html
3107 # Mount additional volumes into PgBouncer.
3108 # Volumes apply to all PgBouncer containers, while volume mounts apply to the PgBouncer
3109 # container itself. Metrics exporter container has its own mounts.
3111 extraVolumeMounts: []
3112 # It can be templated like in the following example:
3114 # - name: my-templated-extra-volume
3116 # secretName: '{{ include "my_secret_template" . }}'
3120 # extraVolumeMounts:
3121 # - name: my-templated-extra-volume
3122 # mountPath: "{{ .Values.my_custom_path }}"
3125 # Launch additional containers into PgBouncer pod.
3127 # Select certain nodes for PgBouncer pods.
3131 topologySpreadConstraints: []
3132 priorityClassName: ~
3134 # Detailed default security context for PgBouncer for container level
3138 # Container level lifecycle hooks
3139 containerLifecycleHooks:
3142 # Allow existing queries clients to complete within 120 seconds
3143 command: ["/bin/sh", "-c", "killall -INT pgbouncer && sleep 120"]
3144 metricsExporterSidecar:
3154 # Supply the name of existing secret with PGBouncer connection URI containing
3155 # stats user and password, where 'connection' key is base64-encoded value.
3161 # name: pgbouncer-stats-secret
3163 # connection: postgresql://<stats user>:<password>@127.0.0.1:6543/pgbouncer?<connection params>
3166 # Key containing the PGBouncer connection URI, defaults to 'connection' if not defined
3168 # Add custom annotations to the PgBouncer stats secret
3169 statsSecretAnnotations: {}
3170 # Detailed default security context for metricsExporterSidecar for container level
3173 # Container level lifecycle hooks
3174 containerLifecycleHooks: {}
3176 initialDelaySeconds: 10
3180 initialDelaySeconds: 10
3183 # Mount additional volumes into the metrics exporter.
3184 extraVolumeMounts: []
3185 # It can be templated like in the following example:
3186 # extraVolumeMounts:
3187 # - name: my-templated-extra-volume
3188 # mountPath: "{{ .Values.my_custom_path }}"
3190 # Labels specific to PgBouncer objects and pods
3192 # Environment variables to add to PgBouncer container
3194# Configuration for the redis provisioned by the chart
3197 terminationGracePeriodSeconds: 600
3198 # Annotations for Redis Statefulset
3200 # Create Service Account
3202 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3203 automountServiceAccountToken: true
3204 # Specifies whether a Service Account should be created
3206 # The name of the Service Account to use.
3207 # If not set and `create` is 'true', a name is generated using the release name
3209 # Annotations to add to worker Kubernetes Service Account.
3214 # If using ClusterIP service type, custom IP address can be specified
3216 # If using NodePort service type, custom node port can be specified
3219 # Enable persistent volumes
3221 # Volume size for worker StatefulSet
3223 # If using a custom storageClass, pass name ref to all statefulSets here
3225 # Annotations to add to redis volumes
3227 # The name of an existing PVC to use
3229 persistentVolumeClaimRetentionPolicy: ~
3230 # persistentVolumeClaimRetentionPolicy:
3231 # whenDeleted: Delete
3232 # whenScaled: Delete
3233 # Configuration for empty dir volume (if `redis.persistence.enabled` == 'false')
3245 # If set use as redis secret. Make sure to also set `data.brokerUrlSecretName` value.
3246 passwordSecretName: ~
3247 # If `passwordSecretName` is not specified, set `password` field.
3248 # Otherwise a new password will be generated on install
3249 # Note: password can only be set during 'helm install', not 'helm upgrade'.
3251 # Add custom annotations to the redis password secret
3252 passwordSecretAnnotations: {}
3253 # This setting tells Kubernetes that its ok to evict
3254 # when it wants to scale a node down.
3256 # Select certain nodes for redis pods.
3260 topologySpreadConstraints: []
3261 priorityClassName: ~
3262 # Set to 0 for backwards-compatibility
3264 # (deprecated, use `redis.securityContexts` instead)
3269 # Detailed default security context for redis for container and pod level
3273 # Container level lifecycle hooks
3274 containerLifecycleHooks: {}
3275 # Labels specific to redis objects and pods
3277 # Pod annotations for Redis pods (templated)
3279# Auth secret for a private registry (deprecated, use `imagePullSecrets` instead)
3280# This is used if pulling Airflow images from a private registry
3282 # Name of the Kubernetes secret containing Base64 encoded credentials to connect to a private registry
3283 # (deprecated, use `imagePullSecrets` instead).
3285 # Credentials to connect to a private registry, these will get Base64 encoded and stored in a secret
3286 # (deprecated, use `imagePullSecrets` instead - requires manual secret creation).
3294# Elasticsearch logging configuration
3296 # Enable elasticsearch task logging
3298 # A secret containing the connection
3300 # Object representing the connection, if `secretName` not specified
3310 # Add custom annotations to the elasticsearch secret
3311 secretAnnotations: {}
3312# OpenSearch logging configuration
3314 # Enable opensearch task logging
3316 # A secret containing the connection
3318 # Object representing the connection, if `secretName` not specified
3327# All ports used by chart
3336 otelCollectorOtlpHttp: 4318
3337 otelCollectorOtlpGrpc: 4317
3339 pgbouncerScrape: 9127
3341# Define any ResourceQuotas for namespace
3343# Define default/max/min values for pods and containers in namespace
3345# This runs as a CronJob to cleanup old pods spawned by the KubernetesExecutor.
3346# It is required to have KubernetesExecutor enabled.
3349 # Run every 15 minutes (templated).
3350 schedule: "*/15 * * * *"
3351 # To select a random-ish, deterministic starting minute between 3 and 12 inclusive for each release:
3352 # schedule: '{{- add 3 (regexFind ".$" (adler32sum .Release.Name)) -}}-59/15 * * * *'
3353 # To select the last digit of unix epoch time as the starting minute on each deploy:
3354 # schedule: '{{- now | unixEpoch | trunc -1 -}}-59/* * * * *'
3356 # Command to use when running the cleanup CronJob (templated).
3358 # Args to use when running the cleanup CronJob (templated).
3359 args: ["bash", "-c", "exec airflow kubernetes cleanup-pods --namespace={{ .Release.Namespace }}"]
3360 # `jobAnnotations` are annotations on the cleanup CronJob
3362 # Select certain nodes for Airflow cleanup pods.
3366 topologySpreadConstraints: []
3367 priorityClassName: ~
3368 # Pod annotations for cleanup pods (templated)
3370 # Labels specific to cleanup objects and pods
3380 # Create Service Account
3382 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3383 automountServiceAccountToken: true
3384 # Specifies whether a Service Account should be created
3386 # The name of the Service Account to use.
3387 # If not set and `create` is 'true', a name is generated using the release name
3389 # Annotations to add to cleanup CronJob Kubernetes Service Account.
3391 # Service Account Token Volume configuration
3392 # This is only used when `automountServiceAccountToken` is 'false'
3393 # and allows manual configuration of the Service Account token volume
3394 serviceAccountTokenVolume:
3395 # Enable manual Service Account token volume configuration
3397 # Path where the Service Account token should be mounted
3398 mountPath: /var/run/secrets/kubernetes.io/serviceaccount
3399 # Name of the volume
3400 volumeName: kube-api-access
3401 # Token expiration in seconds
3402 expirationSeconds: 3600
3403 # Audience for the token
3405 # When not set, the values defined in the global `securityContext` will be used
3406 # (deprecated, use `cleanup.securityContexts` instead)
3412 # Detailed default security context for cleanup for container level
3416 # container level lifecycle hooks
3417 containerLifecycleHooks: {}
3418 # Specify history limit
3419 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
3420 failedJobsHistoryLimit: ~
3421 successfulJobsHistoryLimit: ~
3422# This runs as a CronJob to cleanup database for old entries.
3425 applyCustomEnv: true
3426 # Run every week on Sunday at midnight (templated).
3427 schedule: "0 0 * * 0"
3428 # Command to use when running the database cleanup CronJob (templated).
3430 # Args to use when running the database cleanup CronJob (templated).
3435 CLEAN_TS=$(date -d "-{{ .Values.databaseCleanup.retentionDays }} days" +"%Y-%m-%dT%H:%M:%S"); echo "Cleaning up metadata DB entries older than ${CLEAN_TS}"; exec airflow db clean --clean-before-timestamp "${CLEAN_TS}" --yes {{- if .Values.databaseCleanup.skipArchive }} --skip-archive{{ end }} {{- if .Values.databaseCleanup.verbose }} --verbose{{ end }} {{- with .Values.databaseCleanup.batchSize }} --batch-size {{ . }}{{ end }} {{- with .Values.databaseCleanup.tables }} --tables {{ . | join "," }}{{ end }}
3436 # Number of days to retain entries in the metadata database.
3438 # Don't preserve purged records in an archive table
3440 # Table names to perform maintenance on. Supported values in:
3441 # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean
3443 # Maximum number of rows to delete or archive in a single transaction
3445 # Make logging output more verbose
3447 # `jobAnnotations` are annotations on the database cleanup CronJob
3449 # Select certain nodes for Airflow database cleanup pods.
3453 topologySpreadConstraints: []
3454 priorityClassName: ~
3455 # Pod annotations for database cleanup pods (templated)
3457 # Labels specific to database cleanup objects and pods
3467 # Create Service Account
3469 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3470 automountServiceAccountToken: true
3471 # Specifies whether a Service Account should be created
3473 # The name of the Service Account to use.
3474 # If not set and `create` is 'true', a name is generated using the release name
3476 # Annotations to add to database cleanup CronJob Kubernetes Service Account.
3479 # Detailed default security context for database cleanup for container level
3483 # Container level lifecycle hooks
3484 containerLifecycleHooks: {}
3485 # Specify history limit
3486 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
3487 failedJobsHistoryLimit: 1
3488 successfulJobsHistoryLimit: 1
3489 # Time to live (in seconds) for Jobs created by this CronJob after they finish.
3490 ttlSecondsAfterFinished: ~
3491# Configuration for postgresql subchart
3492# Uses bitnamilegacy images to avoid Bitnami licensing restrictions
3493# Not recommended for production - use external database instead
3497 repository: bitnamilegacy/postgresql
3498 tag: "16.1.0-debian-11-r15"
3500 enablePostgresUser: true
3501 postgresPassword: postgres
3504# Config settings to go into the mounted airflow.cfg
3506# Please note that these values are passed through the `tpl` function, so are
3507# all subject to being rendered as go templates. If you need to include a
3508# literal `{{` in a value, it must be expressed like this:
3509# a: '{{ "{{ not a template }}" }}'
3511# Do not set config containing secrets via plain text values, use Env Var or k8s secret object
3512# yamllint disable rule:line-length
3515 dags_folder: '{{ include "airflow_dags" . }}'
3516 # This is ignored when used with the official Docker image
3517 load_examples: 'False'
3518 executor: '{{ .Values.executor }}'
3519 auth_manager: "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
3521 remote_logging: '{{- ternary "True" "False" (or .Values.elasticsearch.enabled .Values.opensearch.enabled) }}'
3522 colored_console_log: 'False'
3524 statsd_on: '{{ ternary "True" "False" (and .Values.statsd.enabled (not .Values.otelCollector.metricsEnabled)) }}'
3526 statsd_prefix: airflow
3527 statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
3528 otel_on: '{{ ternary "True" "False" .Values.otelCollector.metricsEnabled }}'
3529 otel_host: '{{ if .Values.otelCollector.metricsEnabled }}{{ printf "%s-otel-collector" (include "airflow.fullname" .) }}{{ end }}'
3530 otel_port: '{{ .Values.ports.otelCollectorOtlpHttp }}'
3532 otel_on: '{{ ternary "True" "False" .Values.otelCollector.tracesEnabled }}'
3534 enable_proxy_fix: 'True'
3537 enable_proxy_fix: 'True'
3539 flower_url_prefix: '{{ ternary "" .Values.ingress.flower.path (eq .Values.ingress.flower.path "/") }}'
3540 worker_concurrency: 16
3541 sync_parallelism: '{{ include "cpu_count" (((.Values.scheduler).resources).limits).cpu }}'
3543 standalone_dag_processor: '{{ ternary "True" "False" (or (semverCompare ">=3.0.0" .Values.airflowVersion) (.Values.dagProcessor.enabled | default false)) }}'
3545 # This value is generated by default from `.Values.dagProcessor.dagBundleConfigList` using the `dag_bundle_config_list` helper function.
3546 # It is recommended to configure this via `dagProcessor.dagBundleConfigList` rather than overriding `config.dag_processor.dag_bundle_config_list` directly.
3547 dag_bundle_config_list: '{{ include "dag_bundle_config_list" . }}'
3550 log_id_template: "{dag_id}-{task_id}-{run_id}-{map_index}-{try_number}"
3551 elasticsearch_configs:
3554 retry_timeout: 'True'
3556 keytab: '{{ .Values.kerberos.keytabPath }}'
3557 reinit_frequency: '{{ .Values.kerberos.reinitFrequency }}'
3558 principal: '{{ .Values.kerberos.principal }}'
3559 ccache: '{{ .Values.kerberos.ccacheMountPath }}/{{ .Values.kerberos.ccacheFileName }}'
3560 celery_kubernetes_executor:
3561 kubernetes_queue: 'kubernetes'
3562 kubernetes_executor:
3563 namespace: '{{ .Release.Namespace }}'
3564 pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
3565 worker_container_repository: '{{ .Values.images.airflow.repository | default .Values.defaultAirflowRepository }}'
3566 worker_container_tag: '{{ .Values.images.airflow.tag | default .Values.defaultAirflowTag }}'
3567 multi_namespace_mode: '{{ ternary "True" "False" .Values.multiNamespaceMode }}'
3568# yamllint enable rule:line-length
3570# Whether Airflow can launch workers and/or pods in multiple namespaces
3571# If true, it creates ClusterRole/ClusterRolebinding (with access to entire cluster)
3572multiNamespaceMode: false
3573# `podTemplate` is a templated string which overwrites the content of `pod_template_file.yaml` used by
3574# KubernetesExecutor. The default `podTemplate` will use `workers` configuration parameters
3575# (e.g. `workers.resources`). As such, you normally won't need to override this directly, however,
3576# you can still provide a completely custom `pod_template_file.yaml` if desired.
3577# If not set, a default one is created using `files/pod-template-file.kubernetes-helm-yaml`.
3579# The following example is NOT functional, but meant to be illustrative of how you can provide a custom
3580# `pod_template_file`. You're better off starting with the default in
3581# `files/pod-template-file.kubernetes-helm-yaml` and modifying from there.
3582# We will set `priorityClassName` in this example:
3587# name: placeholder-name
3591# release: {{ .Release.Name }}
3593# priorityClassName: high-priority
3599 # Where dags volume will be mounted. Works for both persistence and gitSync.
3600 # If not specified, dags mount path will be set to $AIRFLOW_HOME/dags
3603 # Annotations for dags PVC
3605 # Enable persistent volume for storing dags
3607 # Volume size for dags
3609 # If using a custom storageClass, pass name here
3611 # Access mode of the persistent volume
3612 accessMode: ReadWriteOnce
3613 # The name of an existing PVC to use
3615 # Optional subpath for dag volume mount
3619 # Git repo clone url
3620 repo: https://github.com/apache/airflow.git
3621 # SSH example: git@github.com:apache/airflow.git
3622 # HTTPS example: https://github.com/apache/airflow.git
3626 # The git revision (branch, tag, or hash) to check out, v4 only
3629 # The number of consecutive failures allowed before aborting
3631 # Subpath within the repo where dags are located.
3632 # Should be "" if dags are at repo root
3633 subPath: "tests/dags"
3634 # If your repo needs a username/password, you can load them to a k8s secret
3636 # credentialsSecret: git-credentials
3642 # name: git-credentials
3645 # GIT_SYNC_USERNAME: <base64_encoded_git_username>
3646 # GIT_SYNC_PASSWORD: <base64_encoded_git_password>
3648 # GITSYNC_USERNAME: <base64_encoded_git_username>
3649 # GITSYNC_PASSWORD: <base64_encoded_git_password>
3651 # If you are using an ssh clone url, you can load the ssh private key to a k8s secret
3653 # sshKeySecret: airflow-ssh-secret
3659 # name: airflow-ssh-secret
3661 # gitSshKey: <base64_encoded_data>
3663 # If `sshKeySecret` is not specified, you can set `sshKey`
3665 # -----BEGIN {OPENSSH PRIVATE KEY}-----
3667 # -----END {OPENSSH PRIVATE KEY}-----
3669 # If you are using an ssh private key, you can additionally
3670 # specify the content of your known_hosts file
3672 # <host1>,<ip1> <key1>
3673 # <host2>,<ip2> <key2>
3675 # Interval between git sync attempts in seconds.
3676 # High values are more likely to cause Dags to become out of sync between different components.
3677 # Low values cause more traffic to the remote git repository.
3678 # Go-style duration string (e.g. "100ms" or "0.1s" = 100ms).
3679 # For backwards compatibility, wait will be used if it is specified.
3682 # Add variables from secret into gitSync containers, such proxy-config
3686 # name: 'proxy-config'
3688 containerName: git-sync
3690 # When not set, the values defined in the global `securityContext` will be used
3691 # (deprecated, use `dags.gitSync.securityContexts` instead)
3698 # Container level lifecycle hooks
3699 containerLifecycleHooks: {}
3700 # Git-Sync liveness service HTTP bind port
3702 # Setting this to true, will remove readinessProbe usage and configure livenessProbe to
3703 # use a dedicated Git-Sync liveness service. In future, behaviour with value true will be
3704 # default one and old one will be removed
3705 recommendedProbeSetting: false
3709 initialDelaySeconds: 0
3711 failureThreshold: 10
3712 # As Git-Sync is not service-type object, the usage of this section will be removed.
3713 # By setting `dags.gitSync.recommendedProbeSetting` to 'true', you will enable future behaviour.
3715 # The behaviour of the LivenessProbe will change with the next release of Helm Chart.
3716 # To enable future behaviour set `dags.gitSync.recommendedProbeSetting` to 'true'.
3717 # New behaviour uses the recommended liveness configuration by using Git-Sync built-in
3722 # initialDelaySeconds: 0
3724 # failureThreshold: 10
3726 # Mount additional volumes into git-sync.
3727 extraVolumeMounts: []
3728 # It can be templated like in the following example:
3729 # extraVolumeMounts:
3730 # - name: my-templated-extra-volume
3731 # mountPath: "{{ .Values.my_custom_path }}"
3734 # Supported env vars for gitsync can be found at https://github.com/kubernetes/git-sync
3739 # Configuration for empty dir volume
3751 # Configuration for empty dir volume (if `logs.persistence.enabled` == 'false')
3756 # Enable persistent volume for storing logs
3758 # Volume size for logs
3760 # Annotations for the logs PVC
3762 # If using a custom storageClass, pass name here
3764 # The name of an existing PVC to use
3766 # The subpath of the existing PVC to use