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:1d16d03c46fe5086b7ec90a8653ad524fcf5d1d110248e5980ef0c9ac6a65561
64# Airflow version (Used to make some decisions based on Airflow Version being deployed)
65# Version 2.11.0 and above is supported.
66airflowVersion: "3.1.8"
72 # Specifying digest takes precedence over tag.
74 pullPolicy: IfNotPresent
75 # To avoid images with user code, you can turn this to 'true' and
76 # all the 'run-airflow-migrations' and 'wait-for-airflow-migrations' containers/jobs
77 # will use the images from 'defaultAirflowRepository:defaultAirflowTag' values
78 # to run and wait for DB migrations .
79 useDefaultImageForMigration: false
80 # timeout (in seconds) for airflow-migrations to complete
81 migrationsWaitTimeout: 60
83 # Note that `images.pod_template.repository` and `images.pod_template.tag` parameters
84 # can be overridden in `config.kubernetes` section. So for these parameters to have effect
85 # `config.kubernetes.worker_container_repository` and `config.kubernetes.worker_container_tag`
89 pullPolicy: IfNotPresent
91 repository: cgr.dev/chainguard-private/flower
92 tag: latest@sha256:2287358ff8f4cc4a6746b80b8494484088a2eaa9083edcde5eb58a431b04d6b7
93 pullPolicy: IfNotPresent
95 repository: cgr.dev/chainguard-private/prometheus-statsd-exporter
96 tag: latest@sha256:7257ea5e7e5a01e2943650a7eed4e4ab47bf9b7fd5f6bc437dd795980e7a2f39
97 pullPolicy: IfNotPresent
99 repository: cgr.dev/chainguard-private/redis
100 # Redis is limited to 7.2-bookworm due to licencing change
101 # https://redis.io/blog/redis-adopts-dual-source-available-licensing/
102 tag: latest@sha256:fe82f37b4f5c8e4874fff7db3babdb0e5e5ec2c863598e40fa28c10459da7a84
103 pullPolicy: IfNotPresent
105 repository: cgr.dev/chainguard-private/pgbouncer
106 tag: latest@sha256:b7f0be9d3aa7ad63afe334c8d589c94bead7f8e9e883c3212885b3146b627ddc
107 pullPolicy: IfNotPresent
109 repository: cgr.dev/chainguard-private/prometheus-pgbouncer-exporter
110 tag: latest@sha256:7e84d4fbb4c6ef6c10bb0c140d63f3870509c4e7eef41612d3249339d69d7809
111 pullPolicy: IfNotPresent
113 repository: cgr.dev/chainguard-private/git-sync
114 tag: latest@sha256:a9cf7fe5d5a73dc5e603152f3995163fabcfa1e476e2a082e23c9ccd037a6386
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# List of existing Kubernetes secrets containing Base64 encoded credentials to connect to private
125# registries. Items can be either strings or {name: secret} objects.
127# Ingress configuration
129 # Enable all ingress resources
130 # (deprecated - use ingress.web.enabled, ingress.apiServer.enabled and ingress.flower.enabled)
132 # Configs for the Ingress of the API Server (Airflow 3+)
134 # Enable API Server ingress resource
136 # Annotations for the API Server Ingress
138 # The path for the API Server Ingress
140 # The pathType for the above path (used only with Kubernetes v1.19 and above)
141 pathType: "ImplementationSpecific"
142 # The hostname for the API Server Ingress (Deprecated - renamed to `ingress.apiServer.hosts`)
144 # The hostnames or hosts configuration for the API Server Ingress
146 # # The hostname for the web Ingress (templated)
148 # # configs for API Server Ingress TLS
150 # # Enable TLS termination for the API Server Ingress
152 # # the name of a pre-created Secret containing a TLS private key and certificate
155 # The Ingress Class for the API Server Ingress (used only with Kubernetes v1.19 and above)
157 # configs for API Server Ingress TLS (Deprecated - renamed to `ingress.apiServer.hosts[*].tls`)
159 # Enable TLS termination for the API Server Ingress
161 # the name of a pre-created Secret containing a TLS private key and certificate
163 # HTTP paths to add to the API Server Ingress before the default path
165 # Http paths to add to the API Server Ingress after the default path
167 # Configs for the Ingress of the web Service (Airflow <3.0.0)
169 # Enable web ingress resource
171 # Annotations for the web Ingress
173 # The path for the web Ingress
175 # The pathType for the above path (used only with Kubernetes v1.19 and above)
176 pathType: "ImplementationSpecific"
177 # The hostname for the web Ingress (Deprecated - renamed to `ingress.web.hosts`)
179 # The hostnames or hosts configuration for the web Ingress
181 # # The hostname for the web Ingress (templated)
183 # # configs for web Ingress TLS
185 # # Enable TLS termination for the web Ingress
187 # # the name of a pre-created Secret containing a TLS private key and certificate
190 # The Ingress Class for the web Ingress (used only with Kubernetes v1.19 and above)
192 # configs for web Ingress TLS (Deprecated - renamed to `ingress.web.hosts[*].tls`)
194 # Enable TLS termination for the web Ingress
196 # the name of a pre-created Secret containing a TLS private key and certificate
198 # HTTP paths to add to the web Ingress before the default path
200 # Http paths to add to the web Ingress after the default path
202 # Configs for the Ingress of the flower Service
204 # Enable web ingress resource
206 # Annotations for the flower Ingress
208 # The path for the flower Ingress
210 # The pathType for the above path (used only with Kubernetes v1.19 and above)
211 pathType: "ImplementationSpecific"
212 # The hostname for the flower Ingress (Deprecated - renamed to `ingress.flower.hosts`)
214 # The hostnames or hosts configuration for the flower Ingress
216 # # The hostname for the flower Ingress (templated)
219 # # Enable TLS termination for the flower Ingress
221 # # the name of a pre-created Secret containing a TLS private key and certificate
224 # The Ingress Class for the flower Ingress (used only with Kubernetes v1.19 and above)
226 # configs for flower Ingress TLS (Deprecated - renamed to `ingress.flower.hosts[*].tls`)
228 # Enable TLS termination for the flower Ingress
230 # the name of a pre-created Secret containing a TLS private key and certificate
232 # Configs for the Ingress of the statsd Service
234 # Enable web ingress resource
236 # Annotations for the statsd Ingress
238 # The path for the statsd Ingress
240 # The pathType for the above path (used only with Kubernetes v1.19 and above)
241 pathType: "ImplementationSpecific"
242 # The hostname for the statsd Ingress (Deprecated - renamed to `ingress.statsd.hosts`)
244 # The hostnames or hosts configuration for the statsd Ingress
246 # # The hostname for the statsd Ingress (templated)
249 # # Enable TLS termination for the statsd Ingress
251 # # the name of a pre-created Secret containing a TLS private key and certificate
254 # The Ingress Class for the statsd Ingress (used only with Kubernetes v1.19 and above)
256 # Configs for the Ingress of the pgbouncer Service
258 # Enable web ingress resource
260 # Annotations for the pgbouncer Ingress
262 # The path for the pgbouncer Ingress
264 # The pathType for the above path (used only with Kubernetes v1.19 and above)
265 pathType: "ImplementationSpecific"
266 # The hostname for the pgbouncer Ingress (Deprecated - renamed to `ingress.pgbouncer.hosts`)
268 # The hostnames or hosts configuration for the pgbouncer Ingress
270 # # The hostname for the statsd Ingress (templated)
273 # # Enable TLS termination for the pgbouncer Ingress
275 # # the name of a pre-created Secret containing a TLS private key and certificate
278 # The Ingress Class for the pgbouncer Ingress (used only with Kubernetes v1.19 and above)
280# Network policy configuration
282 # Enabled network policies
284# Extra annotations to apply to all
285# Airflow pods (templated)
286airflowPodAnnotations: {}
287# Extra annotations to apply to
288# main Airflow configmap
289airflowConfigAnnotations: {}
290# `airflow_local_settings` file as a string (templated).
291airflowLocalSettings: |-
292 {{- if semverCompare "<3.0.0" .Values.airflowVersion }}
293 {{- if not (or .Values.webserverSecretKey .Values.webserverSecretKeySecretName) }}
294 from airflow.www.utils import UIAlert
296 DASHBOARD_UIALERTS = [
298 'Usage of a dynamic webserver secret key detected. We recommend a static webserver secret key instead.'
300 '"https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#webserver-secret-key" '
301 'target="_blank" rel="noopener noreferrer">'
302 'Helm Chart Production Guide</a> for more details.',
310# Enable RBAC (default on most clusters these days)
312 # Specifies whether RBAC resources should be created
314 createSCCRoleBinding: false
316# One or multiple of: LocalExecutor, CeleryExecutor, KubernetesExecutor
317# For Airflow <3.0, LocalKubernetesExecutor and CeleryKubernetesExecutor are also supported.
318# Specify executors in a prioritized list to leverage multiple execution environments as needed:
319# https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/index.html#using-multiple-executors-concurrently
320executor: "CeleryExecutor"
321# If this is true and using LocalExecutor/KubernetesExecutor/CeleryKubernetesExecutor, the scheduler's
322# service account will have access to communicate with the api-server and launch pods.
323# If this is true and using CeleryExecutor/KubernetesExecutor/CeleryKubernetesExecutor, the workers
324# will be able to launch pods.
325allowPodLaunching: true
326allowJobLaunching: false
327# Environment variables for all airflow containers
332# Volumes for all airflow containers
334# VolumeMounts for all airflow containers
336# Secrets for all airflow containers
342# Enables selected built-in secrets that are set via environment variables by default.
343# Those secrets are provided by the Helm Chart secrets by default but in some cases you
344# might want to provide some of those variables with _CMD or _SECRET variable, and you should
345# in this case disable setting of those variables by setting the relevant configuration to false.
346enableBuiltInSecretEnvVars:
347 AIRFLOW__CORE__FERNET_KEY: true
348 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: true
349 AIRFLOW_CONN_AIRFLOW_DB: true
350 AIRFLOW__API__SECRET_KEY: true
351 AIRFLOW__API_AUTH__JWT_SECRET: true
352 AIRFLOW__WEBSERVER__SECRET_KEY: true
353 AIRFLOW__CELERY__RESULT_BACKEND: true
354 AIRFLOW__CELERY__BROKER_URL: true
355 AIRFLOW__ELASTICSEARCH__HOST: true
356 AIRFLOW__OPENSEARCH__HOST: true
357# Priority Classes that will be installed by charts.
358# Ideally, there should be an entry for dagProcessor, flower,
359# pgbouncer, scheduler, statsd, triggerer, webserver, worker.
360# The format for priorityClasses is an array with each element having:
361# * name is the name of the priorityClass. Ensure the same name is given to the respective section as well
362# * preemptionPolicy for the priorityClass
363# * value is the preemption value for the priorityClass
365# - name: class1 (if this is for dagProcessor, ensure overriding .Values.dagProcessor.priorityClass too)
366# preemptionPolicy: PreemptLowerPriority
369# preemptionPolicy: Never
372# Extra secrets that will be managed by the chart
373# (You can use them with extraEnv or extraEnvFrom or some of the extraVolumes values).
374# The format for secret data is "key/value" where
375# * key (templated) is the name of the secret that will be created
376# * value: an object with the standard 'data' or 'stringData' key (or both).
377# The value associated with those keys must be a string (templated)
381# '{{ .Release.Name }}-airflow-connections':
384# my.custom.label/v1: my_custom_label_value_1
386# AIRFLOW_CONN_GCP: 'base64_encoded_gcp_conn_string'
387# AIRFLOW_CONN_AWS: 'base64_encoded_aws_conn_string'
389# AIRFLOW_CONN_OTHER: 'other_conn'
390# '{{ .Release.Name }}-other-secret-name-suffix':
395# HTTP_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
396# HTTPS_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080
397# NO_PROXY: "localhost,127.0.0.1,.svc.cluster.local,kubernetes.default.svc"
399# Extra ConfigMaps that will be managed by the chart
400# (You can use them with extraEnv or extraEnvFrom or some of the extraVolumes values).
401# The format for configmap data is "key/value" where
402# * key (templated) is the name of the configmap that will be created
403# * value: an object with the standard 'data' key.
404# The value associated with this keys must be a string (templated)
408# '{{ .Release.Name }}-airflow-variables':
410# my.custom.label/v2: my_custom_label_value_2
412# AIRFLOW_VAR_HELLO_MESSAGE: "Hi!"
413# AIRFLOW_VAR_KUBERNETES_NAMESPACE: "{{ .Release.Namespace }}"
415# Extra env 'items' that will be added to the definition of airflow containers
416# a string is expected (templated).
417# TODO: difference from `env`? This is a templated string. Probably should template `env` and remove this.
421# - name: AIRFLOW__CORE__LOAD_EXAMPLES
424# Extra envFrom 'items' that will be added to the definition of airflow containers
425# A string is expected (templated).
430# name: '{{ .Release.Name }}-airflow-connections'
432# name: '{{ .Release.Name }}-airflow-variables'
434# Airflow database & redis config
436 # If secret names are provided, use those secrets
437 # These secrets must be created manually, eg:
442 # name: custom-airflow-metadata-secret
445 # connection: base64_encoded_connection_string
446 metadataSecretName: ~
447 resultBackendSecretName: ~
448 brokerUrlSecretName: ~
449 # Otherwise pass connection values in
458 # Add custom annotations to the metadata connection secret
459 secretAnnotations: {}
460 # resultBackendConnection defaults to the same database as metadataConnection
461 resultBackendConnection: ~
462 # Add custom annotations to the result backend connection secret
463 resultBackendConnectionSecretAnnotations: {}
464 # or, you can use a different database
465 # resultBackendConnection:
468 # protocol: postgresql
473 # Note: brokerUrl can only be set during install, not upgrade
475 # Add custom annotations to the broker url secret
476 brokerUrlSecretAnnotations: {}
478# Note: fernetKey can only be set during install, not upgrade
480fernetKeySecretName: ~
481# Add custom annotations to the fernet key secret
482fernetKeySecretAnnotations: {}
483# Flask secret key for Airflow 3+ Api: `[api] secret_key` in airflow.cfg
485# Add custom annotations to the api secret
486apiSecretAnnotations: {}
487apiSecretKeySecretName: ~
488# Secret key used to encode and decode JWTs: `[api_auth] jwt_secret` in airflow.cfg
490# Add custom annotations to the JWT secret
491jwtSecretAnnotations: {}
493# Flask secret key for Airflow <3 Webserver: `[webserver] secret_key` in airflow.cfg
495# Add custom annotations to the webserver secret
496webserverSecretAnnotations: {}
497webserverSecretKeySecretName: ~
498# In order to use kerberos you need to create secret containing the keytab file
499# The secret name should follow naming convention of the application where resources are
500# name {{ .Release-name }}-<POSTFIX>. In case of the keytab file, the postfix is "kerberos-keytab"
501# So if your release is named "my-release" the name of the secret should be "my-release-kerberos-keytab"
503# The Keytab content should be available in the "kerberos.keytab" key of the secret.
508# kerberos.keytab: <base64_encoded keytab file content>
512# If you have such keytab file you can do it with similar
514# kubectl create secret generic {{ .Release.name }}-kerberos-keytab --from-file=kerberos.keytab
517# Alternatively, instead of manually creating the secret, it is possible to specify
518# kerberos.keytabBase64Content parameter. This parameter should contain base64 encoded keytab.
522 ccacheMountPath: /var/kerberos-ccache
523 ccacheFileName: cache
524 configPath: /etc/krb5.conf
525 keytabBase64Content: ~
526 keytabPath: /etc/airflow.keytab
527 principal: airflow@FOO.COM
528 reinitFrequency: 3600
530 # This is an example config showing how you can use templating and how "example" config
531 # might look like. It works with the test kerberos server that we are using during integration
532 # testing at Apache Airflow (see `scripts/ci/docker-compose/integration-kerberos.yml` but in
533 # order to make it production-ready you must replace it with your own configuration that
534 # Matches your kerberos deployment. Administrators of your Kerberos instance should
535 # provide the right configuration.
538 default = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_libs.log"
539 kdc = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_kdc.log"
540 admin_server = "FILE:{{ template "airflow_logs_no_quote" . }}/kadmind.log"
543 default_realm = FOO.COM
544 ticket_lifetime = 10h
550 kdc = kdc-server.foo.com
551 admin_server = admin_server.foo.com
553# Airflow Worker Config
555 # Number of Airflow Celery workers (deprecated, use `workers.celery.replicas` instead)
557 # Max number of old Airflow Celery workers ReplicaSets to retain
558 # (deprecated, use `workers.celery.revisionHistoryLimit` instead)
559 revisionHistoryLimit: ~
560 # Command to use when running Airflow Celery workers and using pod-template-file (templated)
561 # (deprecated, use workers.celery.command and/or workers.kubernetes.command instead)
563 # Args to use when running Airflow Celery workers (templated)
564 # (deprecated, use `workers.celery.args` instead)
568 # The format below is necessary to get `helm lint` happy
571 airflow celery worker
572 {{- if and .Values.workers.queue (ne .Values.workers.queue "default") }}
573 {{- " -q " }}{{ .Values.workers.queue }}
575 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
576 # kill the worker and let Kubernetes restart it
577 # (deprecated, use `workers.celery.livenessProbe` section instead)
579 # (deprecated, use `workers.celery.livenessProbe.enabled` instead)
581 # (deprecated, use `workers.celery.livenessProbe.initialDelaySeconds` instead)
582 initialDelaySeconds: 10
583 # (deprecated, use `workers.celery.livenessProbe.timeoutSeconds` instead)
585 # (deprecated, use `workers.celery.livenessProbe.failureThreshold` instead)
587 # (deprecated, use `workers.celery.livenessProbe.periodSeconds` instead)
589 # (deprecated, use `workers.celery.livenessProbe.command` instead)
591 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
592 # (deprecated, use `workers.celery.updateStrategy` instead)
594 # Update Strategy when Airflow Celery worker is deployed as a Deployment
595 # (deprecated, use `workers.celery.strategy` instead)
599 maxUnavailable: "50%"
600 # Allow relaxing ordering guarantees for Airflow Celery worker while preserving its uniqueness and identity
601 # (deprecated, use `workers.celery.podManagementPolicy` instead)
602 # podManagementPolicy: Parallel
604 # When not set, the values defined in the global securityContext will
605 # be used in Airflow Celery workers and pod-template-file
606 # (deprecated, use workers.celery.securityContexts and/or workers.kubernetes.securityContexts instead)
612 # Detailed default security context for the
613 # Airflow Celery workers and pod-template-file on container and pod level
614 # (deprecated, use workers.celery.securityContexts and/or workers.kubernetes.securityContexts instead)
617 # workers.celery.securityContexts.pod and/or
618 # workers.kubernetes.securityContexts.pod
622 # workers.celery.securityContexts.container and/or
623 # workers.kubernetes.securityContexts.container
626 # Container level Lifecycle Hooks definition for
627 # Airflow Celery workers and pods created with pod-template-file
629 # workers.celery.containerLifecycleHooks and/or
630 # workers.kubernetes.containerLifecycleHooks
632 containerLifecycleHooks: {}
633 # Airflow Celery workers pod disruption budget
634 # (deprecated, use `workers.celery.podDisruptionBudget` instead)
636 # (deprecated, use `workers.celery.podDisruptionBudget.enabled` instead)
639 # (deprecated, use `workers.celery.podDisruptionBudget.config` instead)
641 # minAvailable and maxUnavailable are mutually exclusive
642 # (deprecated, use `workers.celery.podDisruptionBudget.config.maxUnavailable` instead)
644 # (deprecated, use `workers.celery.podDisruptionBudget.config.minAvailable` instead)
646 # Create ServiceAccount for Airflow Celery workers and pods created with pod-template-file
648 # default value is true
649 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
650 automountServiceAccountToken: true
651 # Specifies whether a ServiceAccount should be created
653 # The name of the ServiceAccount to use.
654 # If not set and create is true, a name is generated using the release name
656 # Annotations to add to worker kubernetes service account.
658 # Allow KEDA autoscaling for Airflow Celery workers
659 # (deprecated, use `workers.celery.keda` instead)
661 # (deprecated, use `workers.celery.keda.enabled` instead)
663 # (deprecated, use `workers.celery.keda.namespaceLabels` instead)
665 # How often KEDA polls the airflow DB to report new scale requests to the HPA
666 # (deprecated, use `workers.celery.keda.pollingInterval` instead)
668 # How many seconds KEDA will wait before scaling to zero.
669 # Note that HPA has a separate cooldown period for scale-downs
670 # (deprecated, use `workers.celery.keda.cooldownPeriod` instead)
672 # Minimum number of Airflow Celery workers created by keda
673 # (deprecated, use `workers.celery.keda.minReplicaCount` instead)
675 # Maximum number of Airflow Celery workers created by keda
676 # (deprecated, use `workers.celery.keda.maxReplicaCount` instead)
678 # Specify HPA related options
679 # (deprecated, use `workers.celery.keda.advanced` instead)
681 # horizontalPodAutoscalerConfig:
684 # stabilizationWindowSeconds: 300
690 # Query to use for KEDA autoscaling. Must return a single integer.
691 # (deprecated, use `workers.celery.keda.query` instead)
693 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 }}
694 # Weather to use PGBouncer to connect to the database or not when it is enabled
695 # This configuration will be ignored if PGBouncer is not enabled
696 # (deprecated, use `workers.celery.keda.usePgbouncer` instead)
698 # Allow HPA for Airflow Celery workers (KEDA must be disabled)
701 # Minimum number of Airflow Celery workers created by HPA
703 # Maximum number of Airflow Celery workers created by HPA
705 # Specifications for which to use to calculate the desired replica count
712 averageUtilization: 80
713 # Scaling behavior of the target in both Up and Down directions
715 # Persistence volume configuration for Airflow Celery workers
716 # (deprecated, use `workers.celery.persistence` instead)
718 # Enable persistent volumes (deprecated, use `workers.celery.persistence.enabled` instead)
720 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
721 # (deprecated, use `workers.celery.persistence.persistentVolumeClaimRetentionPolicy` instead)
722 persistentVolumeClaimRetentionPolicy: ~
723 # persistentVolumeClaimRetentionPolicy:
724 # whenDeleted: Delete
727 # Volume size for Airflow Celery worker StatefulSet
728 # (deprecated, use `workers.celery.persistence.size` instead)
730 # If using a custom storageClass, pass name ref to all StatefulSets here
731 # (deprecated, use `workers.celery.persistence.storageClassName` instead)
733 # Execute init container to chown log directory.
734 # This is currently only needed in kind, due to usage
735 # of local-path provisioner.
736 # (deprecated, use `workers.celery.persistence.fixPermissions` instead)
737 fixPermissions: false
738 # Annotations to add to Airflow Celery worker volumes
739 # (deprecated, use `workers.celery.persistence.annotations` instead)
741 # Detailed default security context for persistence on container level
742 # (deprecated, use `workers.celery.persistence.securityContexts` instead)
744 # (deprecated, use `workers.celery.persistence.securityContexts.container` instead)
746 # Kerberos sidecar configuration for Airflow Celery workers and pods created with pod-template-file
747 # (deprecated, use workers.celery.kerberosSidecar and/or workers.kubernetes.kerberosSidecar instead)
749 # Enable kerberos sidecar
751 # workers.celery.kerberosSidecar.enabled and/or
752 # workers.kubernetes.kerberosSidecar.enabled
756 # workers.celery.kerberosSidecar.resources and/or
757 # workers.kubernetes.kerberosSidecar.resources
767 # Detailed default security context for kerberos sidecar on container level
769 # workers.celery.kerberosSidecar.securityContexts and/or
770 # workers.kubernetes.kerberosSidecar.securityContexts
774 # workers.celery.kerberosSidecar.securityContexts.container and/or
775 # workers.kubernetes.kerberosSidecar.securityContexts.container
778 # Container level lifecycle hooks
780 # workers.celery.kerberosSidecar.containerLifecycleHooks and/or
781 # workers.kubernetes.kerberosSidecar.containerLifecycleHooks
783 containerLifecycleHooks: {}
784 # Kerberos init container configuration for Airflow Celery workers and pods created with pod-template-file
786 # workers.celery.kerberosInitContainer and/or
787 # workers.kubernetes.kerberosInitContainer
789 kerberosInitContainer:
790 # Enable kerberos init container
792 # workers.celery.kerberosInitContainer.enabled and/or
793 # workers.kubernetes.kerberosInitContainer.enabled
797 # workers.celery.kerberosInitContainer.resources and/or
798 # workers.kubernetes.kerberosInitContainer.resources
808 # Detailed default security context for kerberos init container
810 # workers.celery.kerberosInitContainer.securityContexts and/or
811 # workers.kubernetes.kerberosInitContainer.securityContexts
815 # workers.celery.kerberosInitContainer.securityContexts.container and/or
816 # workers.kubernetes.kerberosInitContainer.securityContexts.container
819 # Container level lifecycle hooks
821 # workers.celery.kerberosInitContainer.containerLifecycleHooks and/or
822 # workers.kubernetes.kerberosInitContainer.containerLifecycleHooks
824 containerLifecycleHooks: {}
825 # Resource configuration for Airflow Celery workers and pods created with pod-template-file
826 # (deprecated, use workers.celery.resources or/and workers.kubernetes.resources instead)
835 # Grace period for tasks to finish after SIGTERM is sent from kubernetes.
836 # It is used by Airflow Celery workers and pod-template-file.
838 # workers.celery.terminationGracePeriodSeconds or/and
839 # workers.kubernetes.terminationGracePeriodSeconds
841 terminationGracePeriodSeconds: 600
842 # This setting tells kubernetes that its ok to evict when it wants to scale a node down.
843 # It is used by Airflow Celery workers and pod-template-file.
845 # Launch additional containers into Airflow Celery worker
846 # and pods created with pod-template-file (templated).
847 # Note: If used with KubernetesExecutor, you are responsible for signaling sidecars to exit when the main
848 # container finishes so Airflow can continue the worker shutdown process!
850 # Add additional init containers into Airflow Celery workers
851 # and pods created with pod-template-file (templated).
852 extraInitContainers: []
853 # Additional volumes and volume mounts attached to the
854 # Airflow Celery workers and pods created with pod-template-file
856 extraVolumeMounts: []
857 # Mount additional volumes into workers pods. It can be templated like in the following example:
859 # - name: my-templated-extra-volume
861 # secretName: '{{ include "my_secret_template" . }}'
866 # - name: my-templated-extra-volume
867 # mountPath: "{{ .Values.my_custom_path }}"
870 # Expose additional ports of Airflow Celery workers. These can be used for additional metric collection.
872 # Select certain nodes for Airflow Celery worker pods and pods created with pod-template-file
873 # (deprecated, use workers.celery.nodeSelector or/and workers.kubernetes.nodeSelector instead)
878 # Default Airflow Celery worker affinity is:
880 # preferredDuringSchedulingIgnoredDuringExecution:
885 # topologyKey: kubernetes.io/hostname
888 topologySpreadConstraints: []
889 # hostAliases to use in Airflow Celery worker pods and pods created with pod-template-file
891 # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
895 # - "test.hostname.one"
898 # - "test.hostname.two"
900 # Annotations for the Airflow Celery worker resource
902 # Pod annotations for the Airflow Celery workers and pods created with pod-template-file (templated)
904 # Labels specific to Airflow Celery workers objects and pods created with pod-template-file
906 # Log groomer configuration for Airflow Celery workers
908 # Whether to deploy the Airflow Celery worker log groomer sidecar
910 # Command to use when running the Airflow Celery worker log groomer sidecar (templated)
912 # Args to use when running the Airflow Celery worker log groomer sidecar (templated)
913 args: ["bash", "/clean-logs"]
914 # Number of days to retain logs
916 # Number of minutes to retain logs.
917 # This can be used for finer granularity than days.
918 # Total retention is retentionDays + retentionMinutes.
920 # Frequency to attempt to groom logs (in minutes)
922 # Max size of logs in bytes. 0 = disabled
924 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if maxSizeBytes is set.
934 # Detailed default security context for logGroomerSidecar for container level
938 # Configuration of wait-for-airflow-migration init container for Airflow Celery workers
940 # Whether to create init container to wait for db migrations
943 # Detailed default security context for wait-for-airflow-migrations container
946 # Additional env variable configuration for Airflow Celery workers and pods created with pod-template-file
948 # Additional volume claim templates for Airflow Celery workers
949 volumeClaimTemplates: []
950 # Comment out the above and uncomment the section below to enable it.
951 # Make sure to mount it under extraVolumeMounts.
952 # volumeClaimTemplates:
954 # name: data-volume-1
956 # storageClassName: "storage-class-1"
963 # name: data-volume-2
965 # storageClassName: "storage-class-2"
973 # Number of Airflow Celery workers
975 # Max number of old Airflow Celery workers ReplicaSets to retain
976 revisionHistoryLimit: ~
977 # Command to use when running Airflow Celery workers (templated)
979 # Args to use when running Airflow Celery workers (templated)
981 # If the Airflow Celery worker stops responding for 5 minutes (5*60s)
982 # kill the worker and let Kubernetes restart it
985 initialDelaySeconds: ~
990 # Enable the default workers defined by the root `workers` and `workers.celery`
991 # configurations to be created.
992 # If false, only dedicated workers defined in 'sets' will be created.
994 # Queue name for the default workers
996 # List of worker sets. Each item can overwrite values from the parent `workers` and `workers.celery`
1021 # Update Strategy when Airflow Celery worker is deployed as a StatefulSet
1023 # Update Strategy when Airflow Celery worker is deployed as a Deployment
1025 # Allow relaxing ordering guarantees for Airflow Celery worker
1026 # while preserving its uniqueness and identity
1027 # podManagementPolicy: Parallel
1029 # Detailed default security context for Airflow Celery workers for container and pod level
1030 # If not set, the values from `workers.securityContexts` section will be used.
1034 # Container level Lifecycle Hooks definition for Airflow Celery workers
1035 containerLifecycleHooks: {}
1036 # Airflow Celery workers pod disruption budget
1037 podDisruptionBudget:
1041 # minAvailable and maxUnavailable are mutually exclusive
1044 # Allow KEDA autoscaling for Airflow Celery workers
1048 # How often KEDA polls the airflow DB to report new scale requests to the HPA
1050 # How many seconds KEDA will wait before scaling to zero.
1051 # Note that HPA has a separate cooldown period for scale-downs
1053 # Minimum number of Airflow Celery workers created by keda
1055 # Maximum number of Airflow Celery workers created by keda
1057 # Specify HPA related options
1059 # horizontalPodAutoscalerConfig:
1062 # stabilizationWindowSeconds: 300
1068 # Query to use for KEDA autoscaling. Must return a single integer
1070 # Weather to use PGBouncer to connect to the database or not when it is enabled
1071 # This configuration will be ignored if PGBouncer is not enabled
1073 # Persistence volume configuration for Airflow Celery workers
1075 # Enable persistent volumes
1077 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed
1078 persistentVolumeClaimRetentionPolicy: ~
1079 # persistentVolumeClaimRetentionPolicy:
1080 # whenDeleted: Delete
1081 # whenScaled: Delete
1083 # Volume size for Airflow Celery worker StatefulSet
1085 # If using a custom storageClass, pass name ref to all StatefulSets here
1087 # Execute init container to chown log directory.
1088 # This is currently only needed in kind, due to usage
1089 # of local-path provisioner.
1091 # Annotations to add to Airflow Celery worker volumes
1093 # Detailed default security context for persistence on container level
1096 # Kerberos sidecar configuration for Airflow Celery workers
1098 # Enable kerberos sidecar
1108 # Detailed default security context for kerberos sidecar on container level
1111 # Container level lifecycle hooks
1112 containerLifecycleHooks: {}
1113 # Kerberos init container configuration for Airflow Celery workers
1114 # If not set, the values from `workers.kubernetesInitContainer` section will be used.
1115 kerberosInitContainer:
1116 # Enable kerberos init container
1117 # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect
1127 # Detailed default security context for kerberos init container
1130 # Container level lifecycle hooks
1131 containerLifecycleHooks: {}
1132 # Resource configuration for Airflow Celery workers
1141 # Grace period for tasks to finish after SIGTERM is sent from kubernetes
1142 terminationGracePeriodSeconds: ~
1143 # Select certain nodes for Airflow Celery worker pods
1146 # Command to use in pod-template-file (templated)
1148 # Detailed default security context for pod-template-file for container and pod level
1149 # If not set, the values from `workers.securityContexts` section will be used.
1153 # Container level Lifecycle Hooks definition for pods created with pod-template-file
1154 containerLifecycleHooks: {}
1155 # Kerberos sidecar configuration for pods created with pod-template-file
1157 # Enable kerberos sidecar
1167 # Detailed default security context for kerberos sidecar on container level
1170 # Container level lifecycle hooks
1171 containerLifecycleHooks: {}
1172 # Kerberos init container configuration for pods created with pod-template-file
1173 # If not set, the values from `workers.kubernetesInitContainer` section will be used.
1174 kerberosInitContainer:
1175 # Enable kerberos init container
1176 # If workers.kerberosInitContainer.enabled is set to True, this flag has no effect
1186 # Detailed default security context for kerberos init container
1189 # Container level lifecycle hooks
1190 containerLifecycleHooks: {}
1191 # Resource configuration for pods created with pod-template-file
1200 # Grace period for tasks to finish after SIGTERM is sent from kubernetes
1201 terminationGracePeriodSeconds: ~
1202 # Select certain nodes for pods created with pod-template-file
1204# Airflow scheduler settings
1207 # hostAliases for the scheduler pod
1216 # If the scheduler stops heartbeating for 5 minutes (5*60s) kill the
1217 # scheduler and let Kubernetes restart it
1219 initialDelaySeconds: 10
1224 # Wait for at most 1 minute (6*10s) for the scheduler container to startup.
1225 # livenessProbe kicks in after the first successful startupProbe
1227 initialDelaySeconds: 0
1232 # Amount of scheduler replicas
1234 # Max number of old replicasets to retain
1235 revisionHistoryLimit: ~
1236 # Command to use when running the Airflow scheduler (templated).
1238 # Args to use when running the Airflow scheduler (templated).
1239 args: ["bash", "-c", "exec airflow scheduler"]
1240 # Update Strategy when scheduler is deployed as a StatefulSet
1241 # (when using LocalExecutor and workers.persistence)
1243 # Update Strategy when scheduler is deployed as a Deployment
1244 # (when not using LocalExecutor and workers.persistence)
1246 # When not set, the values defined in the global securityContext will be used
1247 # (deprecated, use `securityContexts` instead)
1253 # Detailed default security context for scheduler deployments for container and pod level
1257 # container level lifecycle hooks
1258 containerLifecycleHooks: {}
1259 # Grace period for tasks to finish after SIGTERM is sent from kubernetes
1260 terminationGracePeriodSeconds: 10
1261 # Create ServiceAccount
1263 # affects all executors that launch pods, default value is true
1264 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1265 automountServiceAccountToken: true
1266 # Specifies whether a ServiceAccount should be created
1268 # The name of the ServiceAccount to use.
1269 # If not set and create is true, a name is generated using the release name
1271 # Annotations to add to scheduler kubernetes service account.
1273 # Service Account Token Volume configuration
1274 # This is only used when automountServiceAccountToken is false
1275 # and allows manual configuration of the service account token volume
1276 serviceAccountTokenVolume:
1277 # Enable manual service account token volume configuration
1279 # Path where the service account token should be mounted
1280 mountPath: /var/run/secrets/kubernetes.io/serviceaccount
1281 # Name of the volume
1282 volumeName: kube-api-access
1283 # Token expiration in seconds (default: 1 hour)
1284 expirationSeconds: 3600
1285 # Audience for the token
1287 # Scheduler pod disruption budget
1288 podDisruptionBudget:
1292 # minAvailable and maxUnavailable are mutually exclusive
1303 # This setting tells kubernetes that its ok to evict
1304 # when it wants to scale a node down.
1306 # Launch additional containers into scheduler (templated).
1308 # Add additional init containers into scheduler (templated).
1309 extraInitContainers: []
1310 # Mount additional volumes into scheduler. It can be templated like in the following example:
1312 # - name: my-templated-extra-volume
1314 # secretName: '{{ include "my_secret_template" . }}'
1318 # extraVolumeMounts:
1319 # - name: my-templated-extra-volume
1320 # mountPath: "{{ .Values.my_custom_path }}"
1323 extraVolumeMounts: []
1324 # Select certain nodes for airflow scheduler pods.
1327 # default scheduler affinity is:
1329 # preferredDuringSchedulingIgnoredDuringExecution:
1330 # - podAffinityTerm:
1333 # component: scheduler
1334 # topologyKey: kubernetes.io/hostname
1337 topologySpreadConstraints: []
1338 priorityClassName: ~
1339 # annotations for scheduler deployment
1341 # Pod annotations for scheduler pods (templated)
1343 # Labels specific to scheduler objects and pods
1346 # Whether to deploy the Airflow scheduler log groomer sidecar.
1348 # Command to use when running the Airflow scheduler log groomer sidecar (templated).
1350 # Args to use when running the Airflow scheduler log groomer sidecar (templated).
1351 args: ["bash", "/clean-logs"]
1352 # Number of days to retain logs
1354 # Number of minutes to retain logs.
1355 # This can be used for finer granularity than days.
1356 # Total retention is retentionDays + retentionMinutes.
1358 # frequency to attempt to groom logs, in minutes
1359 frequencyMinutes: 15
1360 # Max size of logs in bytes. 0 = disabled
1362 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if maxSizeBytes is set.
1371 # Detailed default security context for logGroomerSidecar for container level
1374 # container level lifecycle hooks
1375 containerLifecycleHooks: {}
1378 # Whether to create init container to wait for db migrations
1381 # Detailed default security context for waitForMigrations for container level
1385# Airflow create user job settings
1387 # Whether the create user job should be created
1389 # Create initial user.
1393 email: admin@example.com
1397 # Limit the lifetime of the job object after it finished execution.
1398 ttlSecondsAfterFinished: 300
1399 # Command to use when running the create user job (templated).
1401 # Args to use when running the create user job (templated).
1405 # The format below is necessary to get `helm lint` happy
1408 airflow users create "$@"
1410 # yamllint disable rule:line-length
1412 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.role }}{{ else }}{{ .Values.createUserJob.defaultUser.role }}{{ end }}"
1414 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.username }}{{ else }}{{ .Values.createUserJob.defaultUser.username }}{{ end }}"
1416 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.email }}{{ else }}{{ .Values.createUserJob.defaultUser.email }}{{ end }}"
1418 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.firstName }}{{ else }}{{ .Values.createUserJob.defaultUser.firstName }}{{ end }}"
1420 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.lastName }}{{ else }}{{ .Values.createUserJob.defaultUser.lastName }}{{ end }}"
1422 - "{{ if .Values.webserver.defaultUser }}{{ .Values.webserver.defaultUser.password }}{{ else }}{{ .Values.createUserJob.defaultUser.password }}{{ end }}"
1423 # Annotations on the create user job pod (templated)
1425 # jobAnnotations are annotations on the create user job
1427 restartPolicy: OnFailure
1428 # Labels specific to createUserJob objects and pods
1430 # When not set, the values defined in the global securityContext will be used
1436 # Detailed default security context for createUserJob for container and pod level
1440 # container level lifecycle hooks
1441 containerLifecycleHooks: {}
1442 # Create ServiceAccount
1444 # default value is true
1445 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1446 automountServiceAccountToken: true
1447 # Specifies whether a ServiceAccount should be created
1449 # The name of the ServiceAccount to use.
1450 # If not set and create is true, a name is generated using the release name
1452 # Annotations to add to create user kubernetes service account.
1454 # Launch additional containers into user creation job
1456 # Add additional init containers into user creation job (templated).
1457 extraInitContainers: []
1458 # Mount additional volumes into user creation job. It can be templated like in the following example:
1460 # - name: my-templated-extra-volume
1462 # secretName: '{{ include "my_secret_template" . }}'
1466 # extraVolumeMounts:
1467 # - name: my-templated-extra-volume
1468 # mountPath: "{{ .Values.my_custom_path }}"
1471 extraVolumeMounts: []
1475 topologySpreadConstraints: []
1476 priorityClassName: ~
1477 # In case you need to disable the helm hooks that create the jobs after install.
1478 # Disable this if you are using ArgoCD for example
1480 applyCustomEnv: true
1489# Airflow database migration job settings
1492 # Limit the lifetime of the job object after it finished execution.
1493 ttlSecondsAfterFinished: 300
1494 # Command to use when running the migrate database job (templated).
1496 # Args to use when running the migrate database job (templated).
1504 # Annotations on the database migration pod (templated)
1506 # jobAnnotations are annotations on the database migration job
1508 restartPolicy: OnFailure
1509 # Labels specific to migrate database job objects and pods
1511 # When not set, the values defined in the global securityContext will be used
1517 # Detailed default security context for migrateDatabaseJob for container and pod level
1521 # container level lifecycle hooks
1522 containerLifecycleHooks: {}
1523 # Create ServiceAccount
1525 # default value is true
1526 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1527 automountServiceAccountToken: true
1528 # Specifies whether a ServiceAccount should be created
1530 # The name of the ServiceAccount to use.
1531 # If not set and create is true, a name is generated using the release name
1533 # Annotations to add to migrate database job kubernetes service account.
1543 # Launch additional containers into database migration job
1545 # Add additional init containers into migrate database job (templated).
1546 extraInitContainers: []
1547 # Mount additional volumes into database migration job. It can be templated like in the following example:
1549 # - name: my-templated-extra-volume
1551 # secretName: '{{ include "my_secret_template" . }}'
1555 # extraVolumeMounts:
1556 # - name: my-templated-extra-volume
1557 # mountPath: "{{ .Values.my_custom_path }}"
1560 extraVolumeMounts: []
1564 topologySpreadConstraints: []
1565 priorityClassName: ~
1566 # In case you need to disable the helm hooks that create the jobs after install.
1567 # Disable this if you are using ArgoCD for example
1569 applyCustomEnv: true
1573 # Number of Airflow API servers in the deployment.
1574 # Omitted from the Deployment, when HPA is enabled.
1576 # Max number of old replicasets to retain
1577 revisionHistoryLimit: ~
1578 # Labels specific to Airflow API server objects and pods
1580 # Command to use when running the Airflow API server (templated).
1582 # Args to use when running the Airflow API server (templated).
1583 # Example: To enable proxy headers support when running behind a reverse proxy:
1584 # args: ["bash", "-c", "exec airflow api-server --proxy-headers"]
1585 args: ["bash", "-c", "exec airflow api-server"]
1586 allowPodLogReading: true
1587 # Environment variables for the Airflow API server.
1588 # Example: To configure FORWARDED_ALLOW_IPS when running behind a reverse proxy:
1590 # - name: FORWARDED_ALLOW_IPS
1591 # value: "*" # Use "*" for trusted environments, or specify proxy IP ranges for production
1593 # Allow Horizontal Pod Autoscaler (HPA) configuration for apiServer. (optional)
1594 # HPA automatically scales the number of apiServer pods based on observed metrics.
1595 # HPA automatically adjusts apiServer replicas between minReplicaCount and maxReplicaCount based on metrics.
1598 # Minimum number of api-servers created by HPA
1600 # Maximum number of api-servers created by HPA
1602 # Specifications for which to use to calculate the desired replica count
1609 averageUtilization: 50
1610 # Scaling behavior of the target in both Up and Down directions
1613 # default value is true
1614 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1615 automountServiceAccountToken: true
1616 # Specifies whether a ServiceAccount should be created
1618 # The name of the ServiceAccount to use.
1619 # If not set and create is true, a name is generated using the release name
1621 # Annotations to add to Airflow API server kubernetes service account.
1625 ## service annotations
1629 port: "{{ .Values.ports.apiServer }}"
1631 ## Limit load balancer source ips to list of CIDRs
1632 # loadBalancerSourceRanges:
1634 loadBalancerSourceRanges: []
1635 podDisruptionBudget:
1639 # minAvailable and maxUnavailable are mutually exclusive
1642 # Allow overriding Update Strategy for API server
1644 # Detailed default security contexts for Airflow API server deployments for container and pod level
1648 # container level lifecycle hooks
1649 containerLifecycleHooks: {}
1651 # Whether to create init container to wait for db migrations
1654 # Detailed default security context for waitForMigrations for container level
1657 # Launch additional containers into the Airflow API server pods.
1659 # Add additional init containers into API server (templated).
1660 extraInitContainers: []
1661 # Mount additional volumes into API server. It can be templated like in the following example:
1663 # - name: my-templated-extra-volume
1665 # secretName: '{{ include "my_secret_template" . }}'
1669 # extraVolumeMounts:
1670 # - name: my-templated-extra-volume
1671 # mountPath: "{{ .Values.my_custom_path }}"
1674 extraVolumeMounts: []
1675 # Select certain nodes for Airflow API server pods.
1679 topologySpreadConstraints: []
1680 priorityClassName: ~
1681 # hostAliases for API server pod
1683 # annotations for Airflow API server deployment
1685 # Pod annotations for API server pods (templated)
1689 # Peers for Airflow API server NetworkPolicy ingress
1691 # Ports for Airflow API server NetworkPolicy ingress (if `from` is set)
1693 - port: "{{ .Values.ports.apiServer }}"
1702 # Add custom annotations to the apiServer configmap
1703 configMapAnnotations: {}
1704 # This string (templated) will be mounted into the Airflow API Server
1705 # as a custom webserver_config.py. You can bake a webserver_config.py in to
1706 # your image instead or specify a configmap containing the
1707 # webserver_config.py.
1709 # apiServerConfig: |
1710 # from airflow import configuration as conf
1712 # # The SQLAlchemy connection string.
1713 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
1715 # # Flask-WTF flag for CSRF
1716 # CSRF_ENABLED = True
1717 apiServerConfigConfigMapName: ~
1719 initialDelaySeconds: 15
1725 initialDelaySeconds: 15
1731 initialDelaySeconds: 0
1736# Airflow webserver settings
1739 # Add custom annotations to the webserver configmap
1740 configMapAnnotations: {}
1741 # hostAliases for the webserver pod
1749 allowPodLogReading: true
1751 initialDelaySeconds: 15
1757 initialDelaySeconds: 15
1762 # Wait for at most 1 minute (6*10s) for the webserver container to startup.
1763 # livenessProbe kicks in after the first successful startupProbe
1765 initialDelaySeconds: 0
1770 # Number of webservers
1772 # Max number of old replicasets to retain
1773 revisionHistoryLimit: ~
1774 # Command to use when running the Airflow webserver (templated).
1776 # Args to use when running the Airflow webserver (templated).
1777 args: ["bash", "-c", "exec airflow webserver"]
1778 # Grace period for webserver to finish after SIGTERM is sent from kubernetes
1779 terminationGracePeriodSeconds: 30
1783 # Minimum number of webservers created by HPA
1785 # Maximum number of webservers created by HPA
1787 # Specifications for which to use to calculate the desired replica count
1794 averageUtilization: 80
1795 # Scaling behavior of the target in both Up and Down directions
1797 # Create ServiceAccount
1799 # default value is true
1800 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1801 automountServiceAccountToken: true
1802 # Specifies whether a ServiceAccount should be created
1804 # The name of the ServiceAccount to use.
1805 # If not set and create is true, a name is generated using the release name
1807 # Annotations to add to webserver kubernetes service account.
1809 # Webserver pod disruption budget
1810 podDisruptionBudget:
1814 # minAvailable and maxUnavailable are mutually exclusive
1817 # Allow overriding Update Strategy for Webserver
1819 # When not set, the values defined in the global securityContext will be used
1820 # (deprecated, use `securityContexts` instead)
1826 # Detailed default security contexts for webserver deployments for container and pod level
1830 # container level lifecycle hooks
1831 containerLifecycleHooks: {}
1832 # Additional network policies as needed (Deprecated - renamed to `webserver.networkPolicy.ingress.from`)
1833 extraNetworkPolicies: []
1836 # Peers for webserver NetworkPolicy ingress
1838 # Ports for webserver NetworkPolicy ingress (if `from` is set)
1840 - port: "{{ .Values.ports.airflowUI }}"
1849 # Create initial user. (Note: Deprecated, use createUserJob section instead)
1854 # email: admin@example.com
1859 # Launch additional containers into webserver (templated).
1861 # Add additional init containers into webserver (templated).
1862 extraInitContainers: []
1863 # Mount additional volumes into webserver. It can be templated like in the following example:
1865 # - name: my-templated-extra-volume
1867 # secretName: '{{ include "my_secret_template" . }}'
1871 # extraVolumeMounts:
1872 # - name: my-templated-extra-volume
1873 # mountPath: "{{ .Values.my_custom_path }}"
1876 extraVolumeMounts: []
1877 # This string (templated) will be mounted into the Airflow Webserver
1878 # as a custom webserver_config.py. You can bake a webserver_config.py in to
1879 # your image instead or specify a configmap containing the
1880 # webserver_config.py.
1882 # webserverConfig: |
1883 # from airflow import configuration as conf
1885 # # The SQLAlchemy connection string.
1886 # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')
1888 # # Flask-WTF flag for CSRF
1889 # CSRF_ENABLED = True
1890 webserverConfigConfigMapName: ~
1893 ## service annotations
1897 port: "{{ .Values.ports.airflowUI }}"
1898 # To change the port used to access the webserver:
1900 # - name: airflow-ui
1902 # targetPort: airflow-ui
1903 # To only expose a sidecar, not the webserver directly:
1905 # - name: only_sidecar
1908 # If you have a public IP, set NodePort to set an external port.
1909 # Service type must be 'NodePort':
1911 # - name: airflow-ui
1916 ## Limit load balancer source ips to list of CIDRs
1917 # loadBalancerSourceRanges:
1919 loadBalancerSourceRanges: []
1920 # Select certain nodes for airflow webserver pods.
1922 priorityClassName: ~
1924 # default webserver affinity is:
1926 # preferredDuringSchedulingIgnoredDuringExecution:
1927 # - podAffinityTerm:
1930 # component: webserver
1931 # topologyKey: kubernetes.io/hostname
1934 topologySpreadConstraints: []
1935 # annotations for webserver deployment
1937 # Pod annotations for webserver pods (templated)
1939 # Labels specific webserver app
1942 # Whether to create init container to wait for db migrations
1945 # Detailed default security context for waitForMigrations for container level
1949# Airflow Triggerer Config
1952 # Number of airflow triggerers in the deployment
1954 # Max number of old replicasets to retain
1955 revisionHistoryLimit: ~
1956 # Command to use when running Airflow triggerers (templated).
1958 # Args to use when running Airflow triggerer (templated).
1959 args: ["bash", "-c", "exec airflow triggerer"]
1960 # Update Strategy when triggerer is deployed as a StatefulSet
1962 # Update Strategy when triggerer is deployed as a Deployment
1966 maxUnavailable: "50%"
1967 # If the triggerer stops heartbeating for 5 minutes (5*60s) kill the
1968 # triggerer and let Kubernetes restart it
1970 initialDelaySeconds: 10
1975 # Create ServiceAccount
1977 # default value is true
1978 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
1979 automountServiceAccountToken: true
1980 # Specifies whether a ServiceAccount should be created
1982 # The name of the ServiceAccount to use.
1983 # If not set and create is true, a name is generated using the release name
1985 # Annotations to add to triggerer kubernetes service account.
1987 # When not set, the values defined in the global securityContext will be used
1993 # Detailed default security context for triggerer for container and pod level
1997 # container level lifecycle hooks
1998 containerLifecycleHooks: {}
2000 # Enable persistent volumes
2002 # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed.
2003 persistentVolumeClaimRetentionPolicy: ~
2004 # Volume size for triggerer StatefulSet
2006 # If using a custom storageClass, pass name ref to all statefulSets here
2008 # Execute init container to chown log directory.
2009 # This is currently only needed in kind, due to usage
2010 # of local-path provisioner.
2011 fixPermissions: false
2012 # Annotations to add to triggerer volumes
2014 # Triggerer pod disruption budget
2015 podDisruptionBudget:
2019 # minAvailable and maxUnavailable are mutually exclusive
2030 # Grace period for triggerer to finish after SIGTERM is sent from kubernetes
2031 terminationGracePeriodSeconds: 60
2032 # This setting tells kubernetes that its ok to evict
2033 # when it wants to scale a node down.
2035 # Launch additional containers into triggerer (templated).
2037 # Add additional init containers into triggerers (templated).
2038 extraInitContainers: []
2039 # Mount additional volumes into triggerer. It can be templated like in the following example:
2041 # - name: my-templated-extra-volume
2043 # secretName: '{{ include "my_secret_template" . }}'
2047 # extraVolumeMounts:
2048 # - name: my-templated-extra-volume
2049 # mountPath: "{{ .Values.my_custom_path }}"
2052 extraVolumeMounts: []
2053 # Select certain nodes for airflow triggerer pods.
2056 # default triggerer affinity is:
2058 # preferredDuringSchedulingIgnoredDuringExecution:
2059 # - podAffinityTerm:
2062 # component: triggerer
2063 # topologyKey: kubernetes.io/hostname
2066 topologySpreadConstraints: []
2067 # hostAliases for the triggerer pod
2076 priorityClassName: ~
2077 # annotations for the triggerer deployment
2079 # Pod annotations for triggerer pods (templated)
2081 # Labels specific to triggerer objects and pods
2084 # Whether to deploy the Airflow triggerer log groomer sidecar.
2086 # Command to use when running the Airflow triggerer log groomer sidecar (templated).
2088 # Args to use when running the Airflow triggerer log groomer sidecar (templated).
2089 args: ["bash", "/clean-logs"]
2090 # Number of days to retain logs
2092 # Number of minutes to retain logs.
2093 # This can be used for finer granularity than days.
2094 # Total retention is retentionDays + retentionMinutes.
2096 # frequency to attempt to groom logs, in minutes
2097 frequencyMinutes: 15
2098 # Max size of logs in bytes. 0 = disabled
2100 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if maxSizeBytes is set.
2109 # Detailed default security context for logGroomerSidecar for container level
2112 # container level lifecycle hooks
2113 containerLifecycleHooks: {}
2116 # Whether to create init container to wait for db migrations
2119 # Detailed default security context for waitForMigrations for container level
2123 # Allow KEDA autoscaling.
2127 # How often KEDA polls the airflow DB to report new scale requests to the HPA
2129 # How many seconds KEDA will wait before scaling to zero.
2130 # Note that HPA has a separate cooldown period for scale-downs
2132 # Minimum number of triggerers created by keda
2134 # Maximum number of triggerers created by keda
2136 # Specify HPA related options
2138 # horizontalPodAutoscalerConfig:
2141 # stabilizationWindowSeconds: 300
2147 # Query to use for KEDA autoscaling. Must return a single integer.
2149 SELECT ceil(COUNT(*)::decimal / {{ include "triggerer.capacity" . }}) FROM trigger
2150 # Whether to use PGBouncer to connect to the database or not when it is enabled
2151 # This configuration will be ignored if PGBouncer is not enabled
2153# Airflow Dag Processor Config
2156 # Dag Bundle Configuration
2157 # Define Dag bundles in a structured YAML format. This will be automatically
2158 # converted to JSON string format for config.dag_processor.dag_bundle_config_list.
2159 dagBundleConfigList:
2161 classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
2164 # dagBundleConfigList:
2166 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
2168 # git_conn_id: "GITHUB__repo1"
2170 # tracking_ref: "main"
2171 # refresh_interval: 60
2173 # classpath: "airflow.providers.git.bundles.git.GitDagBundle"
2175 # git_conn_id: "GITHUB__repo2"
2177 # tracking_ref: "develop"
2178 # refresh_interval: 120
2179 # - name: dags-folder
2180 # classpath: "airflow.dag_processing.bundles.local.LocalDagBundle"
2183 # Number of airflow dag processors in the deployment
2185 # Max number of old replicasets to retain
2186 revisionHistoryLimit: ~
2187 # Command to use when running Airflow dag processors (templated).
2189 # Args to use when running Airflow dag processor (templated).
2190 args: ["bash", "-c", "exec airflow dag-processor"]
2191 # Update Strategy for dag processors
2195 maxUnavailable: "50%"
2196 # If the dag processor stops heartbeating for 5 minutes (5*60s) kill the
2197 # dag processor and let Kubernetes restart it
2199 initialDelaySeconds: 10
2204 # Create ServiceAccount
2206 # default value is true
2207 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2208 automountServiceAccountToken: true
2209 # Specifies whether a ServiceAccount should be created
2211 # The name of the ServiceAccount to use.
2212 # If not set and create is true, a name is generated using the release name
2214 # Annotations to add to dag processor kubernetes service account.
2216 # Dag processor pod disruption budget
2217 podDisruptionBudget:
2221 # minAvailable and maxUnavailable are mutually exclusive
2224 # When not set, the values defined in the global securityContext will be used
2230 # Detailed default security context for dagProcessor for container and pod level
2234 # container level lifecycle hooks
2235 containerLifecycleHooks: {}
2244 # Grace period for dag processor to finish after SIGTERM is sent from kubernetes
2245 terminationGracePeriodSeconds: 60
2246 # This setting tells kubernetes that its ok to evict
2247 # when it wants to scale a node down.
2249 # Launch additional containers into dag processor (templated).
2251 # Add additional init containers into dag processors (templated).
2252 extraInitContainers: []
2253 # Mount additional volumes into dag processor. It can be templated like in the following example:
2255 # - name: my-templated-extra-volume
2257 # secretName: '{{ include "my_secret_template" . }}'
2261 # extraVolumeMounts:
2262 # - name: my-templated-extra-volume
2263 # mountPath: "{{ .Values.my_custom_path }}"
2266 extraVolumeMounts: []
2267 # Select certain nodes for airflow dag processor pods.
2270 # default dag processor affinity is:
2272 # preferredDuringSchedulingIgnoredDuringExecution:
2273 # - podAffinityTerm:
2276 # component: dag-processor
2277 # topologyKey: kubernetes.io/hostname
2280 topologySpreadConstraints: []
2281 priorityClassName: ~
2282 # annotations for the dag processor deployment
2284 # Pod annotations for dag processor pods (templated)
2287 # Whether to deploy the Airflow dag processor log groomer sidecar.
2289 # Command to use when running the Airflow dag processor log groomer sidecar (templated).
2291 # Args to use when running the Airflow dag processor log groomer sidecar (templated).
2292 args: ["bash", "/clean-logs"]
2293 # Number of days to retain logs
2295 # Number of minutes to retain logs.
2296 # This can be used for finer granularity than days.
2297 # Total retention is retentionDays + retentionMinutes.
2299 # frequency to attempt to groom logs, in minutes
2300 frequencyMinutes: 15
2301 # Max size of logs in bytes. 0 = disabled
2303 # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if maxSizeBytes is set.
2316 # Whether to create init container to wait for db migrations
2319 # Detailed default security context for waitForMigrations for container level
2322 # Labels specific to dag processor objects
2324 # Environment variables to add to dag processor container
2329 # If True, and using CeleryExecutor/CeleryKubernetesExecutor, will deploy flower app.
2332 initialDelaySeconds: 10
2334 failureThreshold: 10
2337 initialDelaySeconds: 10
2339 failureThreshold: 10
2341 # Wait for at most 1 minute (6*10s) for the flower container to startup.
2342 # livenessProbe kicks in after the first successful startupProbe
2344 initialDelaySeconds: 0
2348 # Max number of old replicasets to retain
2349 revisionHistoryLimit: ~
2350 # Command to use when running flower (templated).
2352 # Args to use when running flower (templated).
2356 # The format below is necessary to get `helm lint` happy
2359 airflow celery flower
2360 # Additional network policies as needed (Deprecated - renamed to `flower.networkPolicy.ingress.from`)
2361 extraNetworkPolicies: []
2364 # Peers for flower NetworkPolicy ingress
2366 # Ports for flower NetworkPolicy ingress (if ingressPeers is set)
2368 - port: "{{ .Values.ports.flowerUI }}"
2377 # When not set, the values defined in the global securityContext will be used
2383 # Detailed default security context for flower for container and pod level
2387 # container level lifecycle hooks
2388 containerLifecycleHooks: {}
2389 # Create ServiceAccount
2391 # default value is true
2392 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2393 automountServiceAccountToken: true
2394 # Specifies whether a ServiceAccount should be created
2396 # The name of the ServiceAccount to use.
2397 # If not set and create is true, a name is generated using the release name
2399 # Annotations to add to worker kubernetes service account.
2401 # A secret containing the connection
2403 # Add custom annotations to the flower secret
2404 secretAnnotations: {}
2405 # Else, if username and password are set, create secret from username and password
2410 ## service annotations
2414 port: "{{ .Values.ports.flowerUI }}"
2415 # To change the port used to access flower:
2419 # targetPort: flower-ui
2421 ## Limit load balancer source ips to list of CIDRs
2422 # loadBalancerSourceRanges:
2424 loadBalancerSourceRanges: []
2425 # Launch additional containers into the flower pods.
2427 # Mount additional volumes into the flower pods. It can be templated like in the following example:
2429 # - name: my-templated-extra-volume
2431 # secretName: '{{ include "my_secret_template" . }}'
2435 # extraVolumeMounts:
2436 # - name: my-templated-extra-volume
2437 # mountPath: "{{ .Values.my_custom_path }}"
2440 extraVolumeMounts: []
2441 # Select certain nodes for airflow flower pods.
2445 topologySpreadConstraints: []
2446 priorityClassName: ~
2447 # annotations for the flower deployment
2449 # Pod annotations for flower pods (templated)
2451 # Labels specific to flower objects and pods
2456 # Add custom annotations to the statsd configmap
2457 configMapAnnotations: {}
2459 # Max number of old replicasets to retain
2460 revisionHistoryLimit: ~
2461 # Arguments for StatsD exporter command.
2462 args: ["--statsd.mapping-config=/etc/statsd-exporter/mappings.yml"]
2463 # If you ever need to fully override the entire args list, you can
2464 # supply your own array here; if set, all below flag-specific values
2465 # (mappingConfig, cache-size, cache-type, ttl) are ignored.
2467 # - "--statsd.cache-size=1000"
2468 # - "--statsd.cache-type=random"
2470 # -------------------------------------------------------------------
2472 # Path in the container to the mapping config file.
2474 # Maximum number of metric‐mapping entries to keep in cache.
2475 # When you send more distinct metric names than this, older entries
2476 # will be evicted according to cacheType.
2479 # Metrics Eviction policy for the mapping cache.
2480 # - lru → Least‐Recently‐Used eviction
2481 # - random → Random eviction
2484 # Per‐metric time‐to‐live. When set to a non‐zero duration, any metric
2485 # series that hasn't received an update in this interval will be dropped
2486 # from the exported /metrics output.
2487 # Format: Go duration string (e.g. "30s", "5m", "1h")
2488 # Default: "0s" (disabled, never expires)
2490 # Annotations to add to the StatsD Deployment.
2492 # Grace period for statsd to finish after SIGTERM is sent from kubernetes
2493 terminationGracePeriodSeconds: 30
2494 # Create ServiceAccount
2496 # default value is true
2497 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2498 automountServiceAccountToken: true
2499 # Specifies whether a ServiceAccount should be created
2501 # The name of the ServiceAccount to use.
2502 # If not set and create is true, a name is generated using the release name
2504 # Annotations to add to worker kubernetes service account.
2507 # When not set, `statsd.uid` will be used
2509 # (deprecated, use `securityContexts` instead)
2515 # Detailed default security context for statsd deployments for container and pod level
2519 # container level lifecycle hooks
2520 containerLifecycleHooks: {}
2521 # Additional network policies as needed
2522 extraNetworkPolicies: []
2532 extraAnnotations: {}
2533 # Select certain nodes for StatsD pods.
2537 topologySpreadConstraints: []
2538 priorityClassName: ~
2539 # Additional mappings for StatsD exporter.
2540 # If set, will merge default mapping and extra mappings, default mapping has higher priority.
2541 # So, if you want to change some default mapping, please use `overrideMappings`
2543 # Override mappings for StatsD exporter.
2544 # If set, will ignore setting item in default and `extraMappings`.
2545 # So, If you use it, ensure all mapping item contains in it.
2546 overrideMappings: []
2547 # Pod annotations for StatsD pods (templated)
2549 # Labels specific to statsd objects and pods
2551 # Environment variables to add to statsd container
2557 # Number of PgBouncer replicas to run in Deployment
2559 # Max number of old replicasets to retain
2560 revisionHistoryLimit: ~
2561 # Command to use for PgBouncer(templated).
2562 command: ["pgbouncer", "-u", "nobody", "/etc/pgbouncer/pgbouncer.ini"]
2563 # Args to use for PgBouncer(templated).
2565 auth_type: scram-sha-256
2566 auth_file: /etc/pgbouncer/users.txt
2567 # Whether to mount the config secret files at a default location (/etc/pgbouncer/*).
2568 # Can be skipped to allow for other means to get the values, e.g. secrets provider class.
2569 mountConfigSecret: true
2570 # annotations to be added to the PgBouncer deployment
2572 # Pod annotations for PgBouncer pods (templated)
2574 # Add custom annotations to the pgbouncer certificates secret
2575 certificatesSecretAnnotations: {}
2576 # Create ServiceAccount
2578 # default value is true
2579 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2580 automountServiceAccountToken: true
2581 # Specifies whether a ServiceAccount should be created
2583 # The name of the ServiceAccount to use.
2584 # If not set and create is true, a name is generated using the release name
2586 # Annotations to add to worker kubernetes service account.
2588 # Additional network policies as needed
2589 extraNetworkPolicies: []
2591 metadataPoolSize: 10
2592 resultBackendPoolSize: 5
2593 # Maximum clients that can connect to PgBouncer (higher = more file descriptors)
2595 # supply the name of existing secret with pgbouncer.ini and users.txt defined
2596 # you can load them to a k8s secret like the one below
2600 # name: pgbouncer-config-secret
2602 # pgbouncer.ini: <base64_encoded pgbouncer.ini file content>
2603 # users.txt: <base64_encoded users.txt file content>
2606 # configSecretName: pgbouncer-config-secret
2609 # Add custom annotations to the pgbouncer config secret
2610 configSecretAnnotations: {}
2611 # PgBouncer pod disruption budget
2612 podDisruptionBudget:
2616 # minAvailable and maxUnavailable are mutually exclusive
2619 # Limit the resources to PgBouncer.
2620 # When you specify the resource request the k8s scheduler uses this information to decide which node to
2621 # place the Pod on. When you specify a resource limit for a Container, the kubelet enforces those limits so
2622 # that the running container is not allowed to use more of that resource than the limit you set.
2623 # See: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
2635 extraAnnotations: {}
2637 # https://www.pgbouncer.org/config.html
2639 logDisconnections: 0
2647 # Add extra PgBouncer ini configuration in the databases section:
2648 # https://www.pgbouncer.org/config.html#section-databases
2650 extraIniResultBackend: ~
2651 # Add extra general PgBouncer ini configuration: https://www.pgbouncer.org/config.html
2653 # Mount additional volumes into pgbouncer. It can be templated like in the following example:
2655 # - name: my-templated-extra-volume
2657 # secretName: '{{ include "my_secret_template" . }}'
2661 # extraVolumeMounts:
2662 # - name: my-templated-extra-volume
2663 # mountPath: "{{ .Values.my_custom_path }}"
2665 # Volumes apply to all pgbouncer containers, while volume mounts apply to the pgbouncer
2666 # container itself. Metrics exporter container has its own mounts.
2668 extraVolumeMounts: []
2669 # Launch additional containers into pgbouncer.
2671 # Select certain nodes for PgBouncer pods.
2675 topologySpreadConstraints: []
2676 priorityClassName: ~
2678 # Detailed default security context for pgbouncer for container level
2682 # container level lifecycle hooks
2683 containerLifecycleHooks:
2686 # Allow existing queries clients to complete within 120 seconds
2687 command: ["/bin/sh", "-c", "killall -INT pgbouncer && sleep 120"]
2688 metricsExporterSidecar:
2697 # supply the name of existing secret with PGBouncer connection URI containing
2698 # stats user and password.
2699 # you can load them to a k8s secret like the one below
2703 # name: pgbouncer-stats-secret
2705 # connection: postgresql://<stats user>:<password>@127.0.0.1:6543/pgbouncer?<connection params>
2708 # statsSecretName: pgbouncer-stats-secret
2711 # Key containing the PGBouncer connection URI, defaults to `connection` if not defined
2713 # Add custom annotations to the pgbouncer stats secret
2714 statsSecretAnnotations: {}
2715 # Detailed default security context for metricsExporterSidecar for container level
2718 # container level lifecycle hooks
2719 containerLifecycleHooks: {}
2721 initialDelaySeconds: 10
2725 initialDelaySeconds: 10
2728 # Mount additional volumes into the metrics exporter. It can be templated like in the following example:
2729 # extraVolumeMounts:
2730 # - name: my-templated-extra-volume
2731 # mountPath: "{{ .Values.my_custom_path }}"
2733 extraVolumeMounts: []
2734 # Labels specific to pgbouncer objects and pods
2736 # Environment variables to add to pgbouncer container
2738# Configuration for the redis provisioned by the chart
2741 terminationGracePeriodSeconds: 600
2742 # Annotations for Redis Statefulset
2744 # Create ServiceAccount
2746 # default value is true
2747 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2748 automountServiceAccountToken: true
2749 # Specifies whether a ServiceAccount should be created
2751 # The name of the ServiceAccount to use.
2752 # If not set and create is true, a name is generated using the release name
2754 # Annotations to add to worker kubernetes service account.
2757 # service type, default: ClusterIP
2759 # If using ClusterIP service type, custom IP address can be specified
2761 # If using NodePort service type, custom node port can be specified
2764 # Enable persistent volumes
2766 # Volume size for worker StatefulSet
2768 # If using a custom storageClass, pass name ref to all statefulSets here
2770 # Annotations to add to redis volumes
2772 # the name of an existing PVC to use
2774 persistentVolumeClaimRetentionPolicy: ~
2775 # persistentVolumeClaimRetentionPolicy:
2776 # whenDeleted: Delete
2777 # whenScaled: Delete
2778 # Configuration for empty dir volume (if redis.persistence.enabled == false)
2790 # If set use as redis secret. Make sure to also set data.brokerUrlSecretName value.
2791 passwordSecretName: ~
2792 # Else, if password is set, create secret with it,
2793 # Otherwise a new password will be generated on install
2794 # Note: password can only be set during install, not upgrade.
2796 # Add custom annotations to the redis password secret
2797 passwordSecretAnnotations: {}
2798 # This setting tells kubernetes that its ok to evict
2799 # when it wants to scale a node down.
2801 # Select certain nodes for redis pods.
2805 topologySpreadConstraints: []
2806 priorityClassName: ~
2807 # Set to 0 for backwards-compatibility
2809 # If not set, `redis.uid` will be used
2814 # Detailed default security context for redis for container and pod level
2818 # container level lifecycle hooks
2819 containerLifecycleHooks: {}
2820 # Labels specific to redis objects and pods
2822 # Pod annotations for Redis pods (templated)
2824# Auth secret for a private registry (Deprecated - use `imagePullSecrets` instead)
2825# This is used if pulling airflow images from a private registry
2827 # Name of the Kubernetes secret containing Base64 encoded credentials to connect to a private registry
2828 # (Deprecated - renamed to `imagePullSecrets`).
2830 # Credentials to connect to a private registry, these will get Base64 encoded and stored in a secret
2831 # (Deprecated - create manually the credentials secret and add to `imagePullSecrets` instead).
2839# Elasticsearch logging configuration
2841 # Enable elasticsearch task logging
2843 # A secret containing the connection
2845 # Add custom annotations to the elasticsearch secret
2846 secretAnnotations: {}
2847 # Or an object representing the connection
2856# OpenSearch logging configuration
2858 # Enable opensearch task logging
2860 # A secret containing the connection
2862 # Or an object representing the connection
2871# All ports used by chart
2881 pgbouncerScrape: 9127
2883# Define any ResourceQuotas for namespace
2885# Define default/max/min values for pods and containers in namespace
2887# This runs as a CronJob to cleanup old pods spawned by the KubernetesExecutor.
2888# It is required to have KubernetesExecutor enabled.
2891 # Run every 15 minutes (templated).
2892 schedule: "*/15 * * * *"
2893 # To select a random-ish, deterministic starting minute between 3 and 12 inclusive for each release:
2894 # '{{- add 3 (regexFind ".$" (adler32sum .Release.Name)) -}}-59/15 * * * *'
2895 # To select the last digit of unix epoch time as the starting minute on each deploy:
2896 # '{{- now | unixEpoch | trunc -1 -}}-59/* * * * *'
2898 # Command to use when running the cleanup cronjob (templated).
2900 # Args to use when running the cleanup cronjob (templated).
2901 args: ["bash", "-c", "exec airflow kubernetes cleanup-pods --namespace={{ .Release.Namespace }}"]
2902 # jobAnnotations are annotations on the cleanup CronJob
2904 # Select certain nodes for airflow cleanup pods.
2908 topologySpreadConstraints: []
2909 priorityClassName: ~
2910 # Pod annotations for cleanup pods (templated)
2912 # Labels specific to cleanup objects and pods
2922 # Create ServiceAccount
2924 # default value is true
2925 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2926 automountServiceAccountToken: true
2927 # Specifies whether a ServiceAccount should be created
2929 # The name of the ServiceAccount to use.
2930 # If not set and create is true, a name is generated using the release name
2932 # Annotations to add to cleanup cronjob kubernetes service account.
2934 # When not set, the values defined in the global securityContext will be used
2939 # Detailed default security context for cleanup for container level
2943 # container level lifecycle hooks
2944 containerLifecycleHooks: {}
2945 # Specify history limit
2946 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
2947 failedJobsHistoryLimit: ~
2948 successfulJobsHistoryLimit: ~
2949# This runs as a CronJob to cleanup database for old entries.
2952 applyCustomEnv: true
2953 # Run every week on Sunday at midnight (templated).
2954 schedule: "0 0 * * 0"
2955 # Command to use when running the database cleanup cronjob (templated).
2958 # Args to use when running the database cleanup cronjob (templated).
2962 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 }}
2963 # Number of days to retain entries in the metadata database.
2965 # Don't preserve purged records in an archive table
2967 # Table names to perform maintenance on. Supported values in:
2968 # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean
2970 # Maximum number of rows to delete or archive in a single transaction
2972 # Make logging output more verbose
2974 # jobAnnotations are annotations on the database cleanup CronJob
2976 # Select certain nodes for airflow database cleanup pods.
2980 topologySpreadConstraints: []
2981 priorityClassName: ~
2982 # Pod annotations for database cleanup pods (templated)
2984 # Labels specific to database cleanup objects and pods
2994 # Create ServiceAccount
2996 # default value is true
2997 # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
2998 automountServiceAccountToken: true
2999 # Specifies whether a ServiceAccount should be created
3001 # The name of the ServiceAccount to use.
3002 # If not set and create is true, a name is generated using the release name
3004 # Annotations to add to database cleanup cronjob kubernetes service account.
3007 # Detailed default security context for database cleanup for container level
3011 # container level lifecycle hooks
3012 containerLifecycleHooks: {}
3013 # Specify history limit
3014 # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved.
3015 failedJobsHistoryLimit: 1
3016 successfulJobsHistoryLimit: 1
3017# Configuration for postgresql subchart
3018# Uses bitnamilegacy images to avoid Bitnami licensing restrictions
3019# Not recommended for production - use external database instead
3023 repository: bitnamilegacy/postgresql
3024 tag: "16.1.0-debian-11-r15"
3026 enablePostgresUser: true
3027 postgresPassword: postgres
3030# Config settings to go into the mounted airflow.cfg
3032# Please note that these values are passed through the `tpl` function, so are
3033# all subject to being rendered as go templates. If you need to include a
3034# literal `{{` in a value, it must be expressed like this:
3036# a: '{{ "{{ not a template }}" }}'
3038# Do not set config containing secrets via plain text values, use Env Var or k8s secret object
3039# yamllint disable rule:line-length
3042 dags_folder: '{{ include "airflow_dags" . }}'
3043 # This is ignored when used with the official Docker image
3044 load_examples: 'False'
3045 executor: '{{ .Values.executor }}'
3046 auth_manager: "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
3048 remote_logging: '{{- ternary "True" "False" (or .Values.elasticsearch.enabled .Values.opensearch.enabled) }}'
3049 colored_console_log: 'False'
3051 statsd_on: '{{ ternary "True" "False" .Values.statsd.enabled }}'
3053 statsd_prefix: airflow
3054 statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
3056 enable_proxy_fix: 'True'
3059 enable_proxy_fix: 'True'
3061 flower_url_prefix: '{{ ternary "" .Values.ingress.flower.path (eq .Values.ingress.flower.path "/") }}'
3062 worker_concurrency: 16
3063 sync_parallelism: '{{ include "cpu_count" (((.Values.scheduler).resources).limits).cpu }}'
3065 standalone_dag_processor: '{{ ternary "True" "False" (or (semverCompare ">=3.0.0" .Values.airflowVersion) (.Values.dagProcessor.enabled | default false)) }}'
3067 # Dag bundle configuration list in JSON string format.
3068 # This is automatically generated from .Values.dagProcessor.dagBundleConfigList using the dag_bundle_config_list helper function.
3069 # Deprecated: Direct override via config.dag_processor.dag_bundle_config_list is deprecated.
3070 # Use dagProcessor.dagBundleConfigList instead.
3071 dag_bundle_config_list: '{{ include "dag_bundle_config_list" . }}'
3074 log_id_template: "{dag_id}_{task_id}_{execution_date}_{try_number}"
3075 elasticsearch_configs:
3078 retry_timeout: 'True'
3080 keytab: '{{ .Values.kerberos.keytabPath }}'
3081 reinit_frequency: '{{ .Values.kerberos.reinitFrequency }}'
3082 principal: '{{ .Values.kerberos.principal }}'
3083 ccache: '{{ .Values.kerberos.ccacheMountPath }}/{{ .Values.kerberos.ccacheFileName }}'
3084 celery_kubernetes_executor:
3085 kubernetes_queue: 'kubernetes'
3086 kubernetes_executor:
3087 namespace: '{{ .Release.Namespace }}'
3088 pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
3089 worker_container_repository: '{{ .Values.images.airflow.repository | default .Values.defaultAirflowRepository }}'
3090 worker_container_tag: '{{ .Values.images.airflow.tag | default .Values.defaultAirflowTag }}'
3091 multi_namespace_mode: '{{ ternary "True" "False" .Values.multiNamespaceMode }}'
3092# yamllint enable rule:line-length
3094# Whether Airflow can launch workers and/or pods in multiple namespaces
3095# If true, it creates ClusterRole/ClusterRolebinding (with access to entire cluster)
3096multiNamespaceMode: false
3097# `podTemplate` is a templated string which overwrites the content of `pod_template_file.yaml` used by
3098# KubernetesExecutor. The default `podTemplate` will use `workers` configuration parameters
3099# (e.g. `workers.resources`). As such, you normally won't need to override this directly, however,
3100# you can still provide a completely custom `pod_template_file.yaml` if desired.
3101# If not set, a default one is created using `files/pod-template-file.kubernetes-helm-yaml`.
3103# The following example is NOT functional, but meant to be illustrative of how you can provide a custom
3104# `pod_template_file`. You're better off starting with the default in
3105# `files/pod-template-file.kubernetes-helm-yaml` and modifying from there.
3106# We will set `priorityClassName` in this example:
3111# name: placeholder-name
3115# release: {{ .Release.Name }}
3117# priorityClassName: high-priority
3124 # Where dags volume will be mounted. Works for both persistence and gitSync.
3125 # If not specified, dags mount path will be set to $AIRFLOW_HOME/dags
3128 # Annotations for dags PVC
3130 # Enable persistent volume for storing dags
3132 # Volume size for dags
3134 # If using a custom storageClass, pass name here
3136 # access mode of the persistent volume
3137 accessMode: ReadWriteOnce
3138 ## the name of an existing PVC to use
3140 ## optional subpath for dag volume mount
3144 # git repo clone url
3145 # ssh example: git@github.com:apache/airflow.git
3146 # https example: https://github.com/apache/airflow.git
3147 repo: https://github.com/apache/airflow.git
3150 # The git revision (branch, tag, or hash) to check out, v4 only
3153 # the number of consecutive failures allowed before aborting
3155 # subpath within the repo where dags are located
3156 # should be "" if dags are at repo root
3157 subPath: "tests/dags"
3158 # if your repo needs a user name password
3159 # you can load them to a k8s secret like the one below
3164 # name: git-credentials
3167 # GIT_SYNC_USERNAME: <base64_encoded_git_username>
3168 # GIT_SYNC_PASSWORD: <base64_encoded_git_password>
3170 # GITSYNC_USERNAME: <base64_encoded_git_username>
3171 # GITSYNC_PASSWORD: <base64_encoded_git_password>
3172 # and specify the name of the secret below
3174 # credentialsSecret: git-credentials
3177 # If you are using an ssh clone url, you can load
3178 # the ssh private key to a k8s secret like the one below
3183 # name: airflow-ssh-secret
3185 # # key needs to be gitSshKey
3186 # gitSshKey: <base64_encoded_data>
3187 # and specify the name of the secret below
3188 # sshKeySecret: airflow-ssh-secret
3190 # Or set sshKeySecret with your key
3192 # -----BEGIN {OPENSSH PRIVATE KEY}-----
3194 # -----END {OPENSSH PRIVATE KEY}-----
3196 # If you are using an ssh private key, you can additionally
3197 # specify the content of your known_hosts file, example:
3200 # <host1>,<ip1> <key1>
3201 # <host2>,<ip2> <key2>
3203 # interval between git sync attempts in seconds
3204 # high values are more likely to cause DAGs to become out of sync between different components
3205 # low values cause more traffic to the remote git repository
3206 # Go-style duration string (e.g. "100ms" or "0.1s" = 100ms).
3207 # For backwards compatibility, wait will be used if it is specified.
3210 # add variables from secret into gitSync containers, such proxy-config
3214 # name: 'proxy-config'
3216 containerName: git-sync
3218 # When not set, the values defined in the global securityContext will be used
3225 # container level lifecycle hooks
3226 containerLifecycleHooks: {}
3227 # Git-Sync liveness service http bind port
3229 # Setting this to true, will remove readinessProbe usage and configure livenessProbe to
3230 # use a dedicated Git-Sync liveness service. In future, behaviour with value true will be
3231 # default one and old one will be removed
3232 recommendedProbeSetting: false
3236 initialDelaySeconds: 0
3238 failureThreshold: 10
3239 # As Git-Sync is not service-type object, the usage of this section will be removed.
3240 # By setting dags.gitSync.recommendedProbeSetting to true, you will enable future behaviour.
3242 # The behaviour of the livenessProbe will change with the next release of Helm Chart.
3243 # To enable future behaviour set dags.gitSync.recommendedProbeSetting to true.
3244 # New behaviour uses the recommended liveness configuration by using Git-Sync built-in
3249 # initialDelaySeconds: 0
3251 # failureThreshold: 10
3253 # Mount additional volumes into git-sync. It can be templated like in the following example:
3254 # extraVolumeMounts:
3255 # - name: my-templated-extra-volume
3256 # mountPath: "{{ .Values.my_custom_path }}"
3258 extraVolumeMounts: []
3260 # Supported env vars for gitsync can be found at https://github.com/kubernetes/git-sync
3264 # Configuration for empty dir volume
3276 # Configuration for empty dir volume (if logs.persistence.enabled == false)
3281 # Enable persistent volume for storing logs
3283 # Volume size for logs
3285 # Annotations for the logs PVC
3287 # If using a custom storageClass, pass name here
3289 ## the name of an existing PVC to use
3291 ## the subpath of the existing PVC to use