12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610 |
- ###################################
- # Airflow - Common Configs
- ###################################
- airflow:
- ## configs for the docker image of the web/scheduler/worker
- ##
- image:
- repository: elyra/airflow
- tag: 1.10.12-python3.6
- ## values: Always or IfNotPresent
- pullPolicy: IfNotPresent
- pullSecret: ""
- ## the airflow executor type to use
- ##
- ## NOTE:
- ## - this should be `CeleryExecutor` or `KubernetesExecutor`
- ## - if set to `KubernetesExecutor`:
- ## - ensure that `workers.enabled` is `false`
- ## - ensure that `flower.enabled` is `false`
- ## - ensure that `redis.enabled` is `false`
- ## - ensure that K8S configs are set in `airflow.config`
- ## - we set these configs automatically:
- ## - `AIRFLOW__KUBERNETES__NAMESPACE`
- ## - `AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME`
- ## - `AIRFLOW__KUBERNETES__ENV_FROM_CONFIGMAP_REF`
- ##
- executor: KubernetesExecutor
- ## the fernet key used to encrypt the connections/variables in the database
- ##
- ## WARNING:
- ## - you MUST customise this value, otherwise the encryption will be somewhat pointless
- ##
- ## NOTE:
- ## - to prevent this value being stored in your values.yaml (and airflow-env ConfigMap),
- ## consider using `airflow.extraEnv` to define it from a pre-created secret
- ##
- ## GENERATE:
- ## python -c "from cryptography.fernet import Fernet; FERNET_KEY = Fernet.generate_key().decode(); print(FERNET_KEY)"
- ##
- fernetKey: "my-generated-fernetKey"
- ## environment variables for the web/scheduler/worker Pods (for airflow configs)
- ##
- ## WARNING:
- ## - don't include sensitive variables in here, instead make use of `airflow.extraEnv` with Secrets
- ## - don't specify `AIRFLOW__CORE__SQL_ALCHEMY_CONN`, `AIRFLOW__CELERY__RESULT_BACKEND`,
- ## or `AIRFLOW__CELERY__BROKER_URL`, they are dynamically created from chart values
- ##
- ## NOTE:
- ## - airflow allows environment configs to be set as environment variables
- ## - they take the form: AIRFLOW__<section>__<key>
- ## - see the Airflow documentation: https://airflow.apache.org/docs/stable/howto/set-config.html
- ##
- ## EXAMPLE:
- ## config:
- ## ## Security
- ## AIRFLOW__CORE__SECURE_MODE: "True"extraEnv:
- # - name: AIRFLOW__CORE__FERNET_KEY
- # valueFrom:
- # secretKeyRef:
- # name: airflow
- # key: fernet-key
- # - name: AIRFLOW__LDAP__BIND_PASSWORD
- # valueFrom:
- # secretKeyRef:
- # name: ldap
- # key: passworde
- ## AIRFLOW__API__AUTH_BACKEND: "airflow.api.auth.backend.deny_all"
- ## AIRFLOW__WEBSERVER__EXPOSE_CONFIG: "False"
- ## AIRFLOW__WEBSERVER__RBAC: "False"
- ##
- ## ## DAGS
- ## AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: "30"
- ## AIRFLOW__CORE__LOAD_EXAMPLES: "False"
- ##
- ## ## Email (SMTP)
- ## AIRFLOW__EMAIL__EMAIL_BACKEND: "airflow.utils.email.send_email_smtp"
- ## AIRFLOW__SMTP__SMTP_HOST: "smtpmail.example.com"
- ## AIRFLOW__SMTP__SMTP_STARTTLS: "False"
- ## AIRFLOW__SMTP__SMTP_SSL: "False"
- ## AIRFLOW__SMTP__SMTP_PORT: "25"
- ## AIRFLOW__SMTP__SMTP_MAIL_FROM: "admin@example.com"
- ##
- ## ## Disable noisy "Handling signal: ttou" Gunicorn log messages
- ## GUNICORN_CMD_ARGS: "--log-level WARNING"
- ##
- ## ## Proxy Config
- ## HTTP_PROXY: "http://proxy.example.com:8080"
- ##
- config:
- AIRFLOW__KUBERNETES__WORKER_CONTAINER_REPOSITORY: "elyra/airflow"
- AIRFLOW__KUBERNETES__WORKER_CONTAINER_TAG: "1.10.12"
- AIRFLOW__KUBERNETES__WORKER_CONTAINER_IMAGE_PULL_POLICY: "IfNotPresent"
- AIRFLOW__KUBERNETES__LOGS_VOLUME_CLAIM: "airflow-logs"
- AIRFLOW__KUBERNETES__DAGS_VOLUME_CLAIM: "airflow"
- AIRFLOW__KUBERNETES__NAMESPACE: "default"
- AIRFLOW__KUBERNETES__DELETE_WORKER_PODS: "False"
- AIRFLOW__KUBERNETES__RUN_AS_USER: "50000"
- AIRFLOW__CORE__LOAD_EXAMPLES: "False"
- AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: "60"
- AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME: "airflow"
- AIRFLOW__KUBERNETES__GIT_SYNC_ONE_TIME: "false"
- ## extra annotations for the web/scheduler/worker Pods
- ##
- ## EXAMPLE:
- ## podAnnotations:
- ## iam.amazonaws.com/role: "airflow-Role"
- ##
- podAnnotations: {}
- ## extra environment variables for the web/scheduler/worker (AND flower) Pods
- ##
- ## EXAMPLE:
- ## extraEnv:
- ## - name: AIRFLOW__CORE__FERNET_KEY
- ## valueFrom:
- ## secretKeyRef:
- ## name: airflow-fernet-key
- ## key: value
- ## - name: AIRFLOW__LDAP__BIND_PASSWORD
- ## valueFrom:
- ## secretKeyRef:
- ## name: airflow-ldap-password
- ## key: value
- ##
- extraEnv: []
- ## extra configMap volumeMounts for the web/scheduler/worker Pods
- ##
- ## EXAMPLE:
- ## extraConfigmapMounts:
- ## - name: airflow-webserver-config
- ## mountPath: /opt/airflow/webserver_config.py
- ## configMap: airflow-webserver-config
- ## readOnly: true
- ## subPath: webserver_config.py
- ##
- extraConfigmapMounts: []
- ## extra containers for the web/scheduler/worker Pods
- ##
- ## EXAMPLE: (a sidecar that syncs DAGs from object storage)
- ## extraContainers:
- ## - name: s3-sync
- ## image: my-user/s3sync:latest
- ## volumeMounts:
- ## - name: synchronised-dags
- ## mountPath: /dags
- ##
- extraContainers: []
- ## extra pip packages to install in the web/scheduler/worker Pods
- ##
- ## EXAMPLE:
- ## extraPipPackages:
- ## - "airflow-exporter==1.3.1"
- ##
- #extraPipPackages:
- ## extra volumeMounts for the web/scheduler/worker Pods
- ##
- ## EXAMPLE:
- ## extraVolumeMounts:
- ## - name: synchronised-dags
- ## mountPath: /opt/airflow/dags
- ##
- extraVolumeMounts: []
- ## extra volumes for the web/scheduler/worker Pods
- ##
- ## EXAMPLE:
- ## extraVolumes:
- ## - name: synchronised-dags
- ## emptyDir: {}
- ##
- extraVolumes: []
- ###################################
- # Airflow - Scheduler Configs
- ###################################
- scheduler:
- ## resource requests/limits for the scheduler Pod
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "1000m"
- ## memory: "1Gi"
- ##
- resources: {}
- ## the nodeSelector configs for the scheduler Pods
- ##
- nodeSelector: {}
- ## the affinity configs for the scheduler Pods
- ##
- affinity: {}
- ## the toleration configs for the scheduler Pods
- ##
- tolerations: []
- ## the security context for the scheduler Pods
- ##
- securityContext: {}
- ## labels for the scheduler Deployment
- ##
- labels: {}
- ## Pod labels for the scheduler Deployment
- ##
- podLabels: {}
- ## annotations for the scheduler Deployment
- ##
- annotations: {}
- ## Pod Annotations for the scheduler Deployment
- ##
- podAnnotations: {}
- ## if we should tell Kubernetes Autoscaler that its safe to evict these Pods
- ##
- safeToEvict: true
- ## configs for the PodDisruptionBudget of the scheduler
- ##
- podDisruptionBudget:
- ## if a PodDisruptionBudget resource is created for the scheduler
- ##
- enabled: true
- ## the maximum unavailable pods/percentage for the scheduler
- ##
- ## NOTE:
- ## - as there is only ever a single scheduler Pod,
- ## this must be 100% for Kubernetes to be able to migrate it
- ##
- maxUnavailable: "100%"
- ## the minimum available pods/percentage for the scheduler
- ##
- minAvailable: ""
- ## custom airflow connections for the airflow scheduler
- ##
- ## EXAMPLE:
- ## connections:
- ## - id: my_aws
- ## type: aws
- ## extra: |
- ## {
- ## "aws_access_key_id": "XXXXXXXX",
- ## "aws_secret_access_key": "XXXXXXXX",
- ## "region_name":"eu-central-1"
- ## }
- ##
- connections: []
- ## if `scheduler.connections` are deleted and re-added after each scheduler restart
- ##
- refreshConnections: true
- ## the name of an existing Secret containing an `add-connections.sh` script to run on scheduler start
- ##
- ## NOTE:
- ## - if this is non-empty, `scheduler.connections` will be ignored
- ## - use this if you don't want to store connections in your values.yaml
- ##
- ## EXAMPLE SECRET:
- ## apiVersion: v1
- ## kind: Secret
- ## metadata:
- ## name: my-airflow-connections
- ## type: Opaque
- ## stringData:
- ## add-connections.sh: |
- ## #!/usr/bin/env bash
- ##
- ## # remove any existing connection
- ## airflow connections --delete \
- ## --conn_id "my_aws"
- ##
- ## # re-add your custom connection
- ## airflow connections --add \
- ## --conn_id "my_aws" \
- ## --conn_type "aws" \
- ## --conn_extra "{\"region_name\":\"eu-central-1\"}"
- ##
- existingSecretConnections: ""
- ## custom airflow variables for the airflow scheduler
- ##
- ## NOTE:
- ## - THIS IS A STRING, containing a JSON object, with your variables in it
- ##
- ## EXAMPLE:
- ## variables: |
- ## { "environment": "dev" }
- ##
- variables: |
- {}
- ## custom airflow pools for the airflow scheduler
- ##
- ## NOTE:
- ## - THIS IS A STRING, containing a JSON object, with your pools in it
- ##
- ## EXAMPLE:
- ## pools: |
- ## {
- ## "example": {
- ## "description": "This is an example pool with 2 slots.",
- ## "slots": 2
- ## }
- ## }
- ##
- pools: |
- {}
- ## the value of the `airflow --num_runs` parameter used to run the airflow scheduler
- ##
- ## NOTE:
- ## - this is the number of 'dag refreshes' before the airflow scheduler process will exit
- ## - if not set to `-1`, the scheduler Pod will restart regularly
- ## - for most environments, `-1` will be an acceptable value
- ##
- numRuns: -1
- ## if we run `airflow initdb` when the scheduler starts
- ##
- initdb: true
- ## if we run `airflow initdb` inside a special initContainer
- ##
- ## NOTE:
- ## - may be needed if you have custom database hooks configured that will be pulled in by git-sync
- ##
- preinitdb: false
- ## the number of seconds to wait (in bash) before starting the scheduler container
- ##
- initialStartupDelay: 0
- ## configs for the scheduler liveness probe
- ##
- ## NOTE:
- ## - the maximum number of seconds the scheduler can be unhealthy =
- ## `livenessProbe.periodSeconds` x `livenessProbe.failureThreshold`
- ##
- livenessProbe:
- enabled: true
- ## the number of seconds to wait before checking pod health
- ##
- ## NOTE:
- ## - make larger if you are installing many packages with:
- ## `airflow.extraPipPackages`, `web.extraPipPackages`, or `dags.installRequirements`
- ##
- initialDelaySeconds: 300
- periodSeconds: 30
- failureThreshold: 5
- ## extra init containers to run before the scheduler Pod
- ##
- ## EXAMPLE:
- ## extraInitContainers:
- ## - name: volume-mount-hack
- ## image: busybox
- ## command: ["sh", "-c", "chown -R 1000:1000 logs"]
- ## volumeMounts:
- ## - mountPath: /opt/airflow/logs
- ## name: logs-data
- ##
- extraInitContainers: []
- ###################################
- # Airflow - WebUI Configs
- ###################################
- web:
- ## resource requests/limits for the airflow web Pods
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "500m"
- ## memory: "1Gi"
- ##
- resources: {}
- ## the number of web Pods to run
- ##
- replicas: 1
- ## the nodeSelector configs for the web Pods
- ##
- nodeSelector: {}
- ## the affinity configs for the web Pods
- ##
- affinity: {}
- ## the toleration configs for the web Pods
- ##
- tolerations: []
- ## the security context for the web Pods
- ##
- securityContext: {}
- ## labels for the web Deployment
- ##
- labels: {}
- ## Pod labels for the web Deployment
- ##
- podLabels: {}
- ## annotations for the web Deployment
- ##
- annotations: {}
- ## Pod annotations for the web Deployment
- ##
- podAnnotations: {}
- ## if we should tell Kubernetes Autoscaler that its safe to evict these Pods
- ##
- safeToEvict: true
- ## configs for the PodDisruptionBudget of the web Deployment
- ##
- podDisruptionBudget:
- ## if a PodDisruptionBudget resource is created for the web Deployment
- ##
- ## WARNING:
- ## - if you enable a PodDisruptionBudget, you should set `web.replicas` to a value
- ## large enough for Kubernetes to evict at least 1 Pod at a time
- ##
- enabled: false
- ## the maximum unavailable pods/percentage for the web Deployment
- ##
- maxUnavailable: ""
- ## the minimum available pods/percentage for the web Deployment
- ##
- minAvailable: ""
- ## configs for the Service of the web Pods
- ##
- service:
- ## annotations: {}
- ##sessionAffinity: "None"
- ##sessionAffinityConfig: {}
- type: NodePort
- ## externalPort: 8080
- ## loadBalancerIP: ""
- ##loadBalancerSourceRanges: []
- ##nodePort:
- ## http: ""
- ## sets `AIRFLOW__WEBSERVER__BASE_URL`
- ##
- ## NOTE:
- ## - should be compatible with `ingress.web.path` config
- ##
- baseUrl: "http://localhost:8080"
- ## sets `AIRFLOW__CORE__STORE_SERIALIZED_DAGS`
- ##
- ## NOTE:
- ## - setting true will disable `git-sync` and `git-clone` containers in the web Pod
- ## - Docs: https://airflow.apache.org/docs/stable/dag-serialization.html
- ##
- serializeDAGs: false
- ## extra pip packages to install in the web container
- ##
- ## EXAMPLE: ( packages used by RBAC UI for OAuth )
- ## extraPipPackages:
- ## - "apache-airflow[google_auth]==1.10.10"
- ##
- extraPipPackages: []
- ## the number of seconds to wait (in bash) before starting the web container
- ##
- initialStartupDelay: 0
- ## the number of seconds to wait before declaring a new Pod available
- ##
- minReadySeconds: 5
- ## configs for the web Service readiness probe
- ##
- readinessProbe:
- enabled: false
- scheme: HTTP
- initialDelaySeconds: 10
- periodSeconds: 10
- timeoutSeconds: 1
- successThreshold: 1
- failureThreshold: 3
- ## configs for the web Service liveness probe
- ##
- livenessProbe:
- enabled: true
- scheme: HTTP
- ## the number of seconds to wait before checking pod health
- ##
- ## NOTE:
- ## - make larger if you are installing many packages with:
- ## `airflow.extraPipPackages`, `web.extraPipPackages`, or `dags.installRequirements`
- ##
- initialDelaySeconds: 300
- periodSeconds: 30
- timeoutSeconds: 3
- successThreshold: 1
- failureThreshold: 2
- ## the directory in which to mount secrets on web containers
- ##
- secretsDir: /var/airflow/secrets
- ## the names of existing Kubernetes Secrets to mount as files at `{workers.secretsDir}/<secret_name>/<keys_in_secret>`
- ##
- secrets: []
- ## the name of an existing Kubernetes Secret to mount as files to `{web.secretsDir}/<keys_in_secret>`
- ##
- ## NOTE:
- ## - overrides `web.secrets`
- ##
- secretsMap: ""
- ###################################
- # Airflow - Worker Configs
- ###################################
- workers:
- ## if the airflow workers StatefulSet should be deployed
- ##
- enabled: false
- ## Set to false for use with KubernetesExecutor
- ## resource requests/limits for the airflow worker Pods
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "1000m"
- ## memory: "2Gi"
- ##
- resources: {}
- ## the number of workers Pods to run
- ##
- ## NOTE:
- ## - when `workers.autoscaling.enabled` is true, this is the minimum
- ##
- replicas: 1
- ## the nodeSelector configs for the worker Pods
- ##
- nodeSelector: {}
- ## the affinity configs for the worker Pods
- ##
- affinity: {}
- ## the toleration configs for the worker Pods
- ##
- tolerations: []
- ## the security context for the worker Pods
- ##
- securityContext: {}
- ## labels for the worker StatefulSet
- ##
- labels: {}
- ## Pod labels for the worker StatefulSet
- ##
- podLabels: {}
- ## annotations for the worker StatefulSet
- ##
- annotations: {}
- ## Pod annotations for the worker StatefulSet
- ##
- podAnnotations: {}
- ## if we should tell Kubernetes Autoscaler that its safe to evict these Pods
- ##
- safeToEvict: true
- ## configs for the PodDisruptionBudget of the worker StatefulSet
- ##
- podDisruptionBudget:
- ## if a PodDisruptionBudget resource is created for the worker StatefulSet
- ##
- ## WARNING:
- ## - if you enable a PodDisruptionBudget, you should set `workers.replicas` to a value
- ## large enough for Kubernetes to evict at least 1 Pod at a time
- ## - if you enable `workers.celery.gracefullTermination`, you should consider
- ## specifying a `workers.podDisruptionBudget.minAvailable` to prevent there
- ## not being enough available workers during graceful termination waiting periods
- ##
- enabled: false
- ## the maximum unavailable pods/percentage for the worker StatefulSet
- ##
- maxUnavailable: ""
- ## the minimum available pods/percentage for the worker StatefulSet
- ##
- minAvailable: ""
- ## configs for the HorizontalPodAutoscaler of the worker Pods
- ##
- ## EXAMPLE:
- ## autoscaling:
- ## enabled: true
- ## maxReplicas: 16
- ## metrics:
- ## - type: Resource
- ## resource:
- ## name: memory
- ## target:
- ## type: Utilization
- ## averageUtilization: 80
- ##
- autoscaling:
- enabled: false
- maxReplicas: 2
- metrics: []
- ## the number of seconds to wait (in bash) before starting each worker container
- ##
- initialStartupDelay: 0
- ## configs for the celery worker Pods
- ##
- ## NOTE:
- ## - only takes effect if `airflow.executor` is `CeleryExecutor`
- ##
- celery:
- ## the number of tasks each celery worker can run at a time
- ##
- ## NOTE:
- ## - sets AIRFLOW__CELERY__WORKER_CONCURRENCY
- ##
- instances: 16
- ## if we should wait for tasks to finish before SIGTERM of the celery worker
- ##
- ## WARNING:
- ## - consider using `workers.podDisruptionBudget.*` to prevent there not being
- ## enough available workers during graceful termination waiting periods
- ##
- gracefullTermination: false
- ## how many seconds to wait for tasks to finish before SIGTERM of the celery worker
- ##
- ## graceful shutdown lifecycle:
- ## 1. prevent worker accepting new tasks
- ## 2. wait AT MOST `workers.celery.gracefullTerminationPeriod` for tasks to finish
- ## 3. send SIGTERM to worker
- ## 4. wait AT MOST `workers.terminationPeriod` for kill to finish
- ## 5. send SIGKILL to worker
- ##
- gracefullTerminationPeriod: 600
- ## how many seconds to wait after SIGTERM before SIGKILL of the celery worker
- ##
- ## WARNING:
- ## - tasks that are still running during SIGKILL will be orphaned, this is important
- ## to understand with KubernetesPodOperator(), as Pods may continue running
- ##
- terminationPeriod: 60
- ## directory in which to mount secrets on worker containers
- ##
- secretsDir: /var/airflow/secrets
- ## the names of existing Kubernetes Secrets to mount as files at `{workers.secretsDir}/<secret_name>/<keys_in_secret>`
- ##
- secrets: []
- ## the name of an existing Kubernetes Secret to mount as files to `{web.secretsDir}/<keys_in_secret>`
- ##
- ## NOTE:
- ## - overrides `worker.secrets`
- ##
- secretsMap: ""
- ###################################
- # Airflow - Flower Configs
- ###################################
- flower:
- ## if the Flower UI should be deployed
- ##
- ## NOTE:
- ## - only takes effect if `airflow.executor` is `CeleryExecutor`
- ##
- enabled: false
- ## resource requests/limits for the flower Pods
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "100m"
- ## memory: "126Mi"
- ##
- resources: {}
- ## the number of flower Pods to run
- ##
- replicas: 1
- ## the nodeSelector configs for the flower Pods
- ##
- nodeSelector: {}
- ## the affinity configs for the flower Pods
- ##
- affinity: {}
- ## the toleration configs for the flower Pods
- ##
- tolerations: []
- ## the security context for the flower Pods
- ##
- securityContext: {}
- ## labels for the flower Deployment
- ##
- labels: {}
- ## Pod labels for the flower Deployment
- ##
- podLabels: {}
- ## annotations for the flower Deployment
- ##
- annotations: {}
- ## Pod annotations for the flower Deployment
- ##
- podAnnotations: {}
- ## if we should tell Kubernetes Autoscaler that its safe to evict these Pods
- ##
- safeToEvict: true
- ## configs for the PodDisruptionBudget of the flower Deployment
- ##
- podDisruptionBudget:
- ## if a PodDisruptionBudget resource is created for the flower Deployment
- ##
- ## WARNING:
- ## - if you enable a PodDisruptionBudget, you should set `flower.replicas` to a value
- ## large enough for Kubernetes to evict at least 1 Pod at a time
- ##
- enabled: false
- ## the maximum unavailable pods/percentage for the flower Deployment
- ##
- maxUnavailable: ""
- ## the minimum available pods/percentage for the flower Deployment
- ##
- minAvailable: ""
- ## the value of the flower `--auth` argument
- ##
- ## NOTE:
- ## - see flower docs: https://flower.readthedocs.io/en/latest/auth.html#google-oauth-2-0
- ##
- oauthDomains: ""
- ## the name of a pre-created secret containing the basic authentication value for flower
- ##
- ## NOTE:
- ## - This sets `AIRFLOW__CELERY__FLOWER_BASIC_AUTH`
- ##
- basicAuthSecret: ""
- ## the key within `flower.basicAuthSecret` containing the basic authentication string
- ##
- basicAuthSecretKey: ""
- ## sets `AIRFLOW__CELERY__FLOWER_URL_PREFIX`
- ##
- ## NOTE:
- ## - should match `ingress.flower.path` config
- ##
- urlPrefix: ""
- ## configs for the Service of the flower Pods
- ##
- service:
- annotations: {}
- type: ClusterIP
- externalPort: 5555
- loadBalancerIP: ""
- loadBalancerSourceRanges: []
- nodePort:
- http: ""
- ## the number of seconds to wait (in bash) before starting the flower container
- ##
- initialStartupDelay: 0
- ## the number of seconds to wait before declaring a new Pod available
- ##
- minReadySeconds: 5
- ## extra ConfigMaps to mount on the flower Pods
- ##
- ## EXAMPLE:
- ## extraConfigmapMounts:
- ## - name: extra-cert
- ## mountPath: /etc/ssl/certs/extra-cert.pem
- ## configMap: extra-certificates
- ## readOnly: true
- ## subPath: extra-cert.pem
- ##
- extraConfigmapMounts: []
- ###################################
- # Airflow - Logs Configs
- ###################################
- logs:
- ## the airflow logs folder
- ##
- path: /opt/airflow/logs
- ## configs for the logs PVC
- ##
- persistence:
- ## if a persistent volume is mounted at `logs.path`
- ##
- enabled: true
- ## the name of an existing PVC to use
- ##
- existingClaim: ""
- ## sub-path under `logs.persistence.existingClaim` to use
- ##
- subPath: ""
- ## the name of the StorageClass used by the PVC
- ##
- ## NOTE:
- ## - if set to "", then `PersistentVolumeClaim/spec.storageClassName` is omitted
- ## - if set to "-", then `PersistentVolumeClaim/spec.storageClassName` is set to ""
- ##
- storageClass: "standard"
- ## the access mode of the PVC
- ##
- ## WARNING:
- ## - must be: `ReadWriteMany`
- ##
- ## NOTE:
- ## - different StorageClass support different access modes:
- ## https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
- ##
- accessMode: ReadWriteMany
- ## the size of PVC to request
- ##
- size: 1Gi
- ###################################
- # Airflow - DAGs Configs
- ###################################
- dags:
- ## the airflow dags folder
- ##
- path: /opt/airflow/dags
- ## whether to disable pickling dags from the scheduler to workers
- ##
- ## NOTE:
- ## - sets AIRFLOW__CORE__DONOT_PICKLE
- ##
- doNotPickle: false
- ## install any Python `requirements.txt` at the root of `dags.path` automatically
- ##
- ## WARNING:
- ## - if set to true, and you are using `dags.git.gitSync`, you must also enable
- ## `dags.initContainer` to ensure the requirements.txt is available at Pod start
- ##
- installRequirements: false
- ## configs for the dags PVC
- ##
- persistence:
- ## if a persistent volume is mounted at `dags.path`
- ##
- enabled: true
- ## the name of an existing PVC to use
- ##
- existingClaim: ""
- ## sub-path under `dags.persistence.existingClaim` to use
- ##
- subPath: ""
- ## the name of the StorageClass used by the PVC
- ##
- ## NOTE:
- ## - if set to "", then `PersistentVolumeClaim/spec.storageClassName` is omitted
- ## - if set to "-", then `PersistentVolumeClaim/spec.storageClassName` is set to ""
- ##
- storageClass: "standard"
- ## the access mode of the PVC
- ##
- ## WARNING:
- ## - must be one of: `ReadOnlyMany` or `ReadWriteMany`
- ##
- ## NOTE:
- ## - different StorageClass support different access modes:
- ## https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
- ##
- accessMode: ReadOnlyMany
- ## the size of PVC to request
- ##
- size: 1Gi
- ## configs for the DAG git repository & sync container
- ##
- git:
- ## url of the git repository
- ##
- ## EXAMPLE: (HTTP)
- ## url: "https://github.com/torvalds/linux.git"
- ##
- ## EXAMPLE: (SSH)
- ## url: "ssh://git@github.com:torvalds/linux.git"
- ##
- url: "ssh://git@github.com/your-git-org/your-dag-repo"
- ## the branch/tag/sha1 which we clone
- ##
- ref: "main"
- ## the name of a pre-created secret containing files for ~/.ssh/
- ##
- ## NOTE:
- ## - this is ONLY RELEVANT for SSH git repos
- ## - the secret commonly includes files: id_rsa, id_rsa.pub, known_hosts
- ## - known_hosts is NOT NEEDED if `git.sshKeyscan` is true
- ##
- secret: "airflow-secret"
- ## if we should implicitly trust [git.repoHost]:git.repoPort, by auto creating a ~/.ssh/known_hosts
- ##
- ## WARNING:
- ## - setting true will increase your vulnerability ot a repo spoofing attack
- ##
- ## NOTE:
- ## - this is ONLY RELEVANT for SSH git repos
- ## - this is not needed if known_hosts is provided in `git.secret`
- ## - git.repoHost and git.repoPort ARE REQUIRED for this to work
- ##
- sshKeyscan: true
- ## the name of the private key file in your `git.secret`
- ##
- ## NOTE:
- ## - this is ONLY RELEVANT for PRIVATE SSH git repos
- ##
- privateKeyName: id_rsa
- ## the host name of the git repo
- ##
- ## NOTE:
- ## - this is ONLY REQUIRED for SSH git repos
- ##
- ## EXAMPLE:
- ## repoHost: "github.com"
- ##
- repoHost: "github.com"
- ## the port of the git repo
- ##
- ## NOTE:
- ## - this is ONLY REQUIRED for SSH git repos
- ##
- repoPort: 22
- ## configs for the git-sync container
- ##
- gitSync:
- ## enable the git-sync sidecar container
- ##
- enabled: true
- ## resource requests/limits for the git-sync container
- ##
- ## NOTE:
- ## - when `workers.autoscaling` is true, YOU MUST SPECIFY a resource request
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "50m"
- ## memory: "64Mi"
- ##
- resources: {}
- ## the docker image for the git-sync container
- image:
- repository: alpine/git
- tag: latest
- ## values: Always or IfNotPresent
- pullPolicy: Always
- ## the git sync interval in seconds
- ##
- refreshTime: 10
- ## configs for the git-clone container
- ##
- ## NOTE:
- ## - use this container if you want to only clone the external git repo
- ## at Pod start-time, and not keep it synchronised afterwards
- ##
- initContainer:
- ## enable the git-clone sidecar container
- ##
- ## NOTE:
- ## - this is NOT required for the git-sync sidecar to work
- ## - this is mostly used for when `dags.installRequirements` is true to ensure that
- ## requirements.txt is available at Pod start
- ##
- enabled: false
- ## resource requests/limits for the git-clone container
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "50m"
- ## memory: "64Mi"
- ##
- resources: {}
- ## the docker image for the git-clone container
- image:
- repository: alpine/git
- tag: latest
- ## values: Always or IfNotPresent
- pullPolicy: Always
- ## path to mount dags-data volume to
- ##
- ## WARNING:
- ## - this path is also used by the git-sync container
- ##
- mountPath: "/dags"
- ## sub-path under `dags.initContainer.mountPath` to sync dags to
- ##
- ## WARNING:
- ## - this path is also used by the git-sync container
- ## - this MUST INCLUDE the leading /
- ##
- ## EXAMPLE:
- ## syncSubPath: "/subdirWithDags"
- ##
- syncSubPath: ""
- ###################################
- # Kubernetes - Ingress Configs
- ###################################
- ingress:
- ## if we should deploy Ingress resources
- ##
- ## NOTE:
- ## - if you want to change url prefix for web ui or flower (even if you do not use this Ingress),
- ## you can change `web.baseUrl` and `flower.urlPrefix`
- ##
- enabled: false
- ## configs for the Ingress of the web Service
- ##
- web:
- ## annotations for the web Ingress
- ##
- annotations: {}
- ## additional labels for the web Ingress
- ##
- labels: {}
- ## the path for the web Ingress
- ##
- ## WARNING:
- ## - do NOT include the trailing slash (for root, set an empty string)
- ##
- ## NOTE:
- ## - should be compatible with `web.baseUrl` config
- ##
- ## EXAMPLE: (if set to "/airflow")
- ## - UI: http://example.com/airflow/admin
- ## - API: http://example.com/airflow/api
- ## - HEALTH: http://example.com/airflow/health
- ##
- path: ""
- ## the hostname for the web Ingress
- ##
- host: ""
- ## the livenessPath for the web Ingress
- ##
- ## NOTE:
- ## - if set to "", defaults to: `{ingress.web.path}/health`
- ##
- livenessPath: ""
- ## 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
- ##
- ## NOTE:
- ## - this MUST be specified if `ingress.web.tls.enabled` is true
- ##
- secretName: ""
- ## http paths to add to the web Ingress before the default path
- ##
- ## EXAMPLE:
- ## precedingPaths:
- ## - path: "/*"
- ## serviceName: "ssl-redirect"
- ## servicePort: "use-annotation"
- ##
- precedingPaths: []
- ## http paths to add to the web Ingress after the default path
- ##
- ## EXAMPLE:
- ## succeedingPaths:
- ## - path: "/extra-service"
- ## serviceName: "extra-service"
- ## servicePort: "use-annotation"
- ##
- succeedingPaths: []
- ## configs for the Ingress of the flower Service
- ##
- flower:
- ## annotations for the flower Ingress
- ##
- annotations: {}
- ## additional labels for the flower Ingress
- ##
- labels: {}
- ## the path for the flower Ingress
- ##
- ## WARNING:
- ## - do NOT include the trailing slash (for root, set an empty string)
- ##
- ## NOTE:
- ## - should match `flower.urlPrefix` config
- ##
- ## EXAMPLE: (if set to "/airflow/flower")
- ## - UI: http://example.com/airflow/flower
- ##
- path: ""
- ## the hostname for the flower Ingress
- ##
- host: ""
- ## the livenessPath for the flower Ingress
- ##
- ## WARNING:
- ## - keep the trailing slash
- ##
- ## NOTE:
- ## - if set to "", defaults to: `{ingress.flower.path}/`
- ##
- livenessPath: ""
- ## configs for flower Ingress TLS
- ##
- tls:
- ## enable TLS termination for the flower Ingress
- ##
- enabled: false
- ## the name of a pre-created Secret containing a TLS private key and certificate
- ##
- ## NOTE:
- ## - this MUST be specified if `ingress.flower.tls.enabled` is true
- ##
- secretName: ""
- ## http paths to add to the flower Ingress before the default path
- ##
- ## EXAMPLE:
- ## precedingPaths:
- ## - path: "/*"
- ## serviceName: "ssl-redirect"
- ## servicePort: "use-annotation"
- ##
- precedingPaths: []
- ## http paths to add to the flower Ingress after the default path
- ##
- ## EXAMPLE:
- ## succeedingPaths:
- ## - path: "/extra-service"
- ## serviceName: "extra-service"
- ## servicePort: "use-annotation"
- ##
- succeedingPaths: []
- ###################################
- # Kubernetes - RBAC
- ###################################
- rbac:
- ## if Kubernetes RBAC resources are created
- ##
- ## NOTE:
- ## - these allow the service account to create/delete Pods in the airflow namespace,
- ## which is required for the KubernetesPodOperator() to function
- ##
- create: true
- ## if the created RBAC Role has GET/LIST on Event resources
- ##
- ## NOTE:
- ## - this is needed for KubernetesPodOperator() to use `log_events_on_failure=True`
- ##
- events: false
- ###################################
- # Kubernetes - Service Account
- ###################################
- serviceAccount:
- ## if a Kubernetes ServiceAccount is created
- ##
- ## NOTE:
- ## - if false, you must create the service account outside of this helm chart,
- ## with the name: `serviceAccount.name`
- ##
- create: true
- ## the name of the ServiceAccount
- ##
- ## NOTE:
- ## - by default the name is generated using the `airflow.serviceAccountName` template in `_helpers.tpl`
- ##
- name: ""
- ## annotations for the ServiceAccount
- ##
- ## EXAMPLE: (to use WorkloadIdentity in Google Cloud)
- ## annotations:
- ## iam.gke.io/gcp-service-account: <<GCP_SERVICE>>@<<GCP_PROJECT>>.iam.gserviceaccount.com
- ##
- annotations: {}
- ###################################
- # Kubernetes - Extra Manifests
- ###################################
- ## additional Kubernetes manifests to include with this chart
- ##
- ## EXAMPLE:
- ## extraManifests:
- ## - apiVersion: cloud.google.com/v1beta1
- ## kind: BackendConfig
- ## metadata:
- ## name: "{{ .Release.Name }}-test"
- ## spec:
- ## securityPolicy:
- ## name: "gcp-cloud-armor-policy-test"
- ##
- extraManifests: []
- ###################################
- # Database - PostgreSQL Chart
- # - https://github.com/helm/charts/tree/master/stable/postgresql
- ###################################
- postgresql:
- ## if the `stable/postgresql` chart is used
- ##
- ## WARNING:
- ## - this is NOT SUITABLE for production deployments of Airflow,
- ## you should seriously consider using an external database service,
- ## which can be configured with values under: `externalDatabase`
- ##
- ## NOTE:
- ## - set to `false` if using an external database
- ##
- enabled: true
- ## the postgres database to use
- ##
- postgresqlDatabase: airflow
- ## the postgres user to create
- ##
- postgresqlUsername: postgres
- ## the postgres user's password
- ##
- ## WARNING:
- ## - you should NOT use this, instead specify `postgresql.existingSecret`
- ##
- postgresqlPassword: airflow
- ## the name of a pre-created secret containing the postgres password
- ##
- existingSecret: ""
- ## the key within `postgresql.existingSecret` containing the password string
- ##
- existingSecretKey: "postgresql-password"
- ## configs for the PVC of postgresql
- ##
- persistence:
- ## if postgres will use Persistent Volume Claims to store data
- ##
- ## WARNING:
- ## - if false, data will be LOST as postgres Pods restart
- ##
- enabled: true
- ## the name of the StorageClass used by the PVC
- ##
- storageClass: ""
- ## the access modes of the PVC
- ##
- accessModes:
- - ReadWriteOnce
- ## the size of PVC to request
- ##
- size: 8Gi
- ## configs for the postgres StatefulSet
- master:
- ## annotations for the postgres Pod
- ##
- podAnnotations:
- cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
- ###################################
- # Database - External Database
- # - these configs are only used when `postgresql.enabled` is false
- ###################################
- externalDatabase:
- ## the type of external database: {mysql,postgres}
- ##
- type: postgres
- ## the host of the external database
- ##
- host: localhost
- ## the port of the external database
- ##
- port: 5432
- ## the database/scheme to use within the the external database
- ##
- database: airflow
- ## the user of the external database
- ##
- user: airflow
- ## the name of a pre-created secret containing the external database password
- ##
- passwordSecret: ""
- ## the key within `externalDatabase.passwordSecret` containing the password string
- ##
- passwordSecretKey: "postgresql-password"
- ## the connection properties for external database, e.g. "?sslmode=require"
- properties: ""
- ###################################
- # Database - Redis Chart
- # - https://github.com/helm/charts/tree/master/stable/redis
- ###################################
- redis:
- ## if the `stable/redis` chart is used
- ##
- ## NOTE:
- ## - set to `false` if using an external redis database
- ## - set to `false` if `airflow.executor` is `KubernetesExecutor`
- ##
- enabled: false
- ## the redis password
- ##
- ## WARNING:
- ## - you should NOT use this, instead specify `redis.existingSecret`
- ##
- password: airflow
- ## the name of a pre-created secret containing the redis password
- ##
- existingSecret: ""
- ## the key within `redis.existingSecret` containing the password string
- ##
- existingSecretPasswordKey: "redis-password"
- ## configs for redis cluster mode
- ##
- cluster:
- ## if redis runs in cluster mode
- ##
- enabled: false
- ## the number of redis slaves
- ##
- slaveCount: 1
- ## configs for the redis master
- ##
- master:
- ## resource requests/limits for the master Pod
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "100m"
- ## memory: "256Mi"
- ##
- resources: {}
- ## annotations for the master Pod
- ##
- podAnnotations:
- cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
- ## configs for the PVC of the redis master
- ##
- persistence:
- ## use a PVC to persist data
- ##
- enabled: false
- ## the name of the StorageClass used by the PVC
- ##
- storageClass: ""
- ## the access mode of the PVC
- ##
- accessModes:
- - ReadWriteOnce
- ## the size of PVC to request
- ##
- size: 8Gi
- ## configs for the redis slaves
- ##
- slave:
- ## resource requests/limits for the slave Pods
- ##
- ## EXAMPLE:
- ## resources:
- ## requests:
- ## cpu: "100m"
- ## memory: "256Mi"
- ##
- resources: {}
- ## annotations for the slave Pods
- ##
- podAnnotations:
- cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
- ## configs for the PVC of the redis slaves
- ##
- persistence:
- ## use a PVC to persist data
- ##
- enabled: false
- ## the name of the StorageClass used by the PVC
- ##
- storageClass: ""
- ## the access mode of the PVC
- ##
- accessModes:
- - ReadWriteOnce
- ## the size of PVC to request
- ##
- size: 8Gi
- ###################################
- # Database - External Database
- # - these configs are only used when `redis.enabled` is false
- ###################################
- externalRedis:
- ## the host of the external redis
- ##
- host: localhost
- ## the port of the external redis
- ##
- port: 6379
- ## the database number to use within the the external redis
- ##
- databaseNumber: 1
- ## the name of a pre-created secret containing the external redis password
- ##
- passwordSecret: ""
- ## the key within `externalRedis.passwordSecret` containing the password string
- ##
- passwordSecretKey: "redis-password"
- ###################################
- # Prometheus - ServiceMonitor
- ###################################
- serviceMonitor:
- ## if the ServiceMonitor resources should be deployed
- ##
- ## WARNING:
- ## - you will need an exporter in your airflow docker container, for example:
- ## https://github.com/epoch8/airflow-exporter
- ##
- ## NOTE:
- ## - you can install pip packages with `airflow.extraPipPackages`
- ## - ServiceMonitor is a resource from: https://github.com/coreos/prometheus-operator
- ##
- enabled: false
- ## labels for ServiceMonitor, so that Prometheus can select it
- ##
- selector:
- prometheus: kube-prometheus
- ## the ServiceMonitor web endpoint path
- ##
- path: /admin/metrics
- ## the ServiceMonitor web endpoint interval
- ##
- interval: "30s"
- ###################################
- # Prometheus - PrometheusRule
- ###################################
- prometheusRule:
- ## if the PrometheusRule resources should be deployed
- ##
- ## WARNING:
- ## - you will need an exporter in your airflow docker container, for example:
- ## https://github.com/epoch8/airflow-exporter
- ##
- ## NOTE:
- ## - you can install pip packages with `airflow.extraPipPackages`
- ## - PrometheusRule a resource from: https://github.com/coreos/prometheus-operator
- ##
- enabled: false
- ## labels for PrometheusRule, so that Prometheus can select it
- ##
- additionalLabels: {}
- ## alerting rules for Prometheus
- ##
- ## NOTE:
- ## - documentation: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
- ##
- groups: []
|