| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| --- |
| # Default values for Airflow. |
| # This is a YAML-formatted file. |
| # Declare variables to be passed into your templates. |
| |
| # Provide a name to substitute for the full names of resources |
| fullnameOverride: "" |
| |
| # Provide a name to substitute for the name of the chart |
| nameOverride: "" |
| |
| # Use standard naming for all resources using airflow.fullname template |
| # Consider removing this later and default it to true |
| # to make this chart follow standard naming conventions using the fullname template. |
| # For now this is an opt-in switch for backwards compatibility to leverage the standard naming convention |
| # and being able to use fully fullnameOverride and nameOverride in all resources |
| # For new installations - it is recommended to set it to True to follow standard naming conventions |
| # For existing installations, this will rename and redeploy your resources with the new names. Be aware that |
| # this will recreate your Deployment/StatefulSets along with their persistent volume claims and data storage |
| # migration may be needed to keep your old data |
| useStandardNaming: false |
| |
| # Max number of old replicasets to retain. Can be overridden by each Deployment's revisionHistoryLimit |
| revisionHistoryLimit: ~ |
| |
| # User and group of Airflow user |
| uid: 50000 |
| gid: 0 |
| |
| # Detailed default security context for Airflow Deployments |
| securityContexts: |
| pod: {} |
| containers: {} |
| |
| # Global container lifecycle hooks for Airflow containers |
| containerLifecycleHooks: {} |
| |
| # Airflow home directory |
| # Used for mount paths |
| airflowHome: /opt/airflow |
| |
| # Default Airflow repository -- overridden by all the specific images below |
| defaultAirflowRepository: apache/airflow |
| |
| # Default Airflow tag to deploy |
| defaultAirflowTag: "3.3.1" |
| |
| # Default Airflow digest. If specified, it takes precedence over tag |
| defaultAirflowDigest: ~ |
| |
| # Airflow version (Used to make some decisions based on Airflow Version being deployed) |
| # Version 3.1.0 and above is supported. |
| airflowVersion: "3.3.1" |
| |
| images: |
| airflow: |
| repository: ~ |
| tag: ~ |
| # Specifying digest takes precedence over tag. |
| digest: ~ |
| pullPolicy: IfNotPresent |
| # To avoid images with user code, you can turn this to 'true' and |
| # all the 'run-airflow-migrations' and 'wait-for-airflow-migrations' jobs/containers |
| # will use the images from 'defaultAirflowRepository:defaultAirflowTag' values |
| # to run and wait for DB migrations . |
| useDefaultImageForMigration: false |
| # timeout (in seconds) for airflow-migrations to complete |
| migrationsWaitTimeout: 60 |
| pod_template: |
| # Note that `images.pod_template.repository`, `images.pod_template.tag` and `images.pod_template.digest` |
| # parameters can be overridden in `config.kubernetes_executor` section. So for these parameters |
| # to have effect `config.kubernetes_executor.worker_container_repository` and |
| # `config.kubernetes_executor.worker_container_tag` must be not set . |
| repository: ~ |
| tag: ~ |
| # Specifying digest takes precedence over tag. |
| digest: ~ |
| pullPolicy: IfNotPresent |
| flower: |
| repository: ~ |
| tag: ~ |
| pullPolicy: IfNotPresent |
| statsd: |
| repository: quay.io/prometheus/statsd-exporter |
| tag: v0.30.0 |
| pullPolicy: IfNotPresent |
| redis: |
| repository: redis |
| # Redis is limited to 7.2-bookworm due to licencing change |
| # https://redis.io/blog/redis-adopts-dual-source-available-licensing/ |
| tag: 7.2-bookworm |
| pullPolicy: IfNotPresent |
| pgbouncer: |
| repository: apache/airflow |
| tag: airflow-pgbouncer-2026.04.17-1.23.1 |
| pullPolicy: IfNotPresent |
| pgbouncerExporter: |
| repository: apache/airflow |
| tag: airflow-pgbouncer-exporter-2026.04.17-0.18.0 |
| pullPolicy: IfNotPresent |
| gitSync: |
| repository: registry.k8s.io/git-sync/git-sync |
| tag: v4.4.2 |
| pullPolicy: IfNotPresent |
| otelCollector: |
| repository: otel/opentelemetry-collector-contrib |
| tag: "0.70.0" |
| pullPolicy: IfNotPresent |
| |
| # Select certain nodes for Airflow pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| schedulerName: ~ |
| |
| # Add common labels to all objects and pods defined in this chart. |
| labels: {} |
| # Whenever service links should be added to each pod. |
| enableServiceLinks: false |
| |
| # Specify the ip family policy to configure dual-stack networking for all Services. |
| # See https://kubernetes.io/docs/concepts/services-networking/dual-stack/ |
| ipFamilyPolicy: ~ |
| |
| # List of IP families for all Services (e.g., ["IPv4"] or ["IPv6"] or ["IPv4","IPv6"]). |
| ipFamilies: [] |
| |
| # List of existing Kubernetes secrets containing Base64 encoded credentials to connect to private |
| # registries. Items can be either strings or {name: secret} objects. |
| imagePullSecrets: [] |
| |
| # Ingress configuration |
| ingress: |
| # Configs for the Ingress of the API Server (Airflow 3+) |
| apiServer: |
| # Enable API Server ingress resource. |
| # Mutually exclusive with `apiServer.httpRoute.enabled` (Gateway API); enable only one of them. |
| enabled: false |
| |
| # Annotations for the API Server Ingress |
| annotations: {} |
| |
| # The path for the API Server Ingress |
| path: "/" |
| |
| # The pathType for the above path |
| pathType: "ImplementationSpecific" |
| |
| # The hostnames or hosts configuration for the API Server Ingress (templated) |
| hosts: [] |
| # - name: "" |
| # # configs for API Server Ingress TLS |
| # tls: |
| # # Enable TLS termination for the API Server Ingress |
| # enabled: false |
| # # The name of a pre-created Secret containing a TLS private key and certificate |
| # secretName: "" |
| |
| # The Ingress Class for the API Server Ingress |
| ingressClassName: "" |
| |
| # HTTP paths to add to the API Server Ingress before the default path |
| precedingPaths: [] |
| |
| # HTTP paths to add to the API Server Ingress after the default path |
| succeedingPaths: [] |
| |
| # Configs for the Ingress of the web Service (Airflow <3.0.0) |
| web: |
| # Enable web ingress resource |
| enabled: false |
| |
| # Annotations for the web Ingress |
| annotations: {} |
| |
| # The path for the web Ingress |
| path: "/" |
| |
| # The pathType for the above path |
| pathType: "ImplementationSpecific" |
| |
| # The hostnames or hosts configuration for the web Ingress (templated) |
| hosts: [] |
| # - name: "" |
| # # Configs for web Ingress TLS |
| # tls: |
| # # Enable TLS termination for the web Ingress |
| # enabled: false |
| # # The name of a pre-created Secret containing a TLS private key and certificate |
| # secretName: "" |
| |
| # The Ingress Class for the web Ingress |
| ingressClassName: "" |
| |
| # HTTP paths to add to the web Ingress before the default path |
| precedingPaths: [] |
| |
| # HTTP paths to add to the web Ingress after the default path |
| succeedingPaths: [] |
| |
| # Configs for the Ingress of the flower Service |
| flower: |
| # Enable Flower ingress resource. |
| # Mutually exclusive with `flower.httpRoute.enabled` (Gateway API); enable only one of them. |
| enabled: false |
| |
| # Annotations for the flower Ingress |
| annotations: {} |
| |
| # The path for the flower Ingress |
| path: "/" |
| |
| # The pathType for the above path |
| pathType: "ImplementationSpecific" |
| |
| # The hostnames or hosts configuration for the flower Ingress (templated) |
| hosts: [] |
| # - name: "" |
| # tls: |
| # # Enable TLS termination for the flower Ingress |
| # enabled: false |
| # # The name of a pre-created Secret containing a TLS private key and certificate |
| # secretName: "" |
| |
| # The Ingress Class for the flower Ingress |
| ingressClassName: "" |
| |
| # Configs for the Ingress of the StatsD Service |
| statsd: |
| # Enable web ingress resource |
| enabled: false |
| |
| # Annotations for the StatsD Ingress |
| annotations: {} |
| |
| # The path for the StatsD Ingress |
| path: "/metrics" |
| |
| # The pathType for the above path |
| pathType: "ImplementationSpecific" |
| |
| # The hostnames or hosts configuration for the StatsD Ingress (templated) |
| hosts: [] |
| # - name: "" |
| # tls: |
| # # Enable TLS termination for the StatsD Ingress |
| # enabled: false |
| # # The name of a pre-created Secret containing a TLS private key and certificate |
| # secretName: "" |
| |
| # The Ingress Class for the StatsD Ingress |
| ingressClassName: "" |
| |
| # Configs for the Ingress of the PgBouncer Service |
| pgbouncer: |
| # Enable web ingress resource |
| enabled: false |
| |
| # Annotations for the PgBouncer Ingress |
| annotations: {} |
| |
| # The path for the PgBouncer Ingress |
| path: "/metrics" |
| |
| # The pathType for the above path |
| pathType: "ImplementationSpecific" |
| |
| # The hostnames or hosts configuration for the PgBouncer Ingress (templated) |
| hosts: [] |
| # - name: "" |
| # tls: |
| # # Enable TLS termination for the PgBouncer Ingress |
| # enabled: false |
| # # The name of a pre-created Secret containing a TLS private key and certificate |
| # secretName: "" |
| |
| # The Ingress Class for the PgBouncer Ingress |
| ingressClassName: "" |
| |
| # Network policy configuration |
| networkPolicies: |
| # Enabled network policies |
| enabled: false |
| |
| # Extra annotations to apply to all Airflow pods (templated) |
| airflowPodAnnotations: {} |
| |
| # Extra annotations to apply to main Airflow ConfigMap |
| airflowConfigAnnotations: {} |
| |
| # 'airflow_local_settings' file as a string (templated) |
| airflowLocalSettings: ~ |
| |
| # Enable RBAC (default on most clusters these days) |
| rbac: |
| # Specifies whether RBAC resources should be created |
| create: true |
| createSCCRoleBinding: false |
| |
| # Airflow executor |
| # One or multiple of: LocalExecutor, CeleryExecutor, KubernetesExecutor |
| # Specify executors in a prioritized list to leverage multiple execution environments as needed: |
| # https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/index.html#using-multiple-executors-concurrently |
| executor: "CeleryExecutor" |
| |
| # If this is true and using LocalExecutor/KubernetesExecutor, the scheduler's |
| # Service Account will have access to communicate with the api-server and launch pods/jobs. |
| # If this is true and using CeleryExecutor/KubernetesExecutor, the workers |
| # will be able to launch pods/jobs. |
| allowPodLaunching: true |
| allowJobLaunching: false |
| |
| # Environment variables for all Airflow containers |
| env: [] |
| # - name: "" |
| # value: "" |
| |
| # Volumes for all Airflow containers (templated) |
| volumes: [] |
| |
| # VolumeMounts for all Airflow containers (templated) |
| volumeMounts: [] |
| |
| # Secrets for all Airflow containers |
| secret: [] |
| # - envName: "" |
| # secretName: "" |
| # secretKey: "" |
| |
| # Enables selected built-in secrets that are set via environment variables by default. |
| # Those secrets are provided by the Helm Chart secrets by default but in some cases you |
| # might want to provide some of those variables with _CMD or _SECRET variable, and you should |
| # in this case disable setting of those variables by setting the relevant configuration to 'false'. |
| enableBuiltInSecretEnvVars: |
| AIRFLOW__CORE__FERNET_KEY: true |
| AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: true |
| AIRFLOW_CONN_AIRFLOW_DB: true |
| AIRFLOW__API__SECRET_KEY: true |
| AIRFLOW__API_AUTH__JWT_SECRET: true |
| AIRFLOW__CELERY__RESULT_BACKEND: true |
| AIRFLOW__CELERY__BROKER_URL: true |
| AIRFLOW__ELASTICSEARCH__HOST: true |
| AIRFLOW__OPENSEARCH__HOST: true |
| |
| # Priority Classes that will be installed by charts. |
| # Ideally, there should be an entry for dagProcessor, flower, |
| # pgbouncer, scheduler, statsd, triggerer, api-server, worker. |
| # The format for priorityClasses is an array with each element having: |
| # * name is the name of the priorityClass. Ensure the same name is given to the respective section as well |
| # * preemptionPolicy for the priorityClass |
| # * value is the preemption value for the priorityClass |
| priorityClasses: [] |
| # - name: class1 (if this is for dagProcessor, ensure overriding `dagProcessor.priorityClass` too) |
| # preemptionPolicy: PreemptLowerPriority |
| # value: 10000 |
| # - name: class2 |
| # preemptionPolicy: Never |
| # value: 100000 |
| |
| # Extra secrets that will be managed by the chart |
| # (You can use them with `extraEnv` or `extraEnvFrom` or some of the `extraVolumes` values). |
| # The format for secret data is "key/value" where |
| # * key (templated) is the name of the secret that will be created |
| # * value: an object with the standard 'data' or 'stringData' key (or both). |
| # The value associated with those keys must be a string (templated) |
| extraSecrets: {} |
| # extraSecrets: |
| # '{{ .Release.Name }}-airflow-connections': |
| # type: 'Opaque' |
| # labels: |
| # my.custom.label/v1: my_custom_label_value_1 |
| # data: | |
| # AIRFLOW_CONN_GCP: 'base64_encoded_gcp_conn_string' |
| # AIRFLOW_CONN_AWS: 'base64_encoded_aws_conn_string' |
| # stringData: | |
| # AIRFLOW_CONN_OTHER: 'other_conn' |
| # '{{ .Release.Name }}-other-secret-name-suffix': |
| # data: | |
| # ... |
| # 'proxy-config': |
| # stringData: | |
| # HTTP_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080 |
| # HTTPS_PROXY: http://proxy_user:proxy_password@192.168.0.10:2080 |
| # NO_PROXY: "localhost,127.0.0.1,.svc.cluster.local,kubernetes.default.svc" |
| |
| # Extra ConfigMaps that will be managed by the chart |
| # (You can use them with `extraEnv` or `extraEnvFrom` or some of the `extraVolumes` values). |
| # The format for ConfigMap data is "key/value" where |
| # * key (templated) is the name of the ConfigMap that will be created |
| # * value: an object with the standard 'data' key. |
| # The value associated with this keys must be a string (templated) |
| extraConfigMaps: {} |
| # extraConfigMaps: |
| # '{{ .Release.Name }}-airflow-variables': |
| # labels: |
| # my.custom.label/v2: my_custom_label_value_2 |
| # data: | |
| # AIRFLOW_VAR_HELLO_MESSAGE: "Hi!" |
| # AIRFLOW_VAR_KUBERNETES_NAMESPACE: "{{ .Release.Namespace }}" |
| |
| # Extra env 'items' that will be added to the definition of Airflow containers |
| # a string is expected (templated). |
| # TODO: difference from `env`? This is a templated string. Probably should template `env` and remove this. |
| extraEnv: ~ |
| # extraEnv: | |
| # - name: AIRFLOW__CORE__LOAD_EXAMPLES |
| # value: 'True' |
| |
| # Extra envFrom 'items' that will be added to the definition of Airflow containers |
| # A string is expected (templated). |
| extraEnvFrom: ~ |
| # extraEnvFrom: | |
| # - secretRef: |
| # name: '{{ .Release.Name }}-airflow-connections' |
| # - configMapRef: |
| # name: '{{ .Release.Name }}-airflow-variables' |
| |
| # Airflow database & redis config |
| data: |
| # If secret name is provided, secret itself has to be created manually with 'connection' key like: |
| # |
| # kind: Secret |
| # apiVersion: v1 |
| # metadata: |
| # name: custom-airflow-metadata-secret |
| # type: Opaque |
| # data: |
| # connection: base64_encoded_connection_string |
| # |
| # The 'connection' key is base64-encoded SQLAlchemy connection string, e.g.: |
| # postgresql+psycopg://airflow:password@postgres/airflow (Airflow >=3.4.0) |
| # postgresql+psycopg2://airflow:password@postgres/airflow (Airflow <3.4.0, or with the [psycopg2] extra) |
| metadataSecretName: ~ |
| |
| # When `metadataSecretName` is set, the key in that secret contains the connection string. |
| # Useful when the secret is managed externally, e.g. CloudNativePG stores the URI under the "uri" key. |
| metadataSecretKey: ~ |
| |
| # If not set, falls back to metadataSecretName. The secret must contain 'connection' key which is |
| # a base64-encoded connection string, e.g.: |
| # postgresql+psycopg://user:password@host/db (Airflow >=3.4.0) |
| # postgresql+psycopg2://user:password@host/db (Airflow <3.4.0, or with the [psycopg2] extra) |
| resultBackendSecretName: ~ |
| |
| # When `resultBackendSecretName` is set, the key in that secret contains the result backend |
| # connection string. |
| resultBackendSecretKey: ~ |
| |
| brokerUrlSecretName: ~ |
| |
| # When `brokerUrlSecretName` is set, the key in that secret contains the broker URL. |
| brokerUrlSecretKey: ~ |
| |
| # If `metadataSecretName` is not specified, pass connection values below |
| metadataConnection: |
| user: postgres |
| pass: postgres |
| protocol: postgresql |
| host: ~ |
| port: 5432 |
| db: postgres |
| sslmode: disable |
| # Add custom annotations to the metadata connection secret |
| secretAnnotations: {} |
| |
| # `resultBackendConnection` defaults to the same database as metadataConnection |
| resultBackendConnection: ~ |
| # or, you can use a different database like: |
| # resultBackendConnection: |
| # user: postgres |
| # pass: postgres |
| # protocol: postgresql |
| # host: ~ |
| # port: 5432 |
| # db: postgres |
| # sslmode: disable |
| |
| # Add custom annotations to the result backend connection secret |
| resultBackendConnectionSecretAnnotations: {} |
| |
| # Note: `brokerUrl` can only be set during 'helm install', not 'helm upgrade' command |
| brokerUrl: ~ |
| |
| # Add custom annotations to the broker url secret |
| brokerUrlSecretAnnotations: {} |
| |
| # Fernet key settings |
| # Note: `fernetKey` can only be set during 'helm install', not 'helm upgrade' command |
| fernetKey: ~ |
| |
| # If set, the secret must contain a 'fernet-key' key with a base64-encoded key value |
| fernetKeySecretName: ~ |
| # Fernet key secret example: |
| # kind: Secret |
| # apiVersion: v1 |
| # metadata: |
| # name: custom-fernet-key-secret |
| # type: Opaque |
| # data: |
| # fernet-key: <base64_encoded_fernet_key> |
| |
| # Add custom annotations to the fernet key secret |
| fernetKeySecretAnnotations: {} |
| |
| # Flask secret key for Airflow 3+ Api: '[api] secret_key' in airflow.cfg |
| apiSecretKey: ~ |
| |
| # Add custom annotations to the api secret |
| apiSecretAnnotations: {} |
| |
| # If set, the secret must contain a key 'api-secret-key' with a base64-encoded key value |
| apiSecretKeySecretName: ~ |
| # API secret key example: |
| # kind: Secret |
| # apiVersion: v1 |
| # metadata: |
| # name: custom-api-secret |
| # type: Opaque |
| # data: |
| # api-secret-key: <base64_encoded_api_secret_key> |
| |
| # Secret key used to encode and decode JWTs: '[api_auth] jwt_secret' in airflow.cfg |
| # Note: It is not advised to use in production as during helm upgrade it will be changed |
| # which can cause dag failures during component rollouts |
| jwtSecret: ~ |
| |
| # Add custom annotations to the JWT secret |
| jwtSecretAnnotations: {} |
| |
| # If set, the secret must contain a key 'jwt-secret' with a base64-encoded key value |
| jwtSecretName: ~ |
| # JWT secret example: |
| # kind: Secret |
| # apiVersion: v1 |
| # metadata: |
| # name: custom-jwt-secret |
| # type: Opaque |
| # data: |
| # jwt-secret: <base64_encoded_jwt_secret> |
| |
| # In order to use kerberos you need to create secret containing the keytab file. |
| # The secret name should follow naming convention of the application where resources are |
| # name '{{ .Release.Name }}-<postfix>'. In case of the keytab file, the '<postfix>' is "kerberos-keytab". |
| # If your release is named "my-release" the name of the secret should be "my-release-kerberos-keytab". |
| # |
| # The Keytab content should be available in the "kerberos.keytab" key of the secret. |
| # apiVersion: v1 |
| # kind: Secret |
| # data: |
| # kerberos.keytab: <base64_encoded keytab file content> |
| # type: Opaque |
| # |
| # If you have keytab file you can do it with similar: |
| # kubectl create secret generic {{ .Release.Name }}-kerberos-keytab --from-file=kerberos.keytab |
| # |
| # Alternatively, instead of manually creating the secret, it is possible to specify |
| # `kerberos.keytabBase64Content` parameter. This parameter should contain base64 encoded keytab. |
| kerberos: |
| enabled: false |
| ccacheMountPath: /var/kerberos-ccache |
| ccacheFileName: cache |
| configPath: /etc/krb5.conf |
| keytabBase64Content: ~ |
| keytabPath: /etc/airflow.keytab |
| principal: airflow@FOO.COM |
| reinitFrequency: 3600 |
| config: | |
| # This is an example config showing how you can use templating and how "example" config |
| # might look like. It works with the test kerberos server that we are using during integration |
| # testing at Apache Airflow (see 'scripts/ci/docker-compose/integration-kerberos.yml' but in |
| # order to make it production-ready you must replace it with your own configuration that |
| # Matches your kerberos deployment. Administrators of your Kerberos instance should |
| # provide the right configuration. |
| |
| [logging] |
| default = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_libs.log" |
| kdc = "FILE:{{ template "airflow_logs_no_quote" . }}/kerberos_kdc.log" |
| admin_server = "FILE:{{ template "airflow_logs_no_quote" . }}/kadmind.log" |
| |
| [libdefaults] |
| default_realm = FOO.COM |
| ticket_lifetime = 10h |
| renew_lifetime = 7d |
| forwardable = true |
| |
| [realms] |
| FOO.COM = { |
| kdc = kdc-server.foo.com |
| admin_server = admin_server.foo.com |
| } |
| |
| # Airflow Worker Config |
| workers: |
| celery: |
| # Number of Airflow Celery workers |
| replicas: 1 |
| |
| # Max number of old Airflow Celery workers ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use when running Airflow Celery workers (templated) |
| command: ~ |
| |
| # Args to use when running Airflow Celery workers (templated) |
| args: |
| - "bash" |
| - "-c" |
| # The format below is necessary to get `helm lint` happy |
| - |- |
| exec \ |
| airflow celery worker |
| {{- if and .Values.workers.celery.queue (ne .Values.workers.celery.queue "default") }} |
| {{- " -q " }}{{ .Values.workers.celery.queue }} |
| {{- end }} |
| |
| # If the Airflow Celery worker stops responding for 5 minutes (5*60s) |
| # kill the worker and let Kubernetes restart it |
| livenessProbe: |
| enabled: true |
| initialDelaySeconds: 10 |
| timeoutSeconds: 20 |
| failureThreshold: 5 |
| periodSeconds: 60 |
| command: ~ |
| |
| # Enable the default workers defined by the root `workers` and `workers.celery` |
| # configurations to be created. |
| # If false, only dedicated workers defined in 'sets' will be created. |
| enableDefault: true |
| |
| # Queue name for the default workers |
| queue: "default" |
| |
| # List of worker sets. Each item can overwrite values from the parent `workers` and `workers.celery` |
| # section. |
| sets: [] |
| # sets: |
| # - name: highcpu |
| # replicas: 2 |
| # queue: "highcpu" |
| # resources: |
| # requests: |
| # memory: "2Gi" |
| # cpu: "4000m" |
| # limits: |
| # memory: "4Gi" |
| # cpu: "8000m" |
| # - name: highmem |
| # replicas: 2 |
| # queue: "highmem" |
| # resources: |
| # requests: |
| # memory: "4Gi" |
| # cpu: "2000m" |
| # limits: |
| # memory: "8Gi" |
| # cpu: "4000m" |
| |
| # Update Strategy when Airflow Celery worker is deployed as a StatefulSet |
| updateStrategy: ~ |
| # Update Strategy when Airflow Celery worker is deployed as a Deployment |
| strategy: |
| rollingUpdate: |
| maxSurge: "100%" |
| maxUnavailable: "50%" |
| |
| # Allow relaxing ordering guarantees for Airflow Celery worker |
| # while preserving its uniqueness and identity |
| # podManagementPolicy: Parallel |
| |
| # Detailed default security context for Airflow Celery workers for container and pod level |
| # If not set, the values from `workers.securityContexts` section will be used. |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level Lifecycle Hooks definition for Airflow Celery workers |
| containerLifecycleHooks: {} |
| |
| # Airflow Celery workers pod disruption budget |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: ~ |
| |
| # Create Service Account for Airflow Celery workers |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| annotations: {} |
| |
| # Allow KEDA autoscaling for Airflow Celery workers |
| keda: |
| enabled: false |
| |
| namespaceLabels: {} |
| |
| # How often KEDA polls the airflow DB to report new scale requests to the HPA |
| pollingInterval: 5 |
| |
| # How many seconds KEDA will wait before scaling to zero. |
| # Note: HPA has a separate cooldown period for scale-downs |
| cooldownPeriod: 30 |
| |
| # Minimum number of Airflow Celery workers created by KEDA |
| minReplicaCount: 0 |
| |
| # Maximum number of Airflow Celery workers created by KEDA |
| maxReplicaCount: 10 |
| |
| # Specify HPA related options |
| advanced: {} |
| # horizontalPodAutoscalerConfig: |
| # behavior: |
| # scaleDown: |
| # stabilizationWindowSeconds: 300 |
| # policies: |
| # - type: Percent |
| # value: 100 |
| # periodSeconds: 15 |
| |
| # Query to use for KEDA autoscaling. Must return a single integer |
| query: >- |
| 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.celery.queue -}} |
| {{- if $i }},{{ end }}'{{ $q | trim }}' |
| {{- end -}} |
| ) |
| {{- 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 }} |
| |
| # Weather to use PGBouncer to connect to the database or not when it is enabled |
| # This configuration will be ignored if PGBouncer is not enabled |
| usePgbouncer: true |
| |
| # Allow HPA for Airflow Celery workers (KEDA must be disabled) |
| hpa: |
| enabled: false |
| |
| # Minimum number of Airflow Celery workers created by HPA |
| minReplicaCount: 0 |
| |
| # Maximum number of Airflow Celery workers created by HPA |
| maxReplicaCount: 5 |
| |
| # Specifications for which to use to calculate the desired replica count |
| metrics: |
| - type: Resource |
| resource: |
| name: cpu |
| target: |
| type: Utilization |
| averageUtilization: 80 |
| |
| # Scaling behavior of the target in both Up and Down directions |
| behavior: {} |
| |
| # Persistence volume configuration for Airflow Celery workers |
| persistence: |
| # Enable persistent volumes |
| enabled: true |
| |
| # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed |
| persistentVolumeClaimRetentionPolicy: ~ |
| # persistentVolumeClaimRetentionPolicy: |
| # whenDeleted: Delete |
| # whenScaled: Delete |
| |
| # Volume size for Airflow Celery worker StatefulSet |
| size: 100Gi |
| |
| # If using a custom storageClass, pass name ref to all StatefulSets here |
| storageClassName: ~ |
| |
| # Execute init container to chown log directory. |
| # This is currently only needed in kind, due to usage |
| # of local-path provisioner. |
| fixPermissions: false |
| |
| # Annotations to add to Airflow Celery worker volumes |
| annotations: {} |
| |
| # Detailed default security context for persistence on container level |
| securityContexts: |
| container: {} |
| |
| # Kerberos sidecar configuration for Airflow Celery workers |
| kerberosSidecar: |
| # Enable kerberos sidecar |
| enabled: false |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for kerberos sidecar on container level |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Kerberos init container configuration for Airflow Celery workers |
| # If not set, the values from `workers.kerberosInitContainer` section will be used. |
| kerberosInitContainer: |
| # Enable kerberos init container |
| # If `workers.kerberosInitContainer.enabled` is set to True, this flag has no effect |
| enabled: false |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for kerberos init container |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Resource configuration for Airflow Celery workers |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Grace period for tasks to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 600 |
| |
| # This setting tells Kubernetes that its ok to evict when it wants to scale a node down |
| safeToEvict: false |
| |
| # Launch additional containers into Airflow Celery worker (templated) |
| extraContainers: [] |
| |
| # Add additional init containers into Airflow Celery workers (templated) |
| extraInitContainers: [] |
| |
| # Additional volumes attached to the Airflow Celery workers |
| extraVolumes: [] |
| # Mount additional volumes into workers pods. It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| |
| # Additional volume mounts attached to the Airflow Celery workers |
| extraVolumeMounts: [] |
| # Mount additional volumes into workers pods. It can be templated like in the following example: |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Expose additional ports of Airflow Celery workers. These can be used for additional metric collection. |
| extraPorts: [] |
| |
| # Select certain nodes for Airflow Celery worker pods |
| nodeSelector: {} |
| |
| runtimeClassName: ~ |
| |
| priorityClassName: ~ |
| |
| affinity: {} |
| # Default Airflow Celery worker affinity is: |
| # podAntiAffinity: |
| # preferredDuringSchedulingIgnoredDuringExecution: |
| # - podAffinityTerm: |
| # labelSelector: |
| # matchLabels: |
| # component: worker |
| # topologyKey: kubernetes.io/hostname |
| # weight: 100 |
| |
| tolerations: [] |
| |
| topologySpreadConstraints: [] |
| |
| # hostAliases to use in Airflow Celery worker pods |
| # See: |
| # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ |
| hostAliases: [] |
| # - ip: "127.0.0.2" |
| # hostnames: |
| # - "test.hostname.one" |
| # - ip: "127.0.0.3" |
| # hostnames: |
| # - "test.hostname.two" |
| |
| # Annotations for the Airflow Celery worker resource |
| annotations: {} |
| |
| # Pod annotations for the Airflow Celery workers (templated) |
| podAnnotations: {} |
| |
| # Labels specific to Airflow Celery workers objects |
| labels: {} |
| |
| # Log groomer configuration for Airflow Celery workers |
| logGroomerSidecar: |
| # Whether to deploy the Airflow Celery worker log groomer sidecar |
| enabled: true |
| |
| # Command to use when running the Airflow Celery worker log groomer sidecar (templated) |
| command: ~ |
| |
| # Args to use when running the Airflow Celery worker log groomer sidecar (templated) |
| args: ["bash", "/clean-logs"] |
| |
| # Number of days to retain logs |
| retentionDays: 15 |
| |
| # Number of minutes to retain logs. |
| # This can be used for finer granularity than days. |
| # Total retention is `retentionDays` + `retentionMinutes`. |
| retentionMinutes: 0 |
| |
| # Frequency to attempt to groom logs (in minutes) |
| frequencyMinutes: 15 |
| |
| # Max size of logs in bytes. 0 = disabled |
| maxSizeBytes: 0 |
| |
| # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set. |
| maxSizePercent: 0 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for `logGroomerSidecar` for container level |
| securityContexts: |
| container: {} |
| |
| env: [] |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Configuration of wait-for-airflow-migration init container for Airflow Celery workers |
| waitForMigrations: |
| # Whether to create init container to wait for db migrations |
| enabled: true |
| |
| env: [] |
| |
| # Detailed default security context for wait-for-airflow-migrations container |
| securityContexts: |
| container: {} |
| |
| # Additional env variable configuration for Airflow Celery workers |
| env: [] |
| |
| # Additional volume claim templates for Airflow Celery workers. |
| # Requires mounting of specified volumes under extraVolumeMounts. |
| volumeClaimTemplates: [] |
| # Volume Claim Templates example: |
| # volumeClaimTemplates: |
| # - metadata: |
| # name: data-volume-1 |
| # spec: |
| # storageClassName: "storage-class-1" |
| # accessModes: |
| # - "ReadWriteOnce" |
| # resources: |
| # requests: |
| # storage: "10Gi" |
| # - metadata: |
| # name: data-volume-2 |
| # spec: |
| # storageClassName: "storage-class-2" |
| # accessModes: |
| # - "ReadWriteOnce" |
| # resources: |
| # requests: |
| # storage: "20Gi" |
| |
| schedulerName: ~ |
| |
| kubernetes: |
| # Command to use in pod-template-file (templated) |
| command: ~ |
| |
| # Detailed default security context for pod-template-file for container and pod level |
| # If not set, the values from `workers.securityContexts` section will be used. |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level Lifecycle Hooks definition for pods created with pod-template-file |
| containerLifecycleHooks: {} |
| |
| # Create Service Account for pods created with pod-template-file |
| # When this section is specified, the Service Account is created from |
| # 'templates/workers/worker-kubernetes-serviceaccount.yaml' file |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| # If not specified, the `workers.serviceAccount.automountServiceAccountToken` value will be taken |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created. |
| # If not specified, the Service Account will be generated and used from |
| # 'templates/workers/worker-serviceaccount.yaml' file if `workers.serviceAccount.create` |
| # will be 'true' |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| # with Kubernetes dedicated name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| # If not specified, the `workers.serviceAccount.annotations` value will be taken |
| annotations: {} |
| |
| # Kerberos sidecar configuration for pods created with pod-template-file |
| kerberosSidecar: |
| # Enable kerberos sidecar |
| enabled: false |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for kerberos sidecar on container level |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Kerberos init container configuration for pods created with pod-template-file |
| # If not set, the values from `workers.kerberosInitContainer` section will be used. |
| kerberosInitContainer: |
| # Enable kerberos init container |
| # If `workers.kerberosInitContainer.enabled` is set to True, this flag has no effect |
| enabled: false |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for kerberos init container |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Resource configuration for pods created with pod-template-file |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Grace period for tasks to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 600 |
| |
| # This setting tells Kubernetes that its ok to evict when it wants to scale a node down |
| safeToEvict: false |
| |
| # Launch additional containers into pods created with pod-template-file (templated). |
| # Note: You are responsible for signaling sidecars to exit when the main |
| # container finishes so Airflow can continue the worker shutdown process! |
| extraContainers: [] |
| |
| # Add additional init containers into pods created with pod-template-file (templated) |
| extraInitContainers: [] |
| |
| # Additional volumes attached to the pods created with pod-template-file |
| extraVolumes: [] |
| # Mount additional volumes into workers pods. It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| |
| # Additional volume mounts attached to the pods created with pod-template-file |
| extraVolumeMounts: [] |
| # Mount additional volumes into workers pods. It can be templated like in the following example: |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for pods created with pod-template-file |
| nodeSelector: {} |
| |
| runtimeClassName: ~ |
| |
| priorityClassName: ~ |
| |
| affinity: {} |
| |
| tolerations: [] |
| |
| topologySpreadConstraints: [] |
| |
| # hostAliases to use in pods created with pod-template-file |
| # See: |
| # https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ |
| hostAliases: [] |
| # - ip: "127.0.0.2" |
| # hostnames: |
| # - "test.hostname.one" |
| # - ip: "127.0.0.3" |
| # hostnames: |
| # - "test.hostname.two" |
| |
| # Pod annotations for the pods created with pod-template-file (templated) |
| podAnnotations: {} |
| |
| # Labels specific to pods created with pod-template-file |
| labels: {} |
| |
| # Additional env variable configuration for pods created with pod-template-file |
| env: [] |
| |
| schedulerName: ~ |
| |
| # Airflow scheduler settings |
| scheduler: |
| enabled: true |
| # hostAliases for the scheduler pod |
| hostAliases: [] |
| # - ip: "127.0.0.1" |
| # hostnames: |
| # - "foo.local" |
| # - ip: "10.1.2.3" |
| # hostnames: |
| # - "foo.remote" |
| |
| # If the scheduler stops heartbeating for 5 minutes (5*60s) kill the |
| # scheduler and let Kubernetes restart it |
| livenessProbe: |
| initialDelaySeconds: 10 |
| timeoutSeconds: 20 |
| failureThreshold: 5 |
| periodSeconds: 60 |
| command: ~ |
| |
| # Wait for at most 1 minute (6*10s) for the scheduler container to startup. |
| # LivenessProbe kicks in after the first successful startupProbe |
| startupProbe: |
| initialDelaySeconds: 0 |
| failureThreshold: 6 |
| periodSeconds: 10 |
| timeoutSeconds: 20 |
| command: ~ |
| |
| # Amount of scheduler replicas |
| replicas: 1 |
| # Max number of old replicasets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use when running the Airflow scheduler (templated). |
| command: ~ |
| # Args to use when running the Airflow scheduler (templated). |
| args: ["bash", "-c", "exec airflow scheduler"] |
| |
| # Update Strategy when scheduler is deployed as a StatefulSet |
| # (when using LocalExecutor and `workers.persistence`) |
| updateStrategy: ~ |
| # Update Strategy when scheduler is deployed as a Deployment |
| # (when not using LocalExecutor and `workers.persistence`) |
| strategy: ~ |
| |
| # Detailed default security context for scheduler Deployments for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Grace period for tasks to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 10 |
| |
| # Create Service Account |
| serviceAccount: |
| # Affects all executors that launch pods |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to scheduler Kubernetes Service Account. |
| annotations: {} |
| |
| # Service Account Token Volume configuration |
| # This is only used when `automountServiceAccountToken` is 'false' |
| # and allows manual configuration of the Service Account token volume |
| serviceAccountTokenVolume: |
| # Enable manual Service Account token volume configuration |
| enabled: false |
| |
| # Path where the Service Account token should be mounted |
| mountPath: /var/run/secrets/kubernetes.io/serviceaccount |
| |
| # Name of the volume |
| volumeName: kube-api-access |
| |
| # Token expiration in seconds |
| expirationSeconds: 3600 |
| |
| # Audience for the token |
| audience: ~ |
| |
| # Scheduler pod disruption budget |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: 1 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # This setting tells Kubernetes that its ok to evict |
| # when it wants to scale a node down. |
| safeToEvict: true |
| |
| # Launch additional containers into scheduler (templated). |
| extraContainers: [] |
| # Add additional init containers into scheduler (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into scheduler. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for Airflow scheduler pods. |
| nodeSelector: {} |
| affinity: {} |
| # default scheduler affinity is: |
| # podAntiAffinity: |
| # preferredDuringSchedulingIgnoredDuringExecution: |
| # - podAffinityTerm: |
| # labelSelector: |
| # matchLabels: |
| # component: scheduler |
| # topologyKey: kubernetes.io/hostname |
| # weight: 100 |
| |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| # Annotations for scheduler Deployment |
| annotations: {} |
| |
| # Pod annotations for scheduler pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to scheduler objects and pods |
| labels: {} |
| |
| logGroomerSidecar: |
| # Whether to deploy the Airflow scheduler log groomer sidecar. |
| enabled: true |
| |
| # Command to use when running the Airflow scheduler log groomer sidecar (templated). |
| command: ~ |
| |
| # Args to use when running the Airflow scheduler log groomer sidecar (templated). |
| args: ["bash", "/clean-logs"] |
| |
| # Number of days to retain logs |
| retentionDays: 15 |
| |
| # Number of minutes to retain logs. |
| # This can be used for finer granularity than days. |
| # Total retention is `retentionDays` + `retentionMinutes`. |
| retentionMinutes: 0 |
| |
| # Frequency to attempt to groom logs, in minutes |
| frequencyMinutes: 15 |
| |
| # Max size of logs in bytes. 0 = disabled |
| maxSizeBytes: 0 |
| |
| # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set. |
| maxSizePercent: 0 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for `logGroomerSidecar` for container level |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| env: [] |
| |
| waitForMigrations: |
| # Whether to create init container to wait for db migrations |
| enabled: true |
| |
| env: [] |
| |
| # Detailed default security context for waitForMigrations for container level |
| securityContexts: |
| container: {} |
| |
| env: [] |
| |
| # Airflow create user job settings |
| createUserJob: |
| # Whether the create user job should be created |
| enabled: true |
| |
| # Create initial user. |
| defaultUser: |
| role: Admin |
| username: admin |
| email: admin@example.com |
| firstName: admin |
| lastName: user |
| password: admin |
| |
| # Limit the lifetime of the job object after it finished execution. |
| ttlSecondsAfterFinished: 300 |
| |
| # Command to use when running the create user job (templated). |
| command: ~ |
| |
| # Args to use when running the create user job (templated). |
| args: |
| - "bash" |
| - "-c" |
| # The format below is necessary to get `helm lint` happy |
| - |- |
| exec \ |
| airflow users create "$@" |
| - -- |
| # yamllint disable rule:line-length |
| - "-r" |
| - "{{ .Values.createUserJob.defaultUser.role }}" |
| - "-u" |
| - "{{ .Values.createUserJob.defaultUser.username }}" |
| - "-e" |
| - "{{ .Values.createUserJob.defaultUser.email }}" |
| - "-f" |
| - "{{ .Values.createUserJob.defaultUser.firstName }}" |
| - "-l" |
| - "{{ .Values.createUserJob.defaultUser.lastName }}" |
| - "-p" |
| - "{{ .Values.createUserJob.defaultUser.password }}" |
| |
| # Annotations on the create user job pod (templated) |
| annotations: {} |
| |
| # `jobAnnotations` are annotations on the create user job |
| jobAnnotations: {} |
| |
| restartPolicy: OnFailure |
| |
| # Labels specific to `createUserJob` objects and pods |
| labels: {} |
| |
| # Detailed default security context for `createUserJob` for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to create user Kubernetes Service Account. |
| annotations: {} |
| |
| # Launch additional containers into user creation job |
| extraContainers: [] |
| |
| # Add additional init containers into user creation job (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into user creation job. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| |
| # In case you need to disable the helm hooks that create the jobs after install. |
| # Disable this if you are e.g. using ArgoCD |
| useHelmHooks: true |
| |
| applyCustomEnv: true |
| |
| env: [] |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Airflow database migration job settings |
| migrateDatabaseJob: |
| enabled: true |
| |
| # Limit the lifetime of the job object after it finished execution. |
| ttlSecondsAfterFinished: 300 |
| |
| # Command to use when running the migrate database job (templated). |
| command: ~ |
| |
| # Args to use when running the migrate database job (templated). |
| args: |
| - "bash" |
| - "-c" |
| - >- |
| exec \ |
| |
| airflow db migrate |
| |
| # Annotations on the database migration pod (templated) |
| annotations: {} |
| |
| # `jobAnnotations` are annotations on the database migration job |
| jobAnnotations: {} |
| |
| restartPolicy: OnFailure |
| |
| # Labels specific to migrate database job objects and pods |
| labels: {} |
| |
| # Detailed default security context for `migrateDatabaseJob` for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to migrate database job Kubernetes Service Account. |
| annotations: {} |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Launch additional containers into database migration job |
| extraContainers: [] |
| |
| # Add additional init containers into migrate database job (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into database migration job. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| |
| # In case you need to disable the helm hooks that create the jobs after install. |
| # Disable this if you are using ArgoCD for example |
| useHelmHooks: true |
| |
| applyCustomEnv: true |
| env: [] |
| |
| apiServer: |
| enabled: true |
| |
| # Kubernetes Gateway API (HTTPRoute) configuration for the API server. |
| # Requires the Gateway API CRDs to be installed in the cluster |
| # (https://gateway-api.sigs.k8s.io/guides/#installing-gateway-api). |
| # The HTTPRoute references an externally managed Gateway via `parentRefs`. |
| httpRoute: |
| # Enable API Server HTTPRoute resource. |
| # Mutually exclusive with `ingress.apiServer.enabled`; enable only one of them. |
| enabled: false |
| |
| # Extra labels for the API Server HTTPRoute |
| labels: {} |
| |
| # Annotations for the API Server HTTPRoute |
| annotations: {} |
| |
| # List of parent Gateway references this HTTPRoute attaches to. Required when enabled. |
| # See https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.ParentReference |
| parentRefs: ~ |
| # - name: my-gateway |
| # namespace: gateway-system |
| # sectionName: https |
| |
| # Hostnames this HTTPRoute should match (templated). Empty matches all. |
| hostnames: [] |
| # - "airflow.example.com" |
| |
| # Default routing rule path (used only when `apiServer.httpRoute.rules` is empty) |
| path: "/" |
| |
| # The pathType for the default path. PathPrefix | Exact | RegularExpression |
| pathType: PathPrefix |
| |
| # Custom routing rules. When set, overrides the default rule generated from `path` + `pathType`. |
| # See https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRouteRule |
| rules: [] |
| # - matches: |
| # - path: |
| # type: PathPrefix |
| # value: /api/ |
| # backendRefs: |
| # - name: my-release-api-server |
| # port: 8080 |
| |
| # Number of Airflow API servers in the Deployment. |
| # Omitted from the Deployment, when HPA is enabled. |
| replicas: 1 |
| |
| # Max number of old ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Labels specific to Airflow API server objects and pods |
| labels: {} |
| |
| # Command to use when running the Airflow API server (templated). |
| command: ~ |
| |
| # Args to use when running the Airflow API server (templated). |
| args: ["bash", "-c", "exec airflow api-server"] |
| # Example: To enable proxy headers support when running behind a reverse proxy: |
| # args: ["bash", "-c", "exec airflow api-server --proxy-headers"] |
| |
| allowPodLogReading: true |
| |
| # Environment variables for the Airflow API server. |
| env: [] |
| # Example: To configure FORWARDED_ALLOW_IPS when running behind a reverse proxy: |
| # env: |
| # - name: FORWARDED_ALLOW_IPS |
| # value: "*" # Use "*" for trusted environments, or specify proxy IP ranges for production |
| |
| # Allow Horizontal Pod Autoscaler (HPA) configuration for api-server. (optional) |
| # HPA automatically scales the number of api-server pods based on observed metrics. |
| # HPA automatically adjusts api-server replicas between `minReplicaCount` and `maxReplicaCount` based on metrics. |
| hpa: |
| enabled: false |
| |
| # Minimum number of api-servers created by HPA |
| minReplicaCount: 1 |
| |
| # Maximum number of api-servers created by HPA |
| maxReplicaCount: 5 |
| |
| # Specifications for which to use to calculate the desired replica count |
| metrics: |
| - type: Resource |
| resource: |
| name: cpu |
| target: |
| type: Utilization |
| averageUtilization: 50 |
| |
| # Scaling behavior of the target in both Up and Down directions |
| behavior: {} |
| |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to Airflow API server Kubernetes Service Account. |
| annotations: {} |
| |
| service: |
| type: ClusterIP |
| |
| # Service annotations |
| annotations: {} |
| |
| ports: |
| - name: api-server |
| port: "{{ .Values.ports.apiServer }}" |
| |
| loadBalancerIP: ~ |
| |
| # Limit load balancer source ips to list of CIDRs |
| loadBalancerSourceRanges: [] |
| # loadBalancerSourceRanges: |
| # - "10.123.0.0/16" |
| |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: 1 |
| |
| # Allow overriding Update Strategy for API server |
| strategy: ~ |
| |
| # Detailed default security contexts for Airflow API server Deployments for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| waitForMigrations: |
| # Whether to create init container to wait for db migrations |
| enabled: true |
| |
| env: [] |
| |
| # Detailed default security context for waitForMigrations for container level |
| securityContexts: |
| container: {} |
| |
| # Launch additional containers into the Airflow API server pods. |
| extraContainers: [] |
| |
| # Add additional init containers into API server (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into API server. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for Airflow API server pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| # hostAliases for API server pod |
| hostAliases: [] |
| |
| # Annotations for Airflow API server Deployment |
| annotations: {} |
| |
| # Pod annotations for API server pods (templated) |
| podAnnotations: {} |
| |
| networkPolicy: |
| ingress: |
| # Peers for Airflow API server NetworkPolicy ingress |
| from: [] |
| |
| # Ports for Airflow API server NetworkPolicy ingress (if `from` is set) |
| ports: |
| - port: "{{ .Values.ports.apiServer }}" |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Add custom annotations to the `apiServer` ConfigMap |
| configMapAnnotations: {} |
| |
| # This string (templated) will be mounted into the Airflow API Server |
| # as a custom webserver_config.py. You can bake a webserver_config.py into |
| # your image instead or specify a ConfigMap containing the |
| # webserver_config.py. |
| apiServerConfig: ~ |
| # apiServerConfig: | |
| # from airflow import configuration as conf |
| |
| # # The SQLAlchemy connection string. |
| # SQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN') |
| |
| # # Flask-WTF flag for CSRF |
| # CSRF_ENABLED = True |
| |
| apiServerConfigConfigMapName: ~ |
| |
| livenessProbe: |
| initialDelaySeconds: 15 |
| timeoutSeconds: 5 |
| failureThreshold: 5 |
| periodSeconds: 10 |
| scheme: HTTP |
| |
| readinessProbe: |
| initialDelaySeconds: 15 |
| timeoutSeconds: 5 |
| failureThreshold: 5 |
| periodSeconds: 10 |
| scheme: HTTP |
| |
| startupProbe: |
| initialDelaySeconds: 0 |
| timeoutSeconds: 20 |
| failureThreshold: 6 |
| periodSeconds: 10 |
| scheme: HTTP |
| |
| # Airflow Triggerer Config |
| triggerer: |
| enabled: true |
| |
| # Number of Airflow triggerers in the Deployment |
| replicas: 1 |
| |
| # Max number of old replicasets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use when running Airflow triggerers (templated). |
| command: ~ |
| # Args to use when running Airflow triggerer (templated). |
| args: ["bash", "-c", "exec airflow triggerer"] |
| |
| # Update Strategy when triggerer is deployed as a StatefulSet |
| updateStrategy: ~ |
| # Update Strategy when triggerer is deployed as a Deployment |
| strategy: |
| rollingUpdate: |
| maxSurge: "100%" |
| maxUnavailable: "50%" |
| |
| # If the triggerer stops heartbeating for 5 minutes (5*60s) kill the |
| # triggerer and let Kubernetes restart it |
| livenessProbe: |
| initialDelaySeconds: 10 |
| timeoutSeconds: 20 |
| failureThreshold: 5 |
| periodSeconds: 60 |
| command: ~ |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to triggerer Kubernetes Service Account. |
| annotations: {} |
| |
| # Detailed default security context for triggerer for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| persistence: |
| # Enable persistent volumes |
| enabled: true |
| |
| # This policy determines whether PVCs should be deleted when StatefulSet is scaled down or removed. |
| persistentVolumeClaimRetentionPolicy: ~ |
| |
| # Volume size for triggerer StatefulSet |
| size: 100Gi |
| |
| # If using a custom storageClass, pass name ref to all statefulSets here |
| storageClassName: |
| |
| # Execute init container to chown log directory. |
| # This is currently only needed in kind, due to usage |
| # of local-path provisioner. |
| fixPermissions: false |
| |
| # Annotations to add to triggerer volumes |
| annotations: {} |
| |
| # Triggerer pod disruption budget |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: 1 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Grace period for triggerer to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 60 |
| |
| # This setting tells Kubernetes that its ok to evict |
| # when it wants to scale a node down. |
| safeToEvict: true |
| |
| # Launch additional containers into triggerer (templated). |
| extraContainers: [] |
| |
| # Add additional init containers into triggerers (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into triggerer. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for Airflow triggerer pods. |
| nodeSelector: {} |
| |
| affinity: {} |
| # default triggerer affinity is: |
| # podAntiAffinity: |
| # preferredDuringSchedulingIgnoredDuringExecution: |
| # - podAffinityTerm: |
| # labelSelector: |
| # matchLabels: |
| # component: triggerer |
| # topologyKey: kubernetes.io/hostname |
| # weight: 100 |
| |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| # hostAliases for the triggerer pod |
| hostAliases: [] |
| # - ip: "127.0.0.1" |
| # hostnames: |
| # - "foo.local" |
| # - ip: "10.1.2.3" |
| # hostnames: |
| # - "foo.remote" |
| |
| priorityClassName: ~ |
| |
| # Annotations for the triggerer Deployment |
| annotations: {} |
| |
| # Pod annotations for triggerer pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to triggerer objects and pods |
| labels: {} |
| |
| logGroomerSidecar: |
| # Whether to deploy the Airflow triggerer log groomer sidecar. |
| enabled: true |
| |
| # Command to use when running the Airflow triggerer log groomer sidecar (templated). |
| command: ~ |
| |
| # Args to use when running the Airflow triggerer log groomer sidecar (templated). |
| args: ["bash", "/clean-logs"] |
| |
| # Number of days to retain logs |
| retentionDays: 15 |
| |
| # Number of minutes to retain logs. |
| # This can be used for finer granularity than days. |
| # Total retention is `retentionDays` + `retentionMinutes`. |
| retentionMinutes: 0 |
| |
| # frequency to attempt to groom logs, in minutes |
| frequencyMinutes: 15 |
| |
| # Max size of logs in bytes. 0 = disabled |
| maxSizeBytes: 0 |
| |
| # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set. |
| maxSizePercent: 0 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for `logGroomerSidecar` for container level |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| env: [] |
| |
| waitForMigrations: |
| # Whether to create init container to wait for db migrations |
| enabled: true |
| |
| env: [] |
| |
| # Detailed default security context for waitForMigrations for container level |
| securityContexts: |
| container: {} |
| |
| env: [] |
| |
| # Allow KEDA autoscaling. |
| keda: |
| enabled: false |
| namespaceLabels: {} |
| |
| # How often KEDA polls the Airflow DB to report new scale requests to the HPA |
| pollingInterval: 5 |
| |
| # How many seconds KEDA will wait before scaling to zero. |
| # Note that HPA has a separate cooldown period for scale-downs |
| cooldownPeriod: 30 |
| |
| # Minimum number of triggerers created by keda |
| minReplicaCount: 0 |
| |
| # Maximum number of triggerers created by keda |
| maxReplicaCount: 10 |
| |
| # Specify HPA related options |
| advanced: {} |
| # horizontalPodAutoscalerConfig: |
| # behavior: |
| # scaleDown: |
| # stabilizationWindowSeconds: 300 |
| # policies: |
| # - type: Percent |
| # value: 100 |
| # periodSeconds: 15 |
| |
| # Query to use for KEDA autoscaling. Must return a single integer. |
| query: >- |
| SELECT ceil(COUNT(*)::decimal / {{ include "triggerer.capacity" . }}) |
| FROM trigger |
| |
| # Whether to use PGBouncer to connect to the database or not when it is enabled |
| # This configuration will be ignored if PGBouncer is not enabled |
| usePgbouncer: false |
| |
| # Airflow Dag Processor Config |
| dagProcessor: |
| enabled: true |
| |
| # Dag Bundle Configuration |
| # Define Dag bundles in a structured YAML format. This will be automatically |
| # converted to JSON string format for `config.dag_processor.dag_bundle_config_list`. |
| dagBundleConfigList: |
| - name: dags-folder |
| classpath: "airflow.dag_processing.bundles.local.LocalDagBundle" |
| kwargs: {} |
| # Example: |
| # dagBundleConfigList: |
| # - name: bundle1 |
| # classpath: "airflow.providers.git.bundles.git.GitDagBundle" |
| # kwargs: |
| # git_conn_id: "GITHUB__repo1" |
| # subdir: "dags" |
| # tracking_ref: "main" |
| # refresh_interval: 60 |
| # - name: bundle2 |
| # classpath: "airflow.providers.git.bundles.git.GitDagBundle" |
| # kwargs: |
| # git_conn_id: "GITHUB__repo2" |
| # subdir: "dags" |
| # tracking_ref: "develop" |
| # refresh_interval: 120 |
| # - name: dags-folder |
| # classpath: "airflow.dag_processing.bundles.local.LocalDagBundle" |
| # kwargs: {} |
| |
| # Number of Airflow dag processors in the Deployment |
| replicas: 1 |
| |
| # Max number of old ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use when running Airflow dag processors (templated). |
| command: ~ |
| |
| # Args to use when running Airflow dag processor (templated). |
| args: ["bash", "-c", "exec airflow dag-processor"] |
| |
| # Update Strategy for dag processors |
| strategy: |
| rollingUpdate: |
| maxSurge: "100%" |
| maxUnavailable: "50%" |
| |
| # If the dag processor stops heartbeating for 5 minutes (5*60s) kill the |
| # dag processor and let Kubernetes restart it |
| livenessProbe: |
| initialDelaySeconds: 10 |
| timeoutSeconds: 20 |
| failureThreshold: 5 |
| periodSeconds: 60 |
| command: ~ |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to dag processor Kubernetes Service Account. |
| annotations: {} |
| |
| # Dag processor pod disruption budget |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: 1 |
| |
| # Detailed default security context for dagProcessor for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Grace period for dag processor to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 60 |
| |
| # This setting tells Kubernetes that its ok to evict |
| # when it wants to scale a node down. |
| safeToEvict: true |
| |
| # Launch additional containers into dag processor (templated). |
| extraContainers: [] |
| |
| # Add additional init containers into dag processors (templated). |
| extraInitContainers: [] |
| |
| # Mount additional volumes into dag processor. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for Airflow dag processor pods. |
| nodeSelector: {} |
| |
| affinity: {} |
| # Default dag processor affinity is: |
| # podAntiAffinity: |
| # preferredDuringSchedulingIgnoredDuringExecution: |
| # - podAffinityTerm: |
| # labelSelector: |
| # matchLabels: |
| # component: dag-processor |
| # topologyKey: kubernetes.io/hostname |
| # weight: 100 |
| |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| # Annotations for the dag processor Deployment |
| annotations: {} |
| |
| # Pod annotations for dag processor pods (templated) |
| podAnnotations: {} |
| |
| logGroomerSidecar: |
| # Whether to deploy the Airflow dag processor log groomer sidecar. |
| enabled: true |
| |
| # Command to use when running the Airflow dag processor log groomer sidecar (templated). |
| command: ~ |
| |
| # Args to use when running the Airflow dag processor log groomer sidecar (templated). |
| args: ["bash", "/clean-logs"] |
| |
| # Number of days to retain logs |
| retentionDays: 15 |
| |
| # Number of minutes to retain logs. |
| # This can be used for finer granularity than days. |
| # Total retention is `retentionDays` + `retentionMinutes`. |
| retentionMinutes: 0 |
| |
| # frequency to attempt to groom logs, in minutes |
| frequencyMinutes: 15 |
| |
| # Max size of logs in bytes. 0 = disabled |
| maxSizeBytes: 0 |
| |
| # Max size of logs as a percent of disk usage. 0 = disabled. Ignored if `maxSizeBytes` is set. |
| maxSizePercent: 0 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| securityContexts: |
| container: {} |
| |
| env: [] |
| |
| waitForMigrations: |
| # Whether to create init container to wait for db migrations |
| enabled: true |
| |
| env: [] |
| |
| # Detailed default security context for waitForMigrations for container level |
| securityContexts: |
| container: {} |
| |
| # Labels specific to dag processor objects |
| labels: {} |
| |
| # Environment variables to add to dag processor container |
| env: [] |
| |
| # Flower settings |
| flower: |
| # Enable flower. |
| # If True, and using CeleryExecutor, will deploy flower app. |
| enabled: false |
| |
| # Kubernetes Gateway API (HTTPRoute) configuration for Flower. |
| # Requires the Gateway API CRDs to be installed in the cluster |
| # (https://gateway-api.sigs.k8s.io/guides/#installing-gateway-api). |
| # The HTTPRoute references an externally managed Gateway via `parentRefs`. |
| httpRoute: |
| # Enable Flower HTTPRoute resource. |
| # Mutually exclusive with `ingress.flower.enabled`; enable only one of them. |
| enabled: false |
| |
| # Extra labels for the Flower HTTPRoute |
| labels: {} |
| |
| # Annotations for the Flower HTTPRoute |
| annotations: {} |
| |
| # List of parent Gateway references this HTTPRoute attaches to. Required when enabled. |
| # See https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.ParentReference |
| parentRefs: ~ |
| # - name: my-gateway |
| # namespace: gateway-system |
| # sectionName: https |
| |
| # Hostnames this HTTPRoute should match (templated). Empty matches all. |
| hostnames: [] |
| # - "flower.example.com" |
| |
| # Default routing rule path (used only when `flower.httpRoute.rules` is empty) |
| path: "/" |
| |
| # The pathType for the default path. PathPrefix | Exact | RegularExpression |
| pathType: PathPrefix |
| |
| # Custom routing rules. When set, overrides the default rule generated from `path` + `pathType`. |
| # Use this for non-standard Flower service port layouts. |
| # See https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRouteRule |
| rules: [] |
| # - matches: |
| # - path: |
| # type: PathPrefix |
| # value: / |
| # backendRefs: |
| # - name: my-flower-service |
| # port: 5555 |
| |
| livenessProbe: |
| initialDelaySeconds: 10 |
| timeoutSeconds: 5 |
| failureThreshold: 10 |
| periodSeconds: 5 |
| |
| readinessProbe: |
| initialDelaySeconds: 10 |
| timeoutSeconds: 5 |
| failureThreshold: 10 |
| periodSeconds: 5 |
| |
| # Wait for at most 1 minute (6*10s) for the flower container to startup. |
| # LivenessProbe kicks in after the first successful StartupProbe |
| startupProbe: |
| initialDelaySeconds: 0 |
| timeoutSeconds: 20 |
| failureThreshold: 6 |
| periodSeconds: 10 |
| |
| # Max number of old ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use when running flower (templated). |
| command: ~ |
| |
| # Args to use when running flower (templated). |
| args: |
| - "bash" |
| - "-c" |
| # The format below is necessary to get `helm lint` happy |
| - |- |
| exec \ |
| airflow celery flower |
| |
| # Additional network policies as needed (deprecated, use `flower.networkPolicy.ingress.from` instead) |
| extraNetworkPolicies: [] |
| networkPolicy: |
| ingress: |
| # Peers for flower NetworkPolicy ingress |
| from: [] |
| |
| # Ports for flower NetworkPolicy ingress (if `from` is set) |
| ports: |
| - port: "{{ .Values.ports.flowerUI }}" |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Detailed default security context for flower for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| annotations: {} |
| |
| |
| # If set, the secret must contain a base64-encoded 'connection' key with |
| # a Flower basic auth connection string user:password. |
| secretName: ~ |
| # Example secret: |
| # kind: Secret |
| # apiVersion: v1 |
| # metadata: |
| # name: custom-flower-secret |
| # type: Opaque |
| # data: |
| # connection: <base64_encoded_user_password> |
| |
| # Add custom annotations to the flower secret |
| secretAnnotations: {} |
| |
| # If `secretName` is not specified, set username and password (secret will be created automatically) |
| username: ~ |
| password: ~ |
| |
| service: |
| type: ClusterIP |
| |
| # Service annotations |
| annotations: {} |
| |
| ports: |
| - name: flower-ui |
| port: "{{ .Values.ports.flowerUI }}" |
| # To change the port used to access flower: |
| # ports: |
| # - name: flower-ui |
| # port: 8080 |
| # targetPort: flower-ui |
| |
| loadBalancerIP: ~ |
| |
| # Limit load balancer source ips to list of CIDRs |
| loadBalancerSourceRanges: [] |
| # loadBalancerSourceRanges: |
| # - "10.123.0.0/16" |
| |
| # Launch additional containers into the flower pods. |
| extraContainers: [] |
| |
| # Mount additional volumes into the flower pods. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Select certain nodes for Airflow flower pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| # Annotations for the flower Deployment |
| annotations: {} |
| |
| # Pod annotations for flower pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to flower objects and pods |
| labels: {} |
| |
| env: [] |
| |
| # StatsD settings |
| statsd: |
| # Add custom annotations to the StatsD ConfigMap |
| configMapAnnotations: {} |
| |
| # When otelCollector.metricsEnabled is true, [metrics] statsd_on is set to |
| # False in the rendered Airflow config because Airflow can only export metrics |
| # to one backend at a time. |
| enabled: true |
| |
| # Max number of old ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Arguments for StatsD exporter command. |
| # By default contains path in the container to the mapping config file. |
| args: ["--statsd.mapping-config=/etc/statsd-exporter/mappings.yml"] |
| # If you ever need to fully override the entire `args` list, you can |
| # supply your own array here; if set, all below flag-specific values |
| # under `statsd.cache` section are ignored. |
| # args: |
| # - "--statsd.cache-size=1000" |
| # - "--statsd.cache-type=random" |
| # - "--ttl=10m" |
| |
| cache: |
| # Maximum number of metric‐mapping entries to keep in cache. |
| # When you send more distinct metric names than this, older entries |
| # will be evicted according to cacheType. |
| size: 1000 |
| |
| # Metrics Eviction policy for the mapping cache. |
| # - lru → Least‐Recently‐Used eviction |
| # - random → Random eviction |
| type: lru |
| |
| # Per‐metric time‐to‐live. When set to a non‐zero duration, any metric |
| # series that hasn't received an update in this interval will be dropped |
| # from the exported '/metrics' output. |
| # Format: Go duration string (e.g. "30s", "5m", "1h") |
| # Default: "0s" (disabled, never expires) |
| ttl: "0s" |
| |
| # Annotations to add to the StatsD Deployment. |
| annotations: {} |
| |
| # Grace period for StatsD to finish after SIGTERM is sent from Kubernetes |
| terminationGracePeriodSeconds: 30 |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| annotations: {} |
| |
| uid: 65534 |
| |
| # Detailed default security context for StatsD Deployments for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Additional network policies as needed |
| extraNetworkPolicies: [] |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| service: |
| extraAnnotations: {} |
| |
| # Select certain nodes for StatsD pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| # Additional mappings for StatsD exporter. |
| # If set, will merge default mapping and extra mappings, where default mapping has higher priority. |
| # If you want to change some default mapping, please use `overrideMappings` setting. |
| extraMappings: [] |
| |
| # Override mappings for StatsD exporter. |
| # If set, will ignore setting item in default and `extraMappings`. |
| # If you use it, ensure that it contains all mapping items. |
| overrideMappings: [] |
| |
| # Pod annotations for StatsD pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to StatsD objects and pods |
| labels: {} |
| |
| # Environment variables to add to StatsD container |
| env: [] |
| |
| # OpenTelemetry Collector settings |
| otelCollector: |
| # Send Airflow traces to the OTel Collector (sets [traces] otel_on). |
| tracesEnabled: false |
| |
| # Send Airflow metrics to the OTel Collector (sets [metrics] otel_on and disables statsd). |
| metricsEnabled: false |
| |
| # Default value for the OTEL_METRIC_EXPORT_INTERVAL env var on Airflow pods. |
| # Interval (in milliseconds) at which the OTel SDK exports metrics to the collector. |
| metricExportIntervalMs: 30000 |
| |
| # Override the OTel Collector config.yml. When set (non-empty), this string replaces |
| # the chart's default collector config. The value is rendered with `tpl`, so you can |
| # reference values like `{{ .Values.ports.otelCollectorOtlpHttp }}` or |
| # `{{ include "airflow.fullname" . }}` from inside the string. Leave empty to use |
| # the chart default. |
| config: ~ |
| # config: | |
| # extensions: |
| # health_check: |
| # endpoint: 0.0.0.0:13133 |
| # receivers: |
| # otlp: |
| # protocols: |
| # http: |
| # endpoint: 0.0.0.0:{{ .Values.ports.otelCollectorOtlpHttp }} |
| # processors: |
| # batch: {} |
| # exporters: |
| # logging: |
| # verbosity: basic |
| # service: |
| # extensions: [health_check] |
| # pipelines: |
| # traces: |
| # receivers: [otlp] |
| # processors: [batch] |
| # exporters: [logging] |
| |
| # Args to pass to the OTel Collector container (templated). |
| args: |
| - "--config=/etc/otel-collector/config.yml" |
| |
| # Max number of old ReplicaSets to retain |
| revisionHistoryLimit: ~ |
| |
| # Annotations to add to the OTel Collector Deployment |
| annotations: {} |
| |
| # Grace period for OTel Collector to finish after SIGTERM |
| terminationGracePeriodSeconds: 30 |
| |
| livenessProbe: |
| initialDelaySeconds: 10 |
| periodSeconds: 15 |
| |
| readinessProbe: |
| initialDelaySeconds: 10 |
| periodSeconds: 15 |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| service: |
| annotations: {} |
| |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| labels: {} |
| podAnnotations: {} |
| |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Additional ingress peers/rules for the OTel Collector NetworkPolicy. |
| # Only used when `networkPolicies.enabled` is true. |
| extraNetworkPolicies: [] |
| |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| # The default OTel Collector config does not talk to the Kubernetes API, so credentials |
| # are not auto-mounted. Flip to true if you override `otelCollector.config` to use |
| # processors that need API access (e.g. `k8sattributes`). |
| automountServiceAccountToken: false |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to the OTel Collector Kubernetes ServiceAccount. |
| annotations: {} |
| |
| # PgBouncer settings |
| pgbouncer: |
| # Enable PgBouncer |
| enabled: false |
| |
| # Number of PgBouncer replicas to run in Deployment |
| replicas: 1 |
| |
| # Max number of old replicasets to retain |
| revisionHistoryLimit: ~ |
| |
| # Command to use for PgBouncer (templated). |
| command: ["pgbouncer", "-u", "nobody", "/etc/pgbouncer/pgbouncer.ini"] |
| |
| # Args to use for PgBouncer (templated). |
| args: ~ |
| |
| auth_type: scram-sha-256 |
| auth_file: /etc/pgbouncer/users.txt |
| |
| # Whether to mount the config secret files at a default location (/etc/pgbouncer/*). |
| # Can be skipped to allow for other means to get the values, e.g. secrets provider class. |
| mountConfigSecret: true |
| |
| # Annotations to be added to the PgBouncer Deployment |
| annotations: {} |
| |
| # Pod annotations for PgBouncer pods (templated) |
| podAnnotations: {} |
| |
| # Add custom annotations to the PgBouncer certificates secret |
| certificatesSecretAnnotations: {} |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| annotations: {} |
| |
| # Additional network policies as needed |
| extraNetworkPolicies: [] |
| |
| # Pool sizes |
| metadataPoolSize: 10 |
| resultBackendPoolSize: 5 |
| |
| # Maximum clients that can connect to PgBouncer (higher = more file descriptors) |
| maxClientConn: 100 |
| |
| # Supply the name of existing secret with 'pgbouncer.ini' and 'users.txt' defined (templated) |
| configSecretName: ~ |
| # Secret example: |
| # apiVersion: v1 |
| # kind: Secret |
| # metadata: |
| # name: pgbouncer-config-secret |
| # data: |
| # pgbouncer.ini: <base64_encoded pgbouncer.ini file content> |
| # users.txt: <base64_encoded users.txt file content> |
| # type: Opaque |
| |
| # Add custom annotations to the PgBouncer config secret |
| configSecretAnnotations: {} |
| |
| # PgBouncer pod disruption budget |
| podDisruptionBudget: |
| enabled: false |
| |
| # PDB configuration (`minAvailable` and `maxUnavailable` are mutually exclusive) |
| config: |
| maxUnavailable: 1 |
| # minAvailable: 1 |
| |
| resources: {} |
| # resource: |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| service: |
| extraAnnotations: {} |
| clusterIp: ~ |
| |
| # https://www.pgbouncer.org/config.html |
| verbose: 0 |
| logDisconnections: 0 |
| logConnections: 0 |
| |
| sslmode: "prefer" |
| ciphers: "normal" |
| |
| ssl: |
| ca: ~ |
| cert: ~ |
| key: ~ |
| |
| # Add extra PgBouncer ini configuration in the databases section: |
| # https://www.pgbouncer.org/config.html#section-databases |
| extraIniMetadata: ~ |
| extraIniResultBackend: ~ |
| |
| # Add extra general PgBouncer ini configuration: https://www.pgbouncer.org/config.html |
| extraIni: ~ |
| |
| # Mount additional volumes into PgBouncer. |
| # Volumes apply to all PgBouncer containers, while volume mounts apply to the PgBouncer |
| # container itself. Metrics exporter container has its own mounts. |
| extraVolumes: [] |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumes: |
| # - name: my-templated-extra-volume |
| # secret: |
| # secretName: '{{ include "my_secret_template" . }}' |
| # defaultMode: 0640 |
| # optional: true |
| # |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Launch additional containers into PgBouncer pod. |
| extraContainers: [] |
| |
| # Select certain nodes for PgBouncer pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| |
| priorityClassName: ~ |
| |
| uid: 65534 |
| |
| # Detailed default security context for PgBouncer for container level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: |
| preStop: |
| exec: |
| # Allow existing queries clients to complete within 120 seconds |
| command: ["/bin/sh", "-c", "killall -INT pgbouncer && sleep 120"] |
| |
| metricsExporterSidecar: |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| sslmode: "disable" |
| |
| # Supply the name of existing secret with PGBouncer connection URI containing |
| # stats user and password, where 'connection' key is base64-encoded value. |
| statsSecretName: ~ |
| # Secret example: |
| # apiVersion: v1 |
| # kind: Secret |
| # metadata: |
| # name: pgbouncer-stats-secret |
| # data: |
| # connection: postgresql://<stats user>:<password>@127.0.0.1:6543/pgbouncer?<connection params> |
| # type: Opaque |
| |
| # Key containing the PGBouncer connection URI, defaults to 'connection' if not defined |
| statsSecretKey: ~ |
| |
| # Add custom annotations to the PgBouncer stats secret |
| statsSecretAnnotations: {} |
| |
| # Detailed default security context for metricsExporterSidecar for container level |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| livenessProbe: |
| initialDelaySeconds: 10 |
| periodSeconds: 10 |
| timeoutSeconds: 1 |
| |
| readinessProbe: |
| initialDelaySeconds: 10 |
| periodSeconds: 10 |
| timeoutSeconds: 1 |
| |
| # Mount additional volumes into the metrics exporter. |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Labels specific to PgBouncer objects and pods |
| labels: {} |
| |
| # Environment variables to add to PgBouncer container |
| env: [] |
| |
| # Configuration for the redis provisioned by the chart |
| redis: |
| enabled: true |
| terminationGracePeriodSeconds: 600 |
| |
| # Annotations for Redis Statefulset |
| annotations: {} |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to worker Kubernetes Service Account. |
| annotations: {} |
| |
| service: |
| # Service type |
| type: "ClusterIP" |
| |
| # If using ClusterIP service type, custom IP address can be specified |
| clusterIP: |
| |
| # If using NodePort service type, custom node port can be specified |
| nodePort: |
| |
| persistence: |
| # Enable persistent volumes |
| enabled: true |
| |
| # Volume size for worker StatefulSet |
| size: 1Gi |
| |
| # If using a custom storageClass, pass name ref to all statefulSets here |
| storageClassName: |
| |
| # Annotations to add to redis volumes |
| annotations: {} |
| |
| # The name of an existing PVC to use |
| existingClaim: |
| |
| persistentVolumeClaimRetentionPolicy: ~ |
| # persistentVolumeClaimRetentionPolicy: |
| # whenDeleted: Delete |
| # whenScaled: Delete |
| |
| # Configuration for empty dir volume (if `redis.persistence.enabled` == 'false') |
| # emptyDirConfig: |
| # sizeLimit: 1Gi |
| # medium: Memory |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # If set use as redis secret. Make sure to also set `data.brokerUrlSecretName` value. |
| passwordSecretName: ~ |
| |
| # If `passwordSecretName` is not specified, set `password` field. |
| # Otherwise a new password will be generated on install |
| # Note: password can only be set during 'helm install', not 'helm upgrade'. |
| password: ~ |
| |
| # Add custom annotations to the redis password secret |
| passwordSecretAnnotations: {} |
| |
| # This setting tells Kubernetes that its ok to evict |
| # when it wants to scale a node down. |
| safeToEvict: true |
| |
| # Select certain nodes for redis pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| |
| # Set to 0 for backwards-compatibility |
| uid: 0 |
| |
| # Detailed default security context for redis for container and pod level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Labels specific to redis objects and pods |
| labels: {} |
| |
| # Pod annotations for Redis pods (templated) |
| podAnnotations: {} |
| |
| # Auth secret for a private registry (deprecated, use `imagePullSecrets` instead) |
| # This is used if pulling Airflow images from a private registry |
| registry: |
| # Name of the Kubernetes secret containing Base64 encoded credentials to connect to a private registry |
| # (deprecated, use `imagePullSecrets` instead). |
| secretName: ~ |
| |
| # Credentials to connect to a private registry, these will get Base64 encoded and stored in a secret |
| # (deprecated, use `imagePullSecrets` instead - requires manual secret creation). |
| connection: {} |
| # Example: |
| # connection: |
| # user: ~ |
| # pass: ~ |
| # host: ~ |
| # email: ~ |
| |
| # Elasticsearch logging configuration |
| elasticsearch: |
| # Enable elasticsearch task logging |
| enabled: false |
| |
| # A secret containing the connection |
| secretName: ~ |
| |
| # Object representing the connection, if `secretName` not specified |
| connection: {} |
| # Example: |
| # connection: |
| # scheme: ~ |
| # user: ~ |
| # pass: ~ |
| # host: ~ |
| # port: ~ |
| |
| # Add custom annotations to the elasticsearch secret |
| secretAnnotations: {} |
| |
| # OpenSearch logging configuration |
| opensearch: |
| # Enable opensearch task logging |
| enabled: false |
| |
| # A secret containing the connection |
| secretName: ~ |
| |
| # Object representing the connection, if `secretName` not specified |
| connection: {} |
| # Example: |
| # connection: |
| # scheme: ~ |
| # user: ~ |
| # pass: ~ |
| # host: ~ |
| # port: ~ |
| |
| # All ports used by chart |
| ports: |
| flowerUI: 5555 |
| airflowUI: 8080 |
| workerLogs: 8793 |
| triggererLogs: 8794 |
| redisDB: 6379 |
| statsdIngest: 9125 |
| statsdScrape: 9102 |
| otelCollectorOtlpHttp: 4318 |
| otelCollectorOtlpGrpc: 4317 |
| pgbouncer: 6543 |
| pgbouncerScrape: 9127 |
| apiServer: 8080 |
| |
| # Define any ResourceQuotas for namespace |
| quotas: {} |
| |
| # Define default/max/min values for pods and containers in namespace |
| limits: [] |
| |
| # This runs as a CronJob to cleanup old pods spawned by the KubernetesExecutor. |
| # It is required to have KubernetesExecutor enabled. |
| cleanup: |
| enabled: false |
| |
| # Run every 15 minutes (templated). |
| schedule: "*/15 * * * *" |
| # To select a random-ish, deterministic starting minute between 3 and 12 inclusive for each release: |
| # schedule: '{{- add 3 (regexFind ".$" (adler32sum .Release.Name)) -}}-59/15 * * * *' |
| # To select the last digit of unix epoch time as the starting minute on each deploy: |
| # schedule: '{{- now | unixEpoch | trunc -1 -}}-59/* * * * *' |
| |
| # Command to use when running the cleanup CronJob (templated). |
| command: ~ |
| |
| # Args to use when running the cleanup CronJob (templated). |
| args: ["bash", "-c", "exec airflow kubernetes cleanup-pods --namespace={{ .Release.Namespace }}"] |
| |
| # `jobAnnotations` are annotations on the cleanup CronJob |
| jobAnnotations: {} |
| |
| # Select certain nodes for Airflow cleanup pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| |
| # Pod annotations for cleanup pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to cleanup objects and pods |
| labels: {} |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to cleanup CronJob Kubernetes Service Account. |
| annotations: {} |
| |
| # Service Account Token Volume configuration |
| # This is only used when `automountServiceAccountToken` is 'false' |
| # and allows manual configuration of the Service Account token volume |
| serviceAccountTokenVolume: |
| # Enable manual Service Account token volume configuration |
| enabled: false |
| |
| # Path where the Service Account token should be mounted |
| mountPath: /var/run/secrets/kubernetes.io/serviceaccount |
| |
| # Name of the volume |
| volumeName: kube-api-access |
| |
| # Token expiration in seconds |
| expirationSeconds: 3600 |
| |
| # Audience for the token |
| audience: ~ |
| |
| env: [] |
| |
| # Detailed default security context for cleanup for container level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Specify history limit |
| # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved. |
| failedJobsHistoryLimit: ~ |
| successfulJobsHistoryLimit: ~ |
| |
| # This runs as a CronJob to cleanup database for old entries. |
| databaseCleanup: |
| enabled: false |
| applyCustomEnv: true |
| |
| # Run every week on Sunday at midnight (templated). |
| schedule: "0 0 * * 0" |
| |
| # Command to use when running the database cleanup CronJob (templated). |
| command: ~ |
| |
| # Args to use when running the database cleanup CronJob (templated). |
| args: |
| - "bash" |
| - "-c" |
| - >- |
| 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 }} |
| |
| # Number of days to retain entries in the metadata database. |
| retentionDays: 90 |
| |
| # Don't preserve purged records in an archive table |
| skipArchive: false |
| |
| # Table names to perform maintenance on. Supported values in: |
| # https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#clean |
| tables: [] |
| |
| # Maximum number of rows to delete or archive in a single transaction |
| batchSize: ~ |
| |
| # Make logging output more verbose |
| verbose: true |
| |
| # `jobAnnotations` are annotations on the database cleanup CronJob |
| jobAnnotations: {} |
| |
| # Select certain nodes for Airflow database cleanup pods. |
| nodeSelector: {} |
| affinity: {} |
| tolerations: [] |
| topologySpreadConstraints: [] |
| priorityClassName: ~ |
| |
| # Pod annotations for database cleanup pods (templated) |
| podAnnotations: {} |
| |
| # Labels specific to database cleanup objects and pods |
| labels: {} |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| # Create Service Account |
| serviceAccount: |
| # ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
| automountServiceAccountToken: true |
| |
| # Specifies whether a Service Account should be created |
| create: true |
| |
| # The name of the Service Account to use. |
| # If not set and `create` is 'true', a name is generated using the release name |
| name: ~ |
| |
| # Annotations to add to database cleanup CronJob Kubernetes Service Account. |
| annotations: {} |
| |
| env: [] |
| |
| # Detailed default security context for database cleanup for container level |
| securityContexts: |
| pod: {} |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Specify history limit |
| # When set, overwrite the default k8s number of successful and failed CronJob executions that are saved. |
| failedJobsHistoryLimit: 1 |
| successfulJobsHistoryLimit: 1 |
| |
| # Time to live (in seconds) for Jobs created by this CronJob after they finish. |
| ttlSecondsAfterFinished: ~ |
| |
| # Configuration for postgresql subchart |
| # Uses bitnamilegacy images to avoid Bitnami licensing restrictions |
| # Not recommended for production - use external database instead |
| postgresql: |
| enabled: true |
| image: |
| repository: bitnamilegacy/postgresql |
| tag: "16.1.0-debian-11-r15" |
| auth: |
| enablePostgresUser: true |
| postgresPassword: postgres |
| username: "" |
| password: "" |
| |
| # Config settings to go into the mounted airflow.cfg |
| # |
| # Please note that these values are passed through the `tpl` function, so are |
| # all subject to being rendered as go templates. If you need to include a |
| # literal `{{` in a value, it must be expressed like this: |
| # a: '{{ "{{ not a template }}" }}' |
| # |
| # Do not set config containing secrets via plain text values, use Env Var or k8s secret object |
| # yamllint disable rule:line-length |
| config: |
| core: |
| dags_folder: '{{ include "airflow_dags" . }}' |
| # This is ignored when used with the official Docker image |
| load_examples: 'False' |
| executor: '{{ .Values.executor }}' |
| auth_manager: "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager" |
| logging: |
| remote_logging: '{{- ternary "True" "False" (or .Values.elasticsearch.enabled .Values.opensearch.enabled) }}' |
| colored_console_log: 'False' |
| metrics: |
| statsd_on: '{{ ternary "True" "False" (and .Values.statsd.enabled (not .Values.otelCollector.metricsEnabled)) }}' |
| statsd_port: 9125 |
| statsd_prefix: airflow |
| statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}' |
| otel_on: '{{ ternary "True" "False" .Values.otelCollector.metricsEnabled }}' |
| otel_host: '{{ if .Values.otelCollector.metricsEnabled }}{{ printf "%s-otel-collector" (include "airflow.fullname" .) }}{{ end }}' |
| otel_port: '{{ .Values.ports.otelCollectorOtlpHttp }}' |
| traces: |
| otel_on: '{{ ternary "True" "False" .Values.otelCollector.tracesEnabled }}' |
| fab: |
| enable_proxy_fix: 'True' |
| celery: |
| flower_url_prefix: '{{ ternary "" .Values.ingress.flower.path (eq .Values.ingress.flower.path "/") }}' |
| worker_concurrency: 16 |
| sync_parallelism: '{{ include "cpu_count" (((.Values.scheduler).resources).limits).cpu }}' |
| dag_processor: |
| # This value is generated by default from `.Values.dagProcessor.dagBundleConfigList` using the `dag_bundle_config_list` helper function. |
| # It is recommended to configure this via `dagProcessor.dagBundleConfigList` rather than overriding `config.dag_processor.dag_bundle_config_list` directly. |
| dag_bundle_config_list: '{{ include "dag_bundle_config_list" . }}' |
| elasticsearch: |
| json_format: 'True' |
| log_id_template: "{dag_id}-{task_id}-{run_id}-{map_index}-{try_number}" |
| elasticsearch_configs: |
| max_retries: 3 |
| timeout: 30 |
| retry_timeout: 'True' |
| kerberos: |
| keytab: '{{ .Values.kerberos.keytabPath }}' |
| reinit_frequency: '{{ .Values.kerberos.reinitFrequency }}' |
| principal: '{{ .Values.kerberos.principal }}' |
| ccache: '{{ .Values.kerberos.ccacheMountPath }}/{{ .Values.kerberos.ccacheFileName }}' |
| celery_kubernetes_executor: |
| kubernetes_queue: 'kubernetes' |
| kubernetes_executor: |
| namespace: '{{ .Release.Namespace }}' |
| pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml' |
| worker_container_repository: '{{ .Values.images.airflow.repository | default .Values.defaultAirflowRepository }}' |
| worker_container_tag: '{{ .Values.images.airflow.tag | default .Values.defaultAirflowTag }}' |
| multi_namespace_mode: '{{ ternary "True" "False" .Values.multiNamespaceMode }}' |
| |
| # yamllint enable rule:line-length |
| |
| # Whether Airflow can launch workers and/or pods in multiple namespaces |
| # If true, it creates ClusterRole/ClusterRolebinding (with access to entire cluster) |
| multiNamespaceMode: false |
| |
| # `podTemplate` is a templated string which overwrites the content of `pod_template_file.yaml` used by |
| # KubernetesExecutor. The default `podTemplate` will use `workers` configuration parameters |
| # (e.g. `workers.resources`). As such, you normally won't need to override this directly, however, |
| # you can still provide a completely custom `pod_template_file.yaml` if desired. |
| # If not set, a default one is created using `files/pod-template-file.kubernetes-helm-yaml`. |
| podTemplate: ~ |
| # The following example is NOT functional, but meant to be illustrative of how you can provide a custom |
| # `pod_template_file`. You're better off starting with the default in |
| # `files/pod-template-file.kubernetes-helm-yaml` and modifying from there. |
| # We will set `priorityClassName` in this example: |
| # podTemplate: | |
| # apiVersion: v1 |
| # kind: Pod |
| # metadata: |
| # name: placeholder-name |
| # labels: |
| # tier: airflow |
| # component: worker |
| # release: {{ .Release.Name }} |
| # spec: |
| # priorityClassName: high-priority |
| # containers: |
| # - name: base |
| # ... |
| |
| dags: |
| # Where dags volume will be mounted. Works for both persistence and gitSync. |
| # If not specified, dags mount path will be set to $AIRFLOW_HOME/dags |
| mountPath: ~ |
| persistence: |
| # Annotations for dags PVC |
| annotations: {} |
| |
| # Enable persistent volume for storing dags |
| enabled: false |
| |
| # Volume size for dags |
| size: 1Gi |
| |
| # If using a custom storageClass, pass name here |
| storageClassName: |
| |
| # Access mode of the persistent volume |
| accessMode: ReadWriteOnce |
| |
| # The name of an existing PVC to use |
| existingClaim: |
| |
| # Optional subpath for dag volume mount |
| subPath: ~ |
| |
| gitSync: |
| enabled: false |
| |
| # Git repo clone url |
| repo: https://github.com/apache/airflow.git |
| # SSH example: git@github.com:apache/airflow.git |
| # HTTPS example: https://github.com/apache/airflow.git |
| |
| branch: v2-2-stable |
| rev: HEAD |
| |
| # The git revision (branch, tag, or hash) to check out, v4 only |
| ref: v2-2-stable |
| |
| depth: 1 |
| |
| # The number of consecutive failures allowed before aborting |
| maxFailures: 0 |
| |
| # Subpath within the repo where dags are located. |
| # Should be "" if dags are at repo root |
| subPath: "tests/dags" |
| |
| # If your repo needs a username/password, you can load them to a k8s secret |
| # |
| # credentialsSecret: git-credentials |
| # |
| # Secret example: |
| # apiVersion: v1 |
| # kind: Secret |
| # metadata: |
| # name: git-credentials |
| # data: |
| # # For git-sync v3 |
| # GIT_SYNC_USERNAME: <base64_encoded_git_username> |
| # GIT_SYNC_PASSWORD: <base64_encoded_git_password> |
| # # For git-sync v4 |
| # GITSYNC_USERNAME: <base64_encoded_git_username> |
| # GITSYNC_PASSWORD: <base64_encoded_git_password> |
| |
| # If you are using an ssh clone url, you can load the ssh private key to a k8s secret |
| # |
| # sshKeySecret: airflow-ssh-secret |
| # |
| # Secret example: |
| # apiVersion: v1 |
| # kind: Secret |
| # metadata: |
| # name: airflow-ssh-secret |
| # data: |
| # gitSshKey: <base64_encoded_data> |
| |
| # If `sshKeySecret` is not specified, you can set `sshKey` |
| # sshKey: | |
| # -----BEGIN {OPENSSH PRIVATE KEY}----- |
| # ... |
| # -----END {OPENSSH PRIVATE KEY}----- |
| |
| # If you are using an ssh private key, you can additionally |
| # specify the content of your known_hosts file |
| # knownHosts: | |
| # <host1>,<ip1> <key1> |
| # <host2>,<ip2> <key2> |
| |
| # Interval between git sync attempts in seconds. |
| # High values are more likely to cause Dags to become out of sync between different components. |
| # Low values cause more traffic to the remote git repository. |
| # Go-style duration string (e.g. "100ms" or "0.1s" = 100ms). |
| # For backwards compatibility, wait will be used if it is specified. |
| period: 5s |
| wait: ~ |
| |
| # Add variables from secret into gitSync containers, such proxy-config |
| envFrom: ~ |
| # envFrom: | |
| # - secretRef: |
| # name: 'proxy-config' |
| |
| containerName: git-sync |
| uid: 65533 |
| |
| securityContexts: |
| container: {} |
| |
| # Container level lifecycle hooks |
| containerLifecycleHooks: {} |
| |
| # Git-Sync liveness service HTTP bind port |
| httpPort: 1234 |
| |
| # Setting this to true, will remove readinessProbe usage and configure livenessProbe to |
| # use a dedicated Git-Sync liveness service. In future, behaviour with value true will be |
| # default one and old one will be removed |
| recommendedProbeSetting: false |
| |
| startupProbe: |
| enabled: true |
| timeoutSeconds: 1 |
| initialDelaySeconds: 0 |
| periodSeconds: 5 |
| failureThreshold: 10 |
| |
| # As Git-Sync is not service-type object, the usage of this section will be removed. |
| # By setting `dags.gitSync.recommendedProbeSetting` to 'true', you will enable future behaviour. |
| readinessProbe: {} |
| |
| # The behaviour of the LivenessProbe will change with the next release of Helm Chart. |
| # To enable future behaviour set `dags.gitSync.recommendedProbeSetting` to 'true'. |
| # New behaviour uses the recommended liveness configuration by using Git-Sync built-in |
| # liveness service |
| livenessProbe: {} |
| # enabled: true |
| # timeoutSeconds: 1 |
| # initialDelaySeconds: 0 |
| # periodSeconds: 5 |
| # failureThreshold: 10 |
| |
| # Mount additional volumes into git-sync. |
| extraVolumeMounts: [] |
| # It can be templated like in the following example: |
| # extraVolumeMounts: |
| # - name: my-templated-extra-volume |
| # mountPath: "{{ .Values.my_custom_path }}" |
| # readOnly: true |
| |
| # Supported env vars for gitsync can be found at https://github.com/kubernetes/git-sync |
| env: [] |
| # - name: "" |
| # value: "" |
| |
| # Configuration for empty dir volume |
| # emptyDirConfig: |
| # sizeLimit: 1Gi |
| # medium: Memory |
| |
| resources: {} |
| # limits: |
| # cpu: 100m |
| # memory: 128Mi |
| # requests: |
| # cpu: 100m |
| # memory: 128Mi |
| |
| logs: |
| # Configuration for empty dir volume (if `logs.persistence.enabled` == 'false') |
| # emptyDirConfig: |
| # sizeLimit: 1Gi |
| # medium: Memory |
| |
| persistence: |
| # Enable persistent volume for storing logs |
| enabled: false |
| |
| # Volume size for logs |
| size: 100Gi |
| |
| # Annotations for the logs PVC |
| annotations: {} |
| |
| # If using a custom storageClass, pass name here |
| storageClassName: |
| |
| # The name of an existing PVC to use |
| existingClaim: |
| |
| # The subpath of the existing PVC to use |
| subPath: |