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
35# Note:fernet-key,redis-password and broker-url secrets don't use this logic yet,
36# as this may break existing installations due to how they get installed via pre-install hook.
37useStandardNaming: false
38# Max number of old replicasets to retain. Can be overridden by each deployment's revisionHistoryLimit
39revisionHistoryLimit: ~
40# User and group of airflow user
43# Default security context for airflow (deprecated, use `securityContexts` instead)
49# Detailed default security context for airflow deployments
53# Global container lifecycle hooks for airflow containers
54containerLifecycleHooks: {}
55# Airflow home directory
57airflowHome: /opt/airflow
58# Default airflow repository -- overridden by all the specific images below
59defaultAirflowRepository: cgr.dev/chainguard-private/airflow
60# Default airflow tag to deploy
61defaultAirflowTag: latest
62# Default airflow digest. If specified, it takes precedence over tag
63defaultAirflowDigest: sha256:dbbaee231d6387114f5af0d70d4ef4a6ea2a31234b7d80a8b64681664c7b63b1
64# Airflow version (Used to make some decisions based on Airflow Version being deployed)
65airflowVersion: "3.1.7"
71 # Specifying digest takes precedence over tag.
73 pullPolicy: IfNotPresent
74 # To avoid images with user code, you can turn this to 'true' and
75 # all the 'run-airflow-migrations' and 'wait-for-airflow-migrations' containers/jobs
76 # will use the images from 'defaultAirflowRepository:defaultAirflowTag' values
77 # to run and wait for DB migrations .
78 useDefaultImageForMigration: false
79 # timeout (in seconds) for airflow-migrations to complete
80 migrationsWaitTimeout: 60
82 # Note that `images.pod_template.repository` and `images.pod_template.tag` parameters
83 # can be overridden in `config.kubernetes` section. So for these parameters to have effect
84 # `config.kubernetes.worker_container_repository` and `config.kubernetes.worker_container_tag`
88 pullPolicy: IfNotPresent
90 repository: cgr.dev/chainguard-private/flower
91 tag: latest@sha256:1e28cc43790a9535bbb09308ce40cf5eabaeb57ed7dbb26b5190c36f4f2a5331
92 pullPolicy: IfNotPresent
94 repository: cgr.dev/chainguard-private/prometheus-statsd-exporter
95 tag: latest@sha256:d07f7a950e884cde659f45ee394c84ba5704ca474fefcc9bb190264b481b9ce7
96 pullPolicy: IfNotPresent
98 repository: cgr.dev/chainguard-private/redis
99 # Redis is limited to 7.2-bookworm due to licencing change
100 # https://redis.io/blog/redis-adopts-dual-source-available-licensing/
101 tag: latest@sha256:779a0e2490bf5e72449246444bc9b13034f0c3e932b6c4dc84a6d668bceccf5a
102 pullPolicy: IfNotPresent
104 repository: cgr.dev/chainguard-private/pgbouncer
105 tag: latest@sha256:df7c7e82944894fa3a759b765b14bd5171780dfd37da17d7fc86cc9e5435afdf
106 pullPolicy: IfNotPresent
108 repository: cgr.dev/chainguard-private/prometheus-pgbouncer-exporter
109 tag: latest@sha256:4f333c951bb4b3d80cbaf5a46ecaca2ced50b646f30604a38c1dd34d341091b4
110 pullPolicy: IfNotPresent
112 repository: cgr.dev/chainguard-private/git-sync
113 tag: latest@sha256:8d3c14b6b4f574d2e86766d65d343989af61e5a040253c75061487fb4d7b4267
114 pullPolicy: IfNotPresent
115# Select certain nodes for airflow pods.
119topologySpreadConstraints: []
121# Add common labels to all objects and pods defined in this chart.
123# List of existing Kubernetes secrets containing Base64 encoded credentials to connect to private
124# registries. Items can be either strings or {name: secret} objects.
126# Ingress configuration
128 # Enable all ingress resources
129 # (deprecated - use ingress.web.enabled, ingress.apiServer.enabled and ingress.flower.enabled)
131 # Configs for the Ingress of the API Server (Airflow 3+)
133 # Enable API Server ingress resource
135 # Annotations for the API Server Ingress
137 # The path for the API Server Ingress
139 # The pathType for the above path (used only with Kubernetes v1.19 and above)
140 pathType: "ImplementationSpecific"
141 # The hostname for the API Server Ingress (Deprecated - renamed to `ingress.apiServer.hosts`)
143 # The hostnames or hosts configuration for the API Server Ingress
145 # # The hostname for the web Ingress (templated)
147 # # configs for API Server Ingress TLS
149 # # Enable TLS termination for the API Server Ingress
151 # # the name of a pre-created Secret containing a TLS private key and certificate
154 # The Ingress Class for the API Server Ingress (used only with Kubernetes v1.19 and above)
156 # configs for API Server Ingress TLS (Deprecated - renamed to `ingress.apiServer.hosts[*].tls`)
158 # Enable TLS termination for the API Server Ingress
160 # the name of a pre-created Secret containing a TLS private key and certificate
162 # HTTP paths to add to the API Server Ingress before the default path
164 # Http paths to add to the API Server Ingress after the default path
166 # Configs for the Ingress of the web Service (Airflow 2.x)
168 # Enable web ingress resource
170 # Annotations for the web Ingress
172 # The path for the web Ingress
174 # The pathType for the above path (used only with Kubernetes v1.19 and above)
175 pathType: "ImplementationSpecific"
176 # The hostname for the web Ingress (Deprecated - renamed to `ingress.web.hosts`)
178 # The hostnames or hosts configuration for the web Ingress
180 # # The hostname for the web Ingress (templated)
182 # # configs for web Ingress TLS
184 # # Enable TLS termination for the web Ingress
186 # # the name of a pre-created Secret containing a TLS private key and certificate
189 # The Ingress Class for the web Ingress (used only with Kubernetes v1.19 and above)
191 # configs for web Ingress TLS (Deprecated - renamed to `ingress.web.hosts[*].tls`)
193 # Enable TLS termination for the web Ingress
195 # the name of a pre-created Secret containing a TLS private key and certificate
197 # HTTP paths to add to the web Ingress before the default path
199 # Http paths to add to the web Ingress after the default path
201 # Configs for the Ingress of the flower Service
203 # Enable web ingress resource
205 # Annotations for the flower Ingress
207 # The path for the flower Ingress
209 # The pathType for the above path (used only with Kubernetes v1.19 and above)
210 pathType: "ImplementationSpecific"
211 # The hostname for the flower Ingress (Deprecated - renamed to `ingress.flower.hosts`)
213 # The hostnames or hosts configuration for the flower Ingress
215 # # The hostname for the flower Ingress (templated)
218 # # Enable TLS termination for the flower Ingress
220 # # the name of a pre-created Secret containing a TLS private key and certificate
223 # The Ingress Class for the flower Ingress (used only with Kubernetes v1.19 and above)
225 # configs for flower Ingress TLS (Deprecated - renamed to `ingress.flower.hosts[*].tls`)
227 # Enable TLS termination for the flower Ingress
229 # the name of a pre-created Secret containing a TLS private key and certificate
231 # Configs for the Ingress of the statsd Service
233 # Enable web ingress resource
235 # Annotations for the statsd Ingress
237 # The path for the statsd Ingress
239 # The pathType for the above path (used only with Kubernetes v1.19 and above)
240 pathType: "ImplementationSpecific"
241 # The hostname for the statsd Ingress (Deprecated - renamed to `ingress.statsd.hosts`)
243 # The hostnames or hosts configuration for the statsd Ingress
245 # # The hostname for the statsd Ingress (templated)
248 # # Enable TLS termination for the statsd Ingress
250 # # the name of a pre-created Secret containing a TLS private key and certificate
253 # The Ingress Class for the statsd Ingress (used only with Kubernetes v1.19 and above)
255 # Configs for the Ingress of the pgbouncer Service
257 # Enable web ingress resource
259 # Annotations for the pgbouncer Ingress
261 # The path for the pgbouncer Ingress
263 # The pathType for the above path (used only with Kubernetes v1.19 and above)
264 pathType: "ImplementationSpecific"
265 # The hostname for the pgbouncer Ingress (Deprecated - renamed to `ingress.pgbouncer.hosts`)
267 # The hostnames or hosts configuration for the pgbouncer Ingress
269 # # The hostname for the statsd Ingress (templated)
272 # # Enable TLS termination for the pgbouncer Ingress
274 # # the name of a pre-created Secret containing a TLS private key and certificate
277 # The Ingress Class for the pgbouncer Ingress (used only with Kubernetes v1.19 and above)
279# Network policy configuration
281 # Enabled network policies
283# Extra annotations to apply to all
285airflowPodAnnotations: {}
286# Extra annotations to apply to
287# main Airflow configmap
288airflowConfigAnnotations: {}
289# `airflow_local_settings` file as a string (templated).
290airflowLocalSettings: |-
291 {{- if semverCompare ">=2.2.0 <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 also 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.
322# If this is true and using CeleryExecutor/KubernetesExecutor/CeleryKubernetesExecutor, the workers
323# will be able to launch pods.
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 # For Airflow <2.3, backward compatibility; moved to [database] in 2.3
348 AIRFLOW__CORE__SQL_ALCHEMY_CONN: true
349 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: true
350 AIRFLOW_CONN_AIRFLOW_DB: true
351 AIRFLOW__API__SECRET_KEY: true
352 AIRFLOW__API_AUTH__JWT_SECRET: true
353 AIRFLOW__WEBSERVER__SECRET_KEY: true
354 AIRFLOW__CELERY__CELERY_RESULT_BACKEND: true
355 AIRFLOW__CELERY__RESULT_BACKEND: true
356 AIRFLOW__CELERY__BROKER_URL: true
357 AIRFLOW__ELASTICSEARCH__HOST: true
358 AIRFLOW__ELASTICSEARCH__ELASTICSEARCH_HOST: true
359 AIRFLOW__OPENSEARCH__HOST: true
360# Priority Classes that will be installed by charts.
361# Ideally, there should be an entry for dagProcessor, flower,
362# pgbouncer, scheduler, statsd, triggerer, webserver, worker.
363# The format for priorityClasses is an array with each element having:
364# * name is the name of the priorityClass. Ensure the same name is given to the respective section as well
365# * preemptionPolicy for the priorityClass
366# * value is the preemption value for the priorityClass
368# - name: class1 (if this is for dagProcessor, ensure overriding .Values.dagProcessor.priorityClass too)
369# preemptionPolicy: PreemptLowerPriority
372# preemptionPolicy: Never
375# Extra secrets that will be managed by the chart
376# (You can use them with extraEnv or extraEnvFrom or some of the extraVolumes values).
377# The format for secret data is "key/value" where
378# * key (templated) is the name of the secret that will be created
379# * value: an object with the standard 'data' or 'stringData' key (or both).
380# The value associated with those keys must be a string (templated)
384# '{{ .Release.Name }}-airflow-connections':
387# my.custom.label/v1: my_custom_label_value_1
389# AIRFLOW_CONN_GCP: 'base64_encoded_gcp_conn_string'
390# AIRFLOW_CONN_AWS: 'base64_encoded_aws_conn_string'
392# AIRFLOW_CONN_OTHER: 'other_conn'
393# '{{ .Release.Name }}-other-secret-name-suffix':
398# HTTP_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
399# HTTPS_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
400# NO_PROXY: "localhost,127.0.0.1,.svc.cluster.local,kubernetes.default.svc"
402# Extra ConfigMaps that will be managed by the chart
403# (You can use them with extraEnv or extraEnvFrom or some of the extraVolumes values).
404# The format for configmap data is "key/value" where
405# * key (templated) is the name of the configmap that will be created
406# * value: an object with the standard 'data' key.
407# The value associated with this keys must be a string (templated)
411# '{{ .Release.Name }}-airflow-variables':
413# my.custom.label/v2: my_custom_label_value_2
415# AIRFLOW_VAR_HELLO_MESSAGE: "Hi!"
416# AIRFLOW_VAR_KUBERNETES_NAMESPACE: "{{ .Release.Namespace }}"
418# Extra env 'items' that will be added to the definition of airflow containers
419# a string is expected (templated).
420# TODO: difference from `env`? This is a templated string. Probably should template `env` and remove this.
424# - name: AIRFLOW__CORE__LOAD_EXAMPLES
427# Extra envFrom 'items' that will be added to the definition of airflow containers
428# A string is expected (templated).
433# name: '{{ .Release.Name }}-airflow-connections'
435# name: '{{ .Release.Name }}-airflow-variables'
437# Airflow database & redis config
439 # If secret names are provided, use those secrets
440 # These secrets must be created manually, eg:
445 # name: custom-airflow-metadata-secret
448 # connection: base64_encoded_connection_string
449 metadataSecretName: ~
450 # When providing secret names and using the same database for metadata and
451 # result backend, for Airflow < 2.4.0 it is necessary to create a separate
452 # secret for result backend but with a db+ scheme prefix.
453 # For Airflow >= 2.4.0 it is possible to not specify the secret again,
454 # as Airflow will use sql_alchemy_conn with a db+ scheme prefix by default.
455 resultBackendSecretName: ~
456 brokerUrlSecretName: ~
457 # Otherwise pass connection values in
466 # Add custom annotations to the metadata connection secret
467 secretAnnotations: {}
468 # resultBackendConnection defaults to the same database as metadataConnection
469 resultBackendConnection: ~
470 # Add custom annotations to the result backend connection secret
471 resultBackendConnectionSecretAnnotations: {}
472 # or, you can use a different database
473 # resultBackendConnection:
476 # protocol: postgresql
481 # Note: brokerUrl can only be set during install, not upgrade
483 # Add custom annotations to the broker url secret
484 brokerUrlSecretAnnotations: {}
486# Note: fernetKey can only be set during install, not upgrade
488fernetKeySecretName: ~
489# Add custom annotations to the fernet key secret
490fernetKeySecretAnnotations: {}
491# Flask secret key for Airflow 3+ Api: `[api] secret_key` in airflow.cfg
493# Add custom annotations to the api secret
494apiSecretAnnotations: {}
495apiSecretKeySecretName: ~
496# Secret key used to encode and decode JWTs: `[api_auth] jwt_secret` in airflow.cfg
498# Add custom annotations to the JWT secret
499jwtSecretAnnotations: {}
501# Flask secret key for Airflow <3 Webserver: `[webserver] secret_key` in airflow.cfg
503# Add custom annotations to the webserver secret
504webserverSecretAnnotations: {}
505webserverSecretKeySecretName: ~
506# In order to use kerberos you need to create secret containing the keytab file
507# The secret name should follow naming convention of the application where resources are
508# name {{ .Release-name }}-<POSTFIX>. In case of the keytab file, the postfix is "kerberos-keytab"
509# So if your release is named "my-release" the name of the secret should be "my-release-kerberos-keytab"
511# The Keytab content should be available in the "kerberos.keytab" key of the secret.
516# kerberos.keytab: <base64_encoded keytab file content>
520# If you have such keytab file you can do it with similar
522# kubectl create secret generic {{ .Release.name }}-kerberos-keytab --from-file=kerberos.keytab
525# Alternatively, instead of manually creating the secret, it is possible to specify
526# kerberos.keytabBase64Content parameter. This parameter should contain base64 encoded keytab.
530 ccacheMountPath: /var/kerberos-ccache
531 ccacheFileName: cache
532 configPath: /etc/krb5.conf
533 keytabBase64Content: ~
534 keytabPath: /etc/airflow.keytab
535 principal: airflow@FOO.COM
536 reinitFrequency: 3600
538 # This is an example config showing how you can use templating and how "example" config
539 # might look like. It works with the test kerberos server that we are using during integration
540 # testing at Apache Airflow (see `scripts/ci/docker-compose/integration-kerberos.yml` but in
541 # order to make it production-ready you must replace it with your own configuration that
542 # Matches your kerberos deployment. Administrators of your Kerberos instance should
543 # provide the right configuration.
546 default = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_libs.log"
547 kdc = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_kdc.log"
548 admin_server = "FILE:{{ template "airflow_logs_no_quote" . }}/kadmind.log"
551 default_realm = FOO.COM
552 ticket_lifetime = 10h
558 kdc = kdc-server.foo.com
559 admin_server = admin_server.foo.com
561# Airflow Worker Config
563 # Number of Airflow Celery workers (deprecated, use `workers.celery.replicas` instead)
565 # Max number of old Airflow Celery workers ReplicaSets to retain
566 # (deprecated, use `workers.celery.revisionHistoryLimit` instead)
567 revisionHistoryLimit: ~
568 # Command to use when running Airflow Celery workers and using pod-template-file (templated)
569 # Use workers.celery.command and/or workers.kubernetes.command to separate value between
570 # Celery workers and pod-template-file
572 # Args to use when running Airflow Celery workers (templated)
573 # (deprecated, use `workers.celery.args` instead)
577 # The format below is necessary to get `helm lint` happy
580 airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "celery worker" "worker" }}
581 {{- if and .Values.workers.queue (ne .Values.workers.queue "default") }}
582 {{- " -q " }}{{ .Values.workers.queue }}
584 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
585 # kill the worker and let Kubernetes restart it
586 # (deprecated, use `workers.celery.livenessProbe` section instead)
588 # (deprecated, use `workers.celery.livenessProbe.enabled` instead)
590 # (deprecated, use `workers.celery.livenessProbe.initialDelaySeconds` instead)
591 initialDelaySeconds: 10
592 # (deprecated, use `workers.celery.livenessProbe.timeoutSeconds` instead)
594 # (deprecated, use `workers.celery.livenessProbe.failureThreshold` instead)
596 # (deprecated, use `workers.celery.livenessProbe.periodSeconds` instead)
598 # (deprecated, use `workers.celery.livenessProbe.command` instead)
600 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
601 # (deprecated, use `workers.celery.updateStrategy` instead)
603 # Update Strategy when Airflow Celery worker is deployed as a Deployment
604 # (deprecated, use `workers.celery.strategy` instead)
608 maxUnavailable: "50%"
609 # Allow relaxing ordering guarantees for Airflow Celery worker while preserving its uniqueness and identity
610 # (deprecated, use `workers.celery.podManagementPolicy` instead)
611 # podManagementPolicy: Parallel
613 # When not set, the values defined in the global securityContext will
614 # be used in Airflow Celery workers and pod-template-file
620 # Detailed default security context for the
621 # Airflow Celery workers and pod-template-file on container and pod level
622 # Use workers.celery.securityContexts and/or workers.kubernetes.securityContexts to separate value between
623 # Celery workers and pod-template-file
627 # Container level Lifecycle Hooks definition for
628 # Airflow Celery workers and pods created with pod-template-file
629 containerLifecycleHooks: {}
630 # Worker pod disruption budget
635 # minAvailable and maxUnavailable are mutually exclusive
638 # Create ServiceAccount for Airflow Celery workers and pods created with pod-template-file
640 # default value is true
641 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
642 automountServiceAccountToken: true
643 # Specifies whether a ServiceAccount should be created
645 # The name of the ServiceAccount to use.
646 # If not set and create is true, a name is generated using the release name
648 # Annotations to add to worker kubernetes service account.
650 # Allow KEDA autoscaling for Airflow Celery workers
654 # How often KEDA polls the airflow DB to report new scale requests to the HPA
656 # How many seconds KEDA will wait before scaling to zero.
657 # Note that HPA has a separate cooldown period for scale-downs
659 # Minimum number of Airflow Celery workers created by keda
661 # Maximum number of Airflow Celery workers created by keda
663 # Specify HPA related options
665 # horizontalPodAutoscalerConfig:
668 # stabilizationWindowSeconds: 300
674 # Query to use for KEDA autoscaling. Must return a single integer.
676 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 }}
677 # Weather to use PGBouncer to connect to the database or not when it is enabled
678 # This configuration will be ignored if PGBouncer is not enabled
680 # Allow HPA for Airflow Celery workers (KEDA must be disabled)
683 # Minimum number of Airflow Celery workers created by HPA
685 # Maximum number of Airflow Celery workers created by HPA
687 # Specifications for which to use to calculate the desired replica count
694 averageUtilization: 80
695 # Scaling behavior of the target in both Up and Down directions
697 # Persistence volume configuration for Airflow Celery workers
698 # (deprecated, use `workers.celery.persistence` instead)
700 # Enable persistent volumes (deprecated, use `workers.celery.persistence.enabled` instead)
702 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
703 # (deprecated, use `workers.celery.persistence.persistentVolumeClaimRetentionPolicy` instead)
704 persistentVolumeClaimRetentionPolicy: ~
705 # persistentVolumeClaimRetentionPolicy:
706 # whenDeleted: Delete
709 # Volume size for Airflow Celery worker StatefulSet
710 # (deprecated, use `workers.celery.persistence.size` instead)
712 # If using a custom storageClass, pass name ref to all StatefulSets here
713 # (deprecated, use `workers.celery.persistence.storageClassName` instead)
715 # Execute init container to chown log directory.
716 # This is currently only needed in kind, due to usage
717 # of local-path provisioner.
718 # (deprecated, use `workers.celery.persistence.fixPermissions` instead)
719 fixPermissions: false
720 # Annotations to add to Airflow Celery worker volumes
721 # (deprecated, use `workers.celery.persistence.annotations` instead)
723 # Detailed default security context for persistence on container level
724 # (deprecated, use `workers.celery.persistence.securityContexts` instead)
726 # (deprecated, use `workers.celery.persistence.securityContexts.container` instead)
728 # Kerberos sidecar configuration for Airflow Celery workers and pods created with pod-template-file
730 # Enable kerberos sidecar
740 # Detailed default security context for kerberos sidecar on container level
743 # Container level lifecycle hooks
744 containerLifecycleHooks: {}
745 # Kerberos init container configuration for Airflow Celery workers and pods created with pod-template-file
746 # Use workers.celery.kerberosInitContainer and/or workers.kubernetes.kerberosInitContainer to separate
747 # value between Celery workers and pod-template-file
748 kerberosInitContainer:
749 # Enable kerberos init container
759 # Detailed default security context for kerberos init container
762 # Container level lifecycle hooks
763 containerLifecycleHooks: {}
764 # Resource configuration for Airflow Celery workers and pods created with pod-template-file
773 # Grace period for tasks to finish after SIGTERM is sent from kubernetes.
774 # It is used by Airflow Celery workers and pod-template-file.
775 terminationGracePeriodSeconds: 600
776 # This setting tells kubernetes that its ok to evict when it wants to scale a node down.
777 # It is used by Airflow Celery workers and pod-template-file.
779 # Launch additional containers into Airflow Celery worker
780 # and pods created with pod-template-file (templated).
781 # Note: If used with KubernetesExecutor, you are responsible for signaling sidecars to exit when the main
782 # container finishes so Airflow can continue the worker shutdown process!
784 # Add additional init containers into Airflow Celery workers
785 # and pods created with pod-template-file (templated).
786 extraInitContainers: []
787 # Additional volumes and volume mounts attached to the
788 # Airflow Celery workers and pods created with pod-template-file
790 extraVolumeMounts: []
791 # Mount additional volumes into workers pods. It can be templated like in the following example:
793 # - name: my-templated-extra-volume
795 # secretName: '{{ include "my_secret_template" . }}'
800 # - name: my-templated-extra-volume
801 # mountPath: "{{ .Values.my_custom_path }}"
804 # Expose additional ports of Airflow Celery workers. These can be used for additional metric collection.
806 # Select certain nodes for Airflow Celery worker pods and pods created with pod-template-file
811 # Default Airflow Celery worker affinity is:
813 # preferredDuringSchedulingIgnoredDuringExecution:
818 # topologyKey: kubernetes.io/hostname
821 topologySpreadConstraints: []
822 # hostAliases to use in Airflow Celery worker pods and pods created with pod-template-file
824 # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
828 # - "test.hostname.one"
831 # - "test.hostname.two"
833 # Annotations for the Airflow Celery worker resource
835 # Pod annotations for the Airflow Celery workers and pods created with pod-template-file
837 # Labels specific to Airflow Celery workers objects and pods created with pod-template-file
839 # Log groomer configuration for Airflow Celery workers
841 # Whether to deploy the Airflow Celery worker log groomer sidecar
843 # Command to use when running the Airflow Celery worker log groomer sidecar (templated)
845 # Args to use when running the Airflow Celery worker log groomer sidecar (templated)
846 args: ["bash", "/clean-logs"]
847 # Number of days to retain logs
849 # Frequency to attempt to groom logs (in minutes)
859 # Detailed default security context for logGroomerSidecar for container level
863 # Configuration of wait-for-airflow-migration init container for Airflow Celery workers
865 # Whether to create init container to wait for db migrations
868 # Detailed default security context for wait-for-airflow-migrations container
871 # Additional env variable configuration for Airflow Celery workers and pods created with pod-template-file
873 # Additional volume claim templates for Airflow Celery workers
874 volumeClaimTemplates: []
875 # Comment out the above and uncomment the section below to enable it.
876 # Make sure to mount it under extraVolumeMounts.
877 # volumeClaimTemplates:
879 # name: data-volume-1
881 # storageClassName: "storage-class-1"
888 # name: data-volume-2
890 # storageClassName: "storage-class-2"
898 # Number of Airflow Celery workers
900 # Max number of old Airflow Celery workers ReplicaSets to retain
901 revisionHistoryLimit: ~
902 # Command to use when running Airflow Celery workers (templated)
904 # Args to use when running Airflow Celery workers (templated)
906 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
907 # kill the worker and let Kubernetes restart it
910 initialDelaySeconds: ~
915 # Enable the default workers defined by the root `workers` and `workers.celery`
916 # configurations to be created.
917 # If false, only dedicated workers defined in 'sets' will be created.
919 # Queue name for the default workers
921 # List of worker sets. Each item can overwrite values from the parent `workers` and `workers.celery`
946 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
948 # Update Strategy when Airflow Celery worker is deployed as a Deployment
950 # Allow relaxing ordering guarantees for Airflow Celery worker
951 # while preserving its uniqueness and identity
952 # podManagementPolicy: Parallel
954 # Detailed default security context for Airflow Celery workers for container and pod level
955 # If not set, the values from `workers.securityContexts` section will be used.
959 # Persistence volume configuration for Airflow Celery workers
961 # Enable persistent volumes
963 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
964 persistentVolumeClaimRetentionPolicy: ~
965 # persistentVolumeClaimRetentionPolicy:
966 # whenDeleted: Delete
969 # Volume size for Airflow Celery worker StatefulSet
971 # If using a custom storageClass, pass name ref to all StatefulSets here
973 # Execute init container to chown log directory.
974 # This is currently only needed in kind, due to usage
975 # of local-path provisioner.
977 # Annotations to add to Airflow Celery worker volumes
979 # Detailed default security context for persistence on container level
982 # Kerberos init container configuration for Airflow Celery workers
983 # If not set, the values from `workers.kubernetesInitContainer` section will be used.
984 kerberosInitContainer:
985 # Enable kerberos init container
986 # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect
996 # Detailed default security context for kerberos init container
999 # Container level lifecycle hooks
1000 containerLifecycleHooks: {}
1002 # Command to use in pod-template-file (templated)
1004 # Detailed default security context for pod-template-file for container and pod level
1005 # If not set, the values from `workers.securityContexts` section will be used.
1009 # Kerberos init container configuration for pods created with pod-template-file
1010 # If not set, the values from `workers.kubernetesInitContainer` section will be used.
1011 kerberosInitContainer:
1012 # Enable kerberos init container
1013 # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect
1023 # Detailed default security context for kerberos init container
1026 # Container level lifecycle hooks
1027 containerLifecycleHooks: {}
1028# Airflow scheduler settings
1031 # hostAliases for the scheduler pod
1040 # If the scheduler stops heartbeating for 5 minutes (5*60s) kill the
1041 # scheduler and let Kubernetes restart it
1043 initialDelaySeconds: 10
1048 # Wait for at most 1 minute (6*10s) for the scheduler container to startup.
1049 # livenessProbe kicks in after the first successful startupProbe
1051 initialDelaySeconds: 0
1056 # Airflow 2.0 allows users to run multiple schedulers,
1057 # However this feature is only recommended for MySQL 8+ and Postgres
1059 # Max number of old replicasets to retain
1060 revisionHistoryLimit: ~
1061 # Command to use when running the Airflow scheduler (templated).
1063 # Args to use when running the Airflow scheduler (templated).
1064 args: ["bash", "-c", "exec airflow scheduler"]
1065 # Update Strategy when scheduler is deployed as a StatefulSet
1066 # (when using LocalExecutor and workers.persistence)
1068 # Update Strategy when scheduler is deployed as a Deployment
1069 # (when not using LocalExecutor and workers.persistence)
1071 # When not set, the values defined in the global securityContext will be used
1072 # (deprecated, use `securityContexts` instead)
1078 # Detailed default security context for scheduler deployments for container and pod level
1082 # container level lifecycle hooks
1083 containerLifecycleHooks: {}
1084 # Grace period for tasks to finish after SIGTERM is sent from kubernetes
1085 terminationGracePeriodSeconds: 10
1086 # Create ServiceAccount
1088 # affects all executors that launch pods, default value is true
1089 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1090 automountServiceAccountToken: true
1091 # Specifies whether a ServiceAccount should be created
1093 # The name of the ServiceAccount to use.
1094 # If not set and create is true, a name is generated using the release name
1096 # Annotations to add to scheduler kubernetes service account.
1098 # Service Account Token Volume configuration
1099 # This is only used when automountServiceAccountToken is false
1100 # and allows manual configuration of the service account token volume
1101 serviceAccountTokenVolume:
1102 # Enable manual service account token volume configuration
1104 # Path where the service account token should be mounted
1105 mountPath: /var/run/secrets/kubernetes.io/serviceaccount
1106 # Name of the volume
1107 volumeName: kube-api-access
1108 # Token expiration in seconds (default: 1 hour)
1109 expirationSeconds: 3600
1110 # Audience for the token
1112 # Scheduler pod disruption budget
1113 podDisruptionBudget:
1117 # minAvailable and maxUnavailable are mutually exclusive
1128 # This setting tells kubernetes that its ok to evict
1129 # when it wants to scale a node down.
1131 # Launch additional containers into scheduler (templated).
1133 # Add additional init containers into scheduler (templated).
1134 extraInitContainers: []
1135 # Mount additional volumes into scheduler. It can be templated like in the following example:
1137 # - name: my-templated-extra-volume
1139 # secretName: '{{ include "my_secret_template" . }}'
1143 # extraVolumeMounts:
1144 # - name: my-templated-extra-volume
1145 # mountPath: "{{ .Values.my_custom_path }}"
1148 extraVolumeMounts: []
1149 # Select certain nodes for airflow scheduler pods.
1152 # default scheduler affinity is:
1154 # preferredDuringSchedulingIgnoredDuringExecution:
1155 # - podAffinityTerm:
1158 # component: scheduler
1159 # topologyKey: kubernetes.io/hostname
1162 topologySpreadConstraints: []
1163 priorityClassName: ~
1164 # annotations for scheduler deployment
1167 # Labels specific to scheduler objects and pods
1170 # Whether to deploy the Airflow scheduler log groomer sidecar.
1172 # Command to use when running the Airflow scheduler log groomer sidecar (templated).
1174 # Args to use when running the Airflow scheduler log groomer sidecar (templated).
1175 args: ["bash", "/clean-logs"]
1176 # Number of days to retain logs
1178 # frequency to attempt to groom logs, in minutes
1179 frequencyMinutes: 15
1187 # Detailed default security context for logGroomerSidecar for container level
1190 # container level lifecycle hooks
1191 containerLifecycleHooks: {}
1194 # Whether to create init container to wait for db migrations
1197 # Detailed default security context for waitForMigrations for container level
1201# Airflow create user job settings
1203 # Whether the create user job should be created
1205 # Create initial user.
1209 email: admin@example.com
1213 # Limit the lifetime of the job object after it finished execution.
1214 ttlSecondsAfterFinished: 300
1215 # Command to use when running the create user job (templated).
1217 # Args to use when running the create user job (templated).
1221 # The format below is necessary to get `helm lint` happy
1224 airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "users create" "create_user" }} "$@"
1226 # yamllint disable rule:line-length
1228 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.role }}{{ else }}{{ .Values.createUserJob.defaultUser.role }}{{ end }}"
1230 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.username }}{{ else }}{{ .Values.createUserJob.defaultUser.username }}{{ end }}"
1232 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.email }}{{ else }}{{ .Values.createUserJob.defaultUser.email }}{{ end }}"
1234 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.firstName }}{{ else }}{{ .Values.createUserJob.defaultUser.firstName }}{{ end }}"
1236 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.lastName }}{{ else }}{{ .Values.createUserJob.defaultUser.lastName }}{{ end }}"
1238 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.password }}{{ else }}{{ .Values.createUserJob.defaultUser.password }}{{ end }}"
1239 # Annotations on the create user job pod
1241 # jobAnnotations are annotations on the create user job
1243 restartPolicy: OnFailure
1244 # Labels specific to createUserJob objects and pods
1246 # When not set, the values defined in the global securityContext will be used
1252 # Detailed default security context for createUserJob for container and pod level
1256 # container level lifecycle hooks
1257 containerLifecycleHooks: {}
1258 # Create ServiceAccount
1260 # default value is true
1261 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1262 automountServiceAccountToken: true
1263 # Specifies whether a ServiceAccount should be created
1265 # The name of the ServiceAccount to use.
1266 # If not set and create is true, a name is generated using the release name
1268 # Annotations to add to create user kubernetes service account.
1270 # Launch additional containers into user creation job
1272 # Add additional init containers into user creation job (templated).
1273 extraInitContainers: []
1274 # Mount additional volumes into user creation job. It can be templated like in the following example:
1276 # - name: my-templated-extra-volume
1278 # secretName: '{{ include "my_secret_template" . }}'
1282 # extraVolumeMounts:
1283 # - name: my-templated-extra-volume
1284 # mountPath: "{{ .Values.my_custom_path }}"
1287 extraVolumeMounts: []
1291 topologySpreadConstraints: []
1292 priorityClassName: ~
1293 # In case you need to disable the helm hooks that create the jobs after install.
1294 # Disable this if you are using ArgoCD for example
1296 applyCustomEnv: true
1305# Airflow database migration job settings
1308 # Limit the lifetime of the job object after it finished execution.
1309 ttlSecondsAfterFinished: 300
1310 # Command to use when running the migrate database job (templated).
1312 # Args to use when running the migrate database job (templated).
1319 airflow {{ semverCompare ">=2.7.0" .Values.airflowVersion | ternary "db migrate" (semverCompare ">=2.0.0" .Values.airflowVersion | ternary "db upgrade" "upgradedb") }}
1320 # Annotations on the database migration pod
1322 # jobAnnotations are annotations on the database migration job
1324 restartPolicy: OnFailure
1325 # Labels specific to migrate database job objects and pods
1327 # When not set, the values defined in the global securityContext will be used
1333 # Detailed default security context for migrateDatabaseJob for container and pod level
1337 # container level lifecycle hooks
1338 containerLifecycleHooks: {}
1339 # Create ServiceAccount
1341 # default value is true
1342 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1343 automountServiceAccountToken: true
1344 # Specifies whether a ServiceAccount should be created
1346 # The name of the ServiceAccount to use.
1347 # If not set and create is true, a name is generated using the release name
1349 # Annotations to add to migrate database job kubernetes service account.
1359 # Launch additional containers into database migration job
1361 # Add additional init containers into migrate database job (templated).
1362 extraInitContainers: []
1363 # Mount additional volumes into database migration job. It can be templated like in the following example:
1365 # - name: my-templated-extra-volume
1367 # secretName: '{{ include "my_secret_template" . }}'
1371 # extraVolumeMounts:
1372 # - name: my-templated-extra-volume
1373 # mountPath: "{{ .Values.my_custom_path }}"
1376 extraVolumeMounts: []
1380 topologySpreadConstraints: []
1381 priorityClassName: ~
1382 # In case you need to disable the helm hooks that create the jobs after install.
1383 # Disable this if you are using ArgoCD for example
1385 applyCustomEnv: true
1389 # Number of Airflow API servers in the deployment
1390 # This setting is ignored when HPA (Horizontal Pod Autoscaler) is enabled,
1391 # as HPA will automatically manage the number of replicas based on the configured metrics.
1393 # Max number of old replicasets to retain
1394 revisionHistoryLimit: ~
1395 # Labels specific to Airflow API server objects and pods
1397 # Command to use when running the Airflow API server (templated).
1399 # Args to use when running the Airflow API server (templated).
1400 # Example: To enable proxy headers support when running behind a reverse proxy:
1401 # args: ["bash", "-c", "exec airflow api-server --proxy-headers"]
1402 args: ["bash", "-c", "exec airflow api-server"]
1403 allowPodLogReading: true
1404 # Environment variables for the Airflow API server.
1405 # Example: To configure FORWARDED_ALLOW_IPS when running behind a reverse proxy:
1407 # - name: FORWARDED_ALLOW_IPS
1408 # value: "*" # Use "*" for trusted environments, or specify proxy IP ranges for production
1410 # Allow Horizontal Pod Autoscaler (HPA) configuration for apiServer. (optional)
1411 # HPA automatically scales the number of apiServer pods based on observed metrics.
1412 # HPA automatically adjusts apiServer replicas between minReplicaCount and maxReplicaCount based on metrics.
1415 # Minimum number of api-servers created by HPA
1417 # Maximum number of api-servers created by HPA
1419 # Specifications for which to use to calculate the desired replica count
1426 averageUtilization: 50
1427 # Scaling behavior of the target in both Up and Down directions
1430 # default value is true
1431 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1432 automountServiceAccountToken: true
1433 # Specifies whether a ServiceAccount should be created
1435 # The name of the ServiceAccount to use.
1436 # If not set and create is true, a name is generated using the release name
1438 # Annotations to add to Airflow API server kubernetes service account.
1442 ## service annotations
1446 port: "{{ .Values.ports.apiServer }}"
1448 ## Limit load balancer source ips to list of CIDRs
1449 # loadBalancerSourceRanges:
1451 loadBalancerSourceRanges: []
1452 podDisruptionBudget:
1456 # minAvailable and maxUnavailable are mutually exclusive
1459 # Allow overriding Update Strategy for API server
1461 # Detailed default security contexts for Airflow API server deployments for container and pod level
1465 # container level lifecycle hooks
1466 containerLifecycleHooks: {}
1468 # Whether to create init container to wait for db migrations
1471 # Detailed default security context for waitForMigrations for container level
1474 # Launch additional containers into the Airflow API server pods.
1476 # Add additional init containers into API server (templated).
1477 extraInitContainers: []
1478 # Mount additional volumes into API server. It can be templated like in the following example:
1480 # - name: my-templated-extra-volume
1482 # secretName: '{{ include "my_secret_template" . }}'
1486 # extraVolumeMounts:
1487 # - name: my-templated-extra-volume
1488 # mountPath: "{{ .Values.my_custom_path }}"
1491 extraVolumeMounts: []
1492 # Select certain nodes for Airflow API server pods.
1496 topologySpreadConstraints: []
1497 priorityClassName: ~
1498 # hostAliases for API server pod
1500 # annotations for Airflow API server deployment
1505 # Peers for Airflow API server NetworkPolicy ingress
1507 # Ports for Airflow API server NetworkPolicy ingress (if `from` is set)
1509 - port: "{{ .Values.ports.apiServer }}"
1518 # Add custom annotations to the apiServer configmap
1519 configMapAnnotations: {}
1520 # This string (templated) will be mounted into the Airflow API Server
1521 # as a custom webserver_config.py. You can bake a webserver_config.py in to
1522 # your image instead or specify a configmap containing the
1523 # webserver_config.py.
1525 # apiServerConfig: |
1526 # from airflow import configuration as conf
1528 # # The SQLAlchemy connection string.
1529 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
1531 # # Flask-WTF flag for CSRF
1532 # CSRF_ENABLED = True
1533 apiServerConfigConfigMapName: ~
1535 initialDelaySeconds: 15
1541 initialDelaySeconds: 15
1547 initialDelaySeconds: 0
1552# Airflow webserver settings
1555 # Add custom annotations to the webserver configmap
1556 configMapAnnotations: {}
1557 # hostAliases for the webserver pod
1565 allowPodLogReading: true
1567 initialDelaySeconds: 15
1573 initialDelaySeconds: 15
1578 # Wait for at most 1 minute (6*10s) for the webserver container to startup.
1579 # livenessProbe kicks in after the first successful startupProbe
1581 initialDelaySeconds: 0
1586 # Number of webservers
1588 # Max number of old replicasets to retain
1589 revisionHistoryLimit: ~
1590 # Command to use when running the Airflow webserver (templated).
1592 # Args to use when running the Airflow webserver (templated).
1593 args: ["bash", "-c", "exec airflow webserver"]
1594 # Grace period for webserver to finish after SIGTERM is sent from kubernetes
1595 terminationGracePeriodSeconds: 30
1599 # Minimum number of webservers created by HPA
1601 # Maximum number of webservers created by HPA
1603 # Specifications for which to use to calculate the desired replica count
1610 averageUtilization: 80
1611 # Scaling behavior of the target in both Up and Down directions
1613 # Create ServiceAccount
1615 # default value is true
1616 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1617 automountServiceAccountToken: true
1618 # Specifies whether a ServiceAccount should be created
1620 # The name of the ServiceAccount to use.
1621 # If not set and create is true, a name is generated using the release name
1623 # Annotations to add to webserver kubernetes service account.
1625 # Webserver pod disruption budget
1626 podDisruptionBudget:
1630 # minAvailable and maxUnavailable are mutually exclusive
1633 # Allow overriding Update Strategy for Webserver
1635 # When not set, the values defined in the global securityContext will be used
1636 # (deprecated, use `securityContexts` instead)
1642 # Detailed default security contexts for webserver deployments for container and pod level
1646 # container level lifecycle hooks
1647 containerLifecycleHooks: {}
1648 # Additional network policies as needed (Deprecated - renamed to `webserver.networkPolicy.ingress.from`)
1649 extraNetworkPolicies: []
1652 # Peers for webserver NetworkPolicy ingress
1654 # Ports for webserver NetworkPolicy ingress (if `from` is set)
1656 - port: "{{ .Values.ports.airflowUI }}"
1665 # Create initial user. (Note: Deprecated, use createUserJob section instead)
1670 # email: admin@example.com
1675 # Launch additional containers into webserver (templated).
1677 # Add additional init containers into webserver (templated).
1678 extraInitContainers: []
1679 # Mount additional volumes into webserver. It can be templated like in the following example:
1681 # - name: my-templated-extra-volume
1683 # secretName: '{{ include "my_secret_template" . }}'
1687 # extraVolumeMounts:
1688 # - name: my-templated-extra-volume
1689 # mountPath: "{{ .Values.my_custom_path }}"
1692 extraVolumeMounts: []
1693 # This string (templated) will be mounted into the Airflow Webserver
1694 # as a custom webserver_config.py. You can bake a webserver_config.py in to
1695 # your image instead or specify a configmap containing the
1696 # webserver_config.py.
1698 # webserverConfig: |
1699 # from airflow import configuration as conf
1701 # # The SQLAlchemy connection string.
1702 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
1704 # # Flask-WTF flag for CSRF
1705 # CSRF_ENABLED = True
1706 webserverConfigConfigMapName: ~
1709 ## service annotations
1713 port: "{{ .Values.ports.airflowUI }}"
1714 # To change the port used to access the webserver:
1716 # - name: airflow-ui
1718 # targetPort: airflow-ui
1719 # To only expose a sidecar, not the webserver directly:
1721 # - name: only_sidecar
1724 # If you have a public IP, set NodePort to set an external port.
1725 # Service type must be 'NodePort':
1727 # - name: airflow-ui
1732 ## Limit load balancer source ips to list of CIDRs
1733 # loadBalancerSourceRanges:
1735 loadBalancerSourceRanges: []
1736 # Select certain nodes for airflow webserver pods.
1738 priorityClassName: ~
1740 # default webserver affinity is:
1742 # preferredDuringSchedulingIgnoredDuringExecution:
1743 # - podAffinityTerm:
1746 # component: webserver
1747 # topologyKey: kubernetes.io/hostname
1750 topologySpreadConstraints: []
1751 # annotations for webserver deployment
1754 # Labels specific webserver app
1757 # Whether to create init container to wait for db migrations
1760 # Detailed default security context for waitForMigrations for container level
1764# Airflow Triggerer Config
1767 # Number of airflow triggerers in the deployment
1769 # Max number of old replicasets to retain
1770 revisionHistoryLimit: ~
1771 # Command to use when running Airflow triggerers (templated).
1773 # Args to use when running Airflow triggerer (templated).
1774 args: ["bash", "-c", "exec airflow triggerer"]
1775 # Update Strategy when triggerer is deployed as a StatefulSet
1777 # Update Strategy when triggerer is deployed as a Deployment
1781 maxUnavailable: "50%"
1782 # If the triggerer stops heartbeating for 5 minutes (5*60s) kill the
1783 # triggerer and let Kubernetes restart it
1785 initialDelaySeconds: 10
1790 # Create ServiceAccount
1792 # default value is true
1793 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1794 automountServiceAccountToken: true
1795 # Specifies whether a ServiceAccount should be created
1797 # The name of the ServiceAccount to use.
1798 # If not set and create is true, a name is generated using the release name
1800 # Annotations to add to triggerer kubernetes service account.
1802 # When not set, the values defined in the global securityContext will be used
1808 # Detailed default security context for triggerer for container and pod level
1812 # container level lifecycle hooks
1813 containerLifecycleHooks: {}
1815 # Enable persistent volumes
1817 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed.
1818 persistentVolumeClaimRetentionPolicy: ~
1819 # Volume size for triggerer StatefulSet
1821 # If using a custom storageClass, pass name ref to all statefulSets here
1823 # Execute init container to chown log directory.
1824 # This is currently only needed in kind, due to usage
1825 # of local-path provisioner.
1826 fixPermissions: false
1827 # Annotations to add to triggerer volumes
1829 # Triggerer pod disruption budget
1830 podDisruptionBudget:
1834 # minAvailable and maxUnavailable are mutually exclusive
1845 # Grace period for triggerer to finish after SIGTERM is sent from kubernetes
1846 terminationGracePeriodSeconds: 60
1847 # This setting tells kubernetes that its ok to evict
1848 # when it wants to scale a node down.
1850 # Launch additional containers into triggerer (templated).
1852 # Add additional init containers into triggerers (templated).
1853 extraInitContainers: []
1854 # Mount additional volumes into triggerer. It can be templated like in the following example:
1856 # - name: my-templated-extra-volume
1858 # secretName: '{{ include "my_secret_template" . }}'
1862 # extraVolumeMounts:
1863 # - name: my-templated-extra-volume
1864 # mountPath: "{{ .Values.my_custom_path }}"
1867 extraVolumeMounts: []
1868 # Select certain nodes for airflow triggerer pods.
1871 # default triggerer affinity is:
1873 # preferredDuringSchedulingIgnoredDuringExecution:
1874 # - podAffinityTerm:
1877 # component: triggerer
1878 # topologyKey: kubernetes.io/hostname
1881 topologySpreadConstraints: []
1882 # hostAliases for the triggerer pod
1891 priorityClassName: ~
1892 # annotations for the triggerer deployment
1895 # Labels specific to triggerer objects and pods
1898 # Whether to deploy the Airflow triggerer log groomer sidecar.
1900 # Command to use when running the Airflow triggerer log groomer sidecar (templated).
1902 # Args to use when running the Airflow triggerer log groomer sidecar (templated).
1903 args: ["bash", "/clean-logs"]
1904 # Number of days to retain logs
1906 # frequency to attempt to groom logs, in minutes
1907 frequencyMinutes: 15
1915 # Detailed default security context for logGroomerSidecar for container level
1918 # container level lifecycle hooks
1919 containerLifecycleHooks: {}
1922 # Whether to create init container to wait for db migrations
1925 # Detailed default security context for waitForMigrations for container level
1929 # Allow KEDA autoscaling.
1933 # How often KEDA polls the airflow DB to report new scale requests to the HPA
1935 # How many seconds KEDA will wait before scaling to zero.
1936 # Note that HPA has a separate cooldown period for scale-downs
1938 # Minimum number of triggerers created by keda
1940 # Maximum number of triggerers created by keda
1942 # Specify HPA related options
1944 # horizontalPodAutoscalerConfig:
1947 # stabilizationWindowSeconds: 300
1953 # Query to use for KEDA autoscaling. Must return a single integer.
1955 SELECT ceil(COUNT(*)::decimal / {{ include "triggerer.capacity" . }}) FROM trigger
1956 # Whether to use PGBouncer to connect to the database or not when it is enabled
1957 # This configuration will be ignored if PGBouncer is not enabled
1959# Airflow Dag Processor Config
1962 # Dag Bundle Configuration
1963 # Define Dag bundles in a structured YAML format. This will be automatically
1964 # converted to JSON string format for config.dag_processor.dag_bundle_config_list.
1965 dagBundleConfigList:
1967 classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
1970 # dagBundleConfigList:
1972 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
1974 # git_conn_id: "GITHUB__repo1"
1976 # tracking_ref: "main"
1977 # refresh_interval: 60
1979 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
1981 # git_conn_id: "GITHUB__repo2"
1983 # tracking_ref: "develop"
1984 # refresh_interval: 120
1985 # - name: dags-folder
1986 # classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
1989 # Number of airflow dag processors in the deployment
1991 # Max number of old replicasets to retain
1992 revisionHistoryLimit: ~
1993 # Command to use when running Airflow dag processors (templated).
1995 # Args to use when running Airflow dag processor (templated).
1996 args: ["bash", "-c", "exec airflow dag-processor"]
1997 # Update Strategy for dag processors
2001 maxUnavailable: "50%"
2002 # If the dag processor stops heartbeating for 5 minutes (5*60s) kill the
2003 # dag processor and let Kubernetes restart it
2005 initialDelaySeconds: 10
2010 # Create ServiceAccount
2012 # default value is true
2013 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2014 automountServiceAccountToken: true
2015 # Specifies whether a ServiceAccount should be created
2017 # The name of the ServiceAccount to use.
2018 # If not set and create is true, a name is generated using the release name
2020 # Annotations to add to dag processor kubernetes service account.
2022 # Dag processor pod disruption budget
2023 podDisruptionBudget:
2027 # minAvailable and maxUnavailable are mutually exclusive
2030 # When not set, the values defined in the global securityContext will be used
2036 # Detailed default security context for dagProcessor for container and pod level
2040 # container level lifecycle hooks
2041 containerLifecycleHooks: {}
2050 # Grace period for dag processor to finish after SIGTERM is sent from kubernetes
2051 terminationGracePeriodSeconds: 60
2052 # This setting tells kubernetes that its ok to evict
2053 # when it wants to scale a node down.
2055 # Launch additional containers into dag processor (templated).
2057 # Add additional init containers into dag processors (templated).
2058 extraInitContainers: []
2059 # Mount additional volumes into dag processor. It can be templated like in the following example:
2061 # - name: my-templated-extra-volume
2063 # secretName: '{{ include "my_secret_template" . }}'
2067 # extraVolumeMounts:
2068 # - name: my-templated-extra-volume
2069 # mountPath: "{{ .Values.my_custom_path }}"
2072 extraVolumeMounts: []
2073 # Select certain nodes for airflow dag processor pods.
2076 # default dag processor affinity is:
2078 # preferredDuringSchedulingIgnoredDuringExecution:
2079 # - podAffinityTerm:
2082 # component: dag-processor
2083 # topologyKey: kubernetes.io/hostname
2086 topologySpreadConstraints: []
2087 priorityClassName: ~
2088 # annotations for the dag processor deployment
2092 # Whether to deploy the Airflow dag processor log groomer sidecar.
2094 # Command to use when running the Airflow dag processor log groomer sidecar (templated).
2096 # Args to use when running the Airflow dag processor log groomer sidecar (templated).
2097 args: ["bash", "/clean-logs"]
2098 # Number of days to retain logs
2100 # frequency to attempt to groom logs, in minutes
2101 frequencyMinutes: 15
2113 # Whether to create init container to wait for db migrations
2116 # Detailed default security context for waitForMigrations for container level
2119 # Labels specific to dag processor objects
2121 # Environment variables to add to dag processor container
2126 # If True, and using CeleryExecutor/CeleryKubernetesExecutor, will deploy flower app.
2129 initialDelaySeconds: 10
2131 failureThreshold: 10
2134 initialDelaySeconds: 10
2136 failureThreshold: 10
2138 # Wait for at most 1 minute (6*10s) for the flower container to startup.
2139 # livenessProbe kicks in after the first successful startupProbe
2141 initialDelaySeconds: 0
2145 # Max number of old replicasets to retain
2146 revisionHistoryLimit: ~
2147 # Command to use when running flower (templated).
2149 # Args to use when running flower (templated).
2153 # The format below is necessary to get `helm lint` happy
2156 airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "celery flower" "flower" }}
2157 # Additional network policies as needed (Deprecated - renamed to `flower.networkPolicy.ingress.from`)
2158 extraNetworkPolicies: []
2161 # Peers for flower NetworkPolicy ingress
2163 # Ports for flower NetworkPolicy ingress (if ingressPeers is set)
2165 - port: "{{ .Values.ports.flowerUI }}"
2174 # When not set, the values defined in the global securityContext will be used
2180 # Detailed default security context for flower for container and pod level
2184 # container level lifecycle hooks
2185 containerLifecycleHooks: {}
2186 # Create ServiceAccount
2188 # default value is true
2189 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2190 automountServiceAccountToken: true
2191 # Specifies whether a ServiceAccount should be created
2193 # The name of the ServiceAccount to use.
2194 # If not set and create is true, a name is generated using the release name
2196 # Annotations to add to worker kubernetes service account.
2198 # A secret containing the connection
2200 # Add custom annotations to the flower secret
2201 secretAnnotations: {}
2202 # Else, if username and password are set, create secret from username and password
2207 ## service annotations
2211 port: "{{ .Values.ports.flowerUI }}"
2212 # To change the port used to access flower:
2216 # targetPort: flower-ui
2218 ## Limit load balancer source ips to list of CIDRs
2219 # loadBalancerSourceRanges:
2221 loadBalancerSourceRanges: []
2222 # Launch additional containers into the flower pods.
2224 # Mount additional volumes into the flower pods. It can be templated like in the following example:
2226 # - name: my-templated-extra-volume
2228 # secretName: '{{ include "my_secret_template" . }}'
2232 # extraVolumeMounts:
2233 # - name: my-templated-extra-volume
2234 # mountPath: "{{ .Values.my_custom_path }}"
2237 extraVolumeMounts: []
2238 # Select certain nodes for airflow flower pods.
2242 topologySpreadConstraints: []
2243 priorityClassName: ~
2244 # annotations for the flower deployment
2247 # Labels specific to flower objects and pods
2252 # Add custom annotations to the statsd configmap
2253 configMapAnnotations: {}
2255 # Max number of old replicasets to retain
2256 revisionHistoryLimit: ~
2257 # Arguments for StatsD exporter command.
2258 args: ["--statsd.mapping-config=/etc/statsd-exporter/mappings.yml"]
2259 # If you ever need to fully override the entire args list, you can
2260 # supply your own array here; if set, all below flag-specific values
2261 # (mappingConfig, cache-size, cache-type, ttl) are ignored.
2263 # - "--statsd.cache-size=1000"
2264 # - "--statsd.cache-type=random"
2266 # -------------------------------------------------------------------
2268 # Path in the container to the mapping config file.
2270 # Maximum number of metric‐mapping entries to keep in cache.
2271 # When you send more distinct metric names than this, older entries
2272 # will be evicted according to cacheType.
2275 # Metrics Eviction policy for the mapping cache.
2276 # - lru → Least‐Recently‐Used eviction
2277 # - random → Random eviction
2280 # Per‐metric time‐to‐live. When set to a non‐zero duration, any metric
2281 # series that hasn't received an update in this interval will be dropped
2282 # from the exported /metrics output.
2283 # Format: Go duration string (e.g. "30s", "5m", "1h")
2284 # Default: "0s" (disabled, never expires)
2286 # Annotations to add to the StatsD Deployment.
2288 # Grace period for statsd to finish after SIGTERM is sent from kubernetes
2289 terminationGracePeriodSeconds: 30
2290 # Create ServiceAccount
2292 # default value is true
2293 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2294 automountServiceAccountToken: true
2295 # Specifies whether a ServiceAccount should be created
2297 # The name of the ServiceAccount to use.
2298 # If not set and create is true, a name is generated using the release name
2300 # Annotations to add to worker kubernetes service account.
2303 # When not set, `statsd.uid` will be used
2305 # (deprecated, use `securityContexts` instead)
2311 # Detailed default security context for statsd deployments for container and pod level
2315 # container level lifecycle hooks
2316 containerLifecycleHooks: {}
2317 # Additional network policies as needed
2318 extraNetworkPolicies: []
2328 extraAnnotations: {}
2329 # Select certain nodes for StatsD pods.
2333 topologySpreadConstraints: []
2334 priorityClassName: ~
2335 # Additional mappings for StatsD exporter.
2336 # If set, will merge default mapping and extra mappings, default mapping has higher priority.
2337 # So, if you want to change some default mapping, please use `overrideMappings`
2339 # Override mappings for StatsD exporter.
2340 # If set, will ignore setting item in default and `extraMappings`.
2341 # So, If you use it, ensure all mapping item contains in it.
2342 overrideMappings: []
2344 # Labels specific to statsd objects and pods
2346 # Environment variables to add to statsd container
2352 # Number of PgBouncer replicas to run in Deployment
2354 # Max number of old replicasets to retain
2355 revisionHistoryLimit: ~
2356 # Command to use for PgBouncer(templated).
2357 command: ["pgbouncer", "-u", "nobody", "/etc/pgbouncer/pgbouncer.ini"]
2358 # Args to use for PgBouncer(templated).
2360 auth_type: scram-sha-256
2361 auth_file: /etc/pgbouncer/users.txt
2362 # Whether to mount the config secret files at a default location (/etc/pgbouncer/*).
2363 # Can be skipped to allow for other means to get the values, e.g. secrets provider class.
2364 mountConfigSecret: true
2365 # annotations to be added to the PgBouncer deployment
2368 # Add custom annotations to the pgbouncer certificates secret
2369 certificatesSecretAnnotations: {}
2370 # Create ServiceAccount
2372 # default value is true
2373 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2374 automountServiceAccountToken: true
2375 # Specifies whether a ServiceAccount should be created
2377 # The name of the ServiceAccount to use.
2378 # If not set and create is true, a name is generated using the release name
2380 # Annotations to add to worker kubernetes service account.
2382 # Additional network policies as needed
2383 extraNetworkPolicies: []
2385 metadataPoolSize: 10
2386 resultBackendPoolSize: 5
2387 # Maximum clients that can connect to PgBouncer (higher = more file descriptors)
2389 # supply the name of existing secret with pgbouncer.ini and users.txt defined
2390 # you can load them to a k8s secret like the one below
2394 # name: pgbouncer-config-secret
2396 # pgbouncer.ini: <base64_encoded pgbouncer.ini file content>
2397 # users.txt: <base64_encoded users.txt file content>
2400 # configSecretName: pgbouncer-config-secret
2403 # Add custom annotations to the pgbouncer config secret
2404 configSecretAnnotations: {}
2405 # PgBouncer pod disruption budget
2406 podDisruptionBudget:
2410 # minAvailable and maxUnavailable are mutually exclusive
2413 # Limit the resources to PgBouncer.
2414 # When you specify the resource request the k8s scheduler uses this information to decide which node to
2415 # place the Pod on. When you specify a resource limit for a Container, the kubelet enforces those limits so
2416 # that the running container is not allowed to use more of that resource than the limit you set.
2417 # See: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
2429 extraAnnotations: {}
2431 # https://www.pgbouncer.org/config.html
2433 logDisconnections: 0
2441 # Add extra PgBouncer ini configuration in the databases section:
2442 # https://www.pgbouncer.org/config.html#section-databases
2444 extraIniResultBackend: ~
2445 # Add extra general PgBouncer ini configuration: https://www.pgbouncer.org/config.html
2447 # Mount additional volumes into pgbouncer. It can be templated like in the following example:
2449 # - name: my-templated-extra-volume
2451 # secretName: '{{ include "my_secret_template" . }}'
2455 # extraVolumeMounts:
2456 # - name: my-templated-extra-volume
2457 # mountPath: "{{ .Values.my_custom_path }}"
2459 # Volumes apply to all pgbouncer containers, while volume mounts apply to the pgbouncer
2460 # container itself. Metrics exporter container has its own mounts.
2462 extraVolumeMounts: []
2463 # Launch additional containers into pgbouncer.
2465 # Select certain nodes for PgBouncer pods.
2469 topologySpreadConstraints: []
2470 priorityClassName: ~
2472 # Detailed default security context for pgbouncer for container level
2476 # container level lifecycle hooks
2477 containerLifecycleHooks:
2480 # Allow existing queries clients to complete within 120 seconds
2481 command: ["/bin/sh", "-c", "killall -INT pgbouncer && sleep 120"]
2482 metricsExporterSidecar:
2491 # supply the name of existing secret with PGBouncer connection URI containing
2492 # stats user and password.
2493 # you can load them to a k8s secret like the one below
2497 # name: pgbouncer-stats-secret
2499 # connection: postgresql://<stats user>:<password>@127.0.0.1:6543/pgbouncer?<connection params>
2502 # statsSecretName: pgbouncer-stats-secret
2505 # Key containing the PGBouncer connection URI, defaults to `connection` if not defined
2507 # Add custom annotations to the pgbouncer stats secret
2508 statsSecretAnnotations: {}
2509 # Detailed default security context for metricsExporterSidecar for container level
2512 # container level lifecycle hooks
2513 containerLifecycleHooks: {}
2515 initialDelaySeconds: 10
2519 initialDelaySeconds: 10
2522 # Mount additional volumes into the metrics exporter. It can be templated like in the following example:
2523 # extraVolumeMounts:
2524 # - name: my-templated-extra-volume
2525 # mountPath: "{{ .Values.my_custom_path }}"
2527 extraVolumeMounts: []
2528 # Labels specific to pgbouncer objects and pods
2530 # Environment variables to add to pgbouncer container
2532# Configuration for the redis provisioned by the chart
2535 terminationGracePeriodSeconds: 600
2536 # Annotations for Redis Statefulset
2538 # Create ServiceAccount
2540 # default value is true
2541 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2542 automountServiceAccountToken: true
2543 # Specifies whether a ServiceAccount should be created
2545 # The name of the ServiceAccount to use.
2546 # If not set and create is true, a name is generated using the release name
2548 # Annotations to add to worker kubernetes service account.
2551 # service type, default: ClusterIP
2553 # If using ClusterIP service type, custom IP address can be specified
2555 # If using NodePort service type, custom node port can be specified
2558 # Enable persistent volumes
2560 # Volume size for worker StatefulSet
2562 # If using a custom storageClass, pass name ref to all statefulSets here
2564 # Annotations to add to redis volumes
2566 # the name of an existing PVC to use
2568 persistentVolumeClaimRetentionPolicy: ~
2569 # persistentVolumeClaimRetentionPolicy:
2570 # whenDeleted: Delete
2571 # whenScaled: Delete
2572 # Configuration for empty dir volume (if redis.persistence.enabled == false)
2584 # If set use as redis secret. Make sure to also set data.brokerUrlSecretName value.
2585 passwordSecretName: ~
2586 # Else, if password is set, create secret with it,
2587 # Otherwise a new password will be generated on install
2588 # Note: password can only be set during install, not upgrade.
2590 # Add custom annotations to the redis password secret
2591 passwordSecretAnnotations: {}
2592 # This setting tells kubernetes that its ok to evict
2593 # when it wants to scale a node down.
2595 # Select certain nodes for redis pods.
2599 topologySpreadConstraints: []
2600 priorityClassName: ~
2601 # Set to 0 for backwards-compatibility
2603 # If not set, `redis.uid` will be used
2608 # Detailed default security context for redis for container and pod level
2612 # container level lifecycle hooks
2613 containerLifecycleHooks: {}
2614 # Labels specific to redis objects and pods
2617# Auth secret for a private registry (Deprecated - use `imagePullSecrets` instead)
2618# This is used if pulling airflow images from a private registry
2620 # Name of the Kubernetes secret containing Base64 encoded credentials to connect to a private registry
2621 # (Deprecated - renamed to `imagePullSecrets`).
2623 # Credentials to connect to a private registry, these will get Base64 encoded and stored in a secret
2624 # (Deprecated - create manually the credentials secret and add to `imagePullSecrets` instead).
2632# Elasticsearch logging configuration
2634 # Enable elasticsearch task logging
2636 # A secret containing the connection
2638 # Add custom annotations to the elasticsearch secret
2639 secretAnnotations: {}
2640 # Or an object representing the connection
2649# OpenSearch logging configuration
2651 # Enable opensearch task logging
2653 # A secret containing the connection
2655 # Or an object representing the connection
2664# All ports used by chart
2674 pgbouncerScrape: 9127
2676# Define any ResourceQuotas for namespace
2678# Define default/max/min values for pods and containers in namespace
2680# This runs as a CronJob to cleanup old pods spawned by the KubernetesExecutor.
2681# It is required to have KubernetesExecutor enabled.
2684 # Run every 15 minutes (templated).
2685 schedule: "*/15 * * * *"
2686 # To select a random-ish, deterministic starting minute between 3 and 12 inclusive for each release:
2687 # '{{- add 3 (regexFind ".$" (adler32sum .Release.Name)) -}}-59/15 * * * *'
2688 # To select the last digit of unix epoch time as the starting minute on each deploy:
2689 # '{{- now | unixEpoch | trunc -1 -}}-59/* * * * *'
2691 # Command to use when running the cleanup cronjob (templated).
2693 # Args to use when running the cleanup cronjob (templated).
2694 args: ["bash", "-c", "exec airflow kubernetes cleanup-pods --namespace={{ .Release.Namespace }}"]
2695 # jobAnnotations are annotations on the cleanup CronJob
2697 # Select certain nodes for airflow cleanup pods.
2701 topologySpreadConstraints: []
2702 priorityClassName: ~
2704 # Labels specific to cleanup objects and pods
2714 # Create ServiceAccount
2716 # default value is true
2717 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2718 automountServiceAccountToken: true
2719 # Specifies whether a ServiceAccount should be created
2721 # The name of the ServiceAccount to use.
2722 # If not set and create is true, a name is generated using the release name
2724 # Annotations to add to cleanup cronjob kubernetes service account.
2726 # When not set, the values defined in the global securityContext will be used
2731 # Detailed default security context for cleanup for container level
2735 # container level lifecycle hooks
2736 containerLifecycleHooks: {}
2737 # Specify history limit
2738 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
2739 failedJobsHistoryLimit: ~
2740 successfulJobsHistoryLimit: ~
2741# This runs as a CronJob to cleanup database for old entries.
2744 applyCustomEnv: true
2745 # Run every week on Sunday at midnight (templated).
2746 schedule: "0 0 * * 0"
2747 # Command to use when running the database cleanup cronjob (templated).
2750 # Args to use when running the database cleanup cronjob (templated).
2754 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 }}
2755 # Number of days to retain entries in the metadata database.
2757 # Don't preserve purged records in an archive table
2759 # Table names to perform maintenance on. Supported values in:
2760 # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean
2762 # Maximum number of rows to delete or archive in a single transaction
2764 # Make logging output more verbose
2766 # jobAnnotations are annotations on the database cleanup CronJob
2768 # Select certain nodes for airflow database cleanup pods.
2772 topologySpreadConstraints: []
2773 priorityClassName: ~
2775 # Labels specific to database cleanup objects and pods
2785 # Create ServiceAccount
2787 # default value is true
2788 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2789 automountServiceAccountToken: true
2790 # Specifies whether a ServiceAccount should be created
2792 # The name of the ServiceAccount to use.
2793 # If not set and create is true, a name is generated using the release name
2795 # Annotations to add to database cleanup cronjob kubernetes service account.
2798 # Detailed default security context for database cleanup for container level
2802 # container level lifecycle hooks
2803 containerLifecycleHooks: {}
2804 # Specify history limit
2805 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
2806 failedJobsHistoryLimit: 1
2807 successfulJobsHistoryLimit: 1
2808# Configuration for postgresql subchart
2809# Uses bitnamilegacy images to avoid Bitnami licensing restrictions
2810# Not recommended for production - use external database instead
2814 repository: bitnamilegacy/postgresql
2815 tag: "16.1.0-debian-11-r15"
2817 enablePostgresUser: true
2818 postgresPassword: postgres
2821# Config settings to go into the mounted airflow.cfg
2823# Please note that these values are passed through the `tpl` function, so are
2824# all subject to being rendered as go templates. If you need to include a
2825# literal `{{` in a value, it must be expressed like this:
2827# a: '{{ "{{ not a template }}" }}'
2829# Do not set config containing secrets via plain text values, use Env Var or k8s secret object
2830# yamllint disable rule:line-length
2833 dags_folder: '{{ include "airflow_dags" . }}'
2834 # This is ignored when used with the official Docker image
2835 load_examples: 'False'
2836 executor: '{{ .Values.executor }}'
2837 # For Airflow 1.10, backward compatibility; moved to [logging] in 2.0
2838 colored_console_log: 'False'
2839 remote_logging: '{{- ternary "True" "False" (or .Values.elasticsearch.enabled .Values.opensearch.enabled) }}'
2840 auth_manager: "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
2842 remote_logging: '{{- ternary "True" "False" (or .Values.elasticsearch.enabled .Values.opensearch.enabled) }}'
2843 colored_console_log: 'False'
2845 statsd_on: '{{ ternary "True" "False" .Values.statsd.enabled }}'
2847 statsd_prefix: airflow
2848 statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
2850 enable_proxy_fix: 'True'
2853 enable_proxy_fix: 'True'
2857 flower_url_prefix: '{{ ternary "" .Values.ingress.flower.path (eq .Values.ingress.flower.path "/") }}'
2858 worker_concurrency: 16
2859 sync_parallelism: '{{ include "cpu_count" (((.Values.scheduler).resources).limits).cpu }}'
2861 standalone_dag_processor: '{{ ternary "True" "False" (or (semverCompare ">=3.0.0" .Values.airflowVersion) (.Values.dagProcessor.enabled | default false)) }}'
2862 # statsd params included for Airflow 1.10 backward compatibility; moved to [metrics] in 2.0
2863 statsd_on: '{{ ternary "True" "False" .Values.statsd.enabled }}'
2865 statsd_prefix: airflow
2866 statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
2867 # `run_duration` included for Airflow 1.10 backward compatibility; removed in 2.0.
2870 # Dag bundle configuration list in JSON string format.
2871 # This is automatically generated from .Values.dagProcessor.dagBundleConfigList using the dag_bundle_config_list helper function.
2872 # Deprecated: Direct override via config.dag_processor.dag_bundle_config_list is deprecated.
2873 # Use dagProcessor.dagBundleConfigList instead.
2874 dag_bundle_config_list: '{{ include "dag_bundle_config_list" . }}'
2877 log_id_template: "{dag_id}_{task_id}_{execution_date}_{try_number}"
2878 elasticsearch_configs:
2881 retry_timeout: 'True'
2883 keytab: '{{ .Values.kerberos.keytabPath }}'
2884 reinit_frequency: '{{ .Values.kerberos.reinitFrequency }}'
2885 principal: '{{ .Values.kerberos.principal }}'
2886 ccache: '{{ .Values.kerberos.ccacheMountPath }}/{{ .Values.kerberos.ccacheFileName }}'
2887 celery_kubernetes_executor:
2888 kubernetes_queue: 'kubernetes'
2889 # The `kubernetes` section is deprecated in Airflow >= 2.5.0 due to an airflow.cfg schema change.
2890 # The `kubernetes` section can be removed once the helm chart no longer supports Airflow < 2.5.0.
2892 namespace: '{{ .Release.Namespace }}'
2893 # The following `airflow_` entries are for Airflow 1, and can be removed when it is no longer supported.
2894 airflow_configmap: '{{ include "airflow_config" . }}'
2895 airflow_local_settings_configmap: '{{ include "airflow_config" . }}'
2896 pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
2897 worker_container_repository: '{{ .Values.images.airflow.repository | default .Values.defaultAirflowRepository }}'
2898 worker_container_tag: '{{ .Values.images.airflow.tag | default .Values.defaultAirflowTag }}'
2899 multi_namespace_mode: '{{ ternary "True" "False" .Values.multiNamespaceMode }}'
2900 # The `kubernetes_executor` section duplicates the `kubernetes` section in Airflow >= 2.5.0 due to an airflow.cfg schema change.
2901 kubernetes_executor:
2902 namespace: '{{ .Release.Namespace }}'
2903 pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
2904 worker_container_repository: '{{ .Values.images.airflow.repository | default .Values.defaultAirflowRepository }}'
2905 worker_container_tag: '{{ .Values.images.airflow.tag | default .Values.defaultAirflowTag }}'
2906 multi_namespace_mode: '{{ ternary "True" "False" .Values.multiNamespaceMode }}'
2907# yamllint enable rule:line-length
2909# Whether Airflow can launch workers and/or pods in multiple namespaces
2910# If true, it creates ClusterRole/ClusterRolebinding (with access to entire cluster)
2911multiNamespaceMode: false
2912# `podTemplate` is a templated string which overwrites the content of `pod_template_file.yaml` used by
2913# KubernetesExecutor. The default `podTemplate` will use `workers` configuration parameters
2914# (e.g. `workers.resources`). As such, you normally won't need to override this directly, however,
2915# you can still provide a completely custom `pod_template_file.yaml` if desired.
2916# If not set, a default one is created using `files/pod-template-file.kubernetes-helm-yaml`.
2918# The following example is NOT functional, but meant to be illustrative of how you can provide a custom
2919# `pod_template_file`. You're better off starting with the default in
2920# `files/pod-template-file.kubernetes-helm-yaml` and modifying from there.
2921# We will set `priorityClassName` in this example:
2926# name: placeholder-name
2930# release: {{ .Release.Name }}
2932# priorityClassName: high-priority
2939 # Where dags volume will be mounted. Works for both persistence and gitSync.
2940 # If not specified, dags mount path will be set to $AIRFLOW_HOME/dags
2943 # Annotations for dags PVC
2945 # Enable persistent volume for storing dags
2947 # Volume size for dags
2949 # If using a custom storageClass, pass name here
2951 # access mode of the persistent volume
2952 accessMode: ReadWriteOnce
2953 ## the name of an existing PVC to use
2955 ## optional subpath for dag volume mount
2959 # git repo clone url
2960 # ssh example: git@github.com:apache/airflow.git
2961 # https example: https://github.com/apache/airflow.git
2962 repo: https://github.com/apache/airflow.git
2965 # The git revision (branch, tag, or hash) to check out, v4 only
2968 # the number of consecutive failures allowed before aborting
2970 # subpath within the repo where dags are located
2971 # should be "" if dags are at repo root
2972 subPath: "tests/dags"
2973 # if your repo needs a user name password
2974 # you can load them to a k8s secret like the one below
2979 # name: git-credentials
2982 # GIT_SYNC_USERNAME: <base64_encoded_git_username>
2983 # GIT_SYNC_PASSWORD: <base64_encoded_git_password>
2985 # GITSYNC_USERNAME: <base64_encoded_git_username>
2986 # GITSYNC_PASSWORD: <base64_encoded_git_password>
2987 # and specify the name of the secret below
2989 # credentialsSecret: git-credentials
2992 # If you are using an ssh clone url, you can load
2993 # the ssh private key to a k8s secret like the one below
2998 # name: airflow-ssh-secret
3000 # # key needs to be gitSshKey
3001 # gitSshKey: <base64_encoded_data>
3002 # and specify the name of the secret below
3003 # sshKeySecret: airflow-ssh-secret
3005 # Or set sshKeySecret with your key
3007 # -----BEGIN {OPENSSH PRIVATE KEY}-----
3009 # -----END {OPENSSH PRIVATE KEY}-----
3011 # If you are using an ssh private key, you can additionally
3012 # specify the content of your known_hosts file, example:
3015 # <host1>,<ip1> <key1>
3016 # <host2>,<ip2> <key2>
3018 # interval between git sync attempts in seconds
3019 # high values are more likely to cause DAGs to become out of sync between different components
3020 # low values cause more traffic to the remote git repository
3021 # Go-style duration string (e.g. "100ms" or "0.1s" = 100ms).
3022 # For backwards compatibility, wait will be used if it is specified.
3025 # add variables from secret into gitSync containers, such proxy-config
3029 # name: 'proxy-config'
3031 containerName: git-sync
3033 # When not set, the values defined in the global securityContext will be used
3040 # container level lifecycle hooks
3041 containerLifecycleHooks: {}
3044 # Mount additional volumes into git-sync. It can be templated like in the following example:
3045 # extraVolumeMounts:
3046 # - name: my-templated-extra-volume
3047 # mountPath: "{{ .Values.my_custom_path }}"
3049 extraVolumeMounts: []
3051 # Supported env vars for gitsync can be found at https://github.com/kubernetes/git-sync
3055 # Configuration for empty dir volume
3067 # Configuration for empty dir volume (if logs.persistence.enabled == false)
3072 # Enable persistent volume for storing logs
3074 # Volume size for logs
3076 # Annotations for the logs PVC
3078 # If using a custom storageClass, pass name here
3080 ## the name of an existing PVC to use
3082 ## the subpath of the existing PVC to use