Skip to content

Airflow

Version: 1.0.0 AppVersion: 3.2.2

Official Apache Chart

In our project, we use the official Apache Airflow Helm chart to deploy Airflow on our Minikube cluster.

We adopted the upstream-supported chart (Airflow 3.x) so the local platform mirrors the production blueprint.


Setup

For the actual deployment into our Kubernetes cluster, we're using ArgoCD. It's a tool that helps us deploy applications automatically, following the best practices of GitOps. This means we can manage our Airflow setup with code, making changes easily and keeping everything up to date without hassle.

Using ArgoCD not only makes our lives easier by automating deployment tasks but also keeps our project tidy and well-organized. It's a smart way to handle deployments, giving us more time to focus on making our data platform better.

Airflow Argo deployment

The most important properties when defining our Airflow values are:

  • dags.gitSync.repo


    Github repo containing our Airflow DAGs code. Airflow dags-git-sync sidecars will be fetching new code periodically from it. So all code pushed there will be automatically deployed.

  • dags.gitSync.repoSubPath


    Github folder containing our DAGs code. This property is mandatory to use in this project since we are defining multiple tools in it (i.e. K8s, terraform, Helms).


Requirements

Repository Name Version
https://airflow.apache.org airflow 1.22.0

Values

Key Type Default Description
airflow.airflowVersion string "3.2.2"
airflow.apiSecretKeySecretName string "airflow-config-credentials"
airflow.apiServer.resources.limits.cpu string "1000m"
airflow.apiServer.resources.limits.memory string "1Gi"
airflow.apiServer.resources.requests.cpu string "250m"
airflow.apiServer.resources.requests.memory string "512Mi"
airflow.config.api.base_url string "https://airflow.data"
airflow.config.core.auth_manager string "airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager"
airflow.config.core.dags_are_paused_at_creation string "True"
airflow.config.core.load_examples string "False"
airflow.config.core.max_active_runs_per_dag int 1
airflow.config.core.simple_auth_manager_users string "admin:admin"
airflow.config.logging.remote_logging string "False"
airflow.createUserJob.enabled bool false
airflow.dagProcessor.enabled bool true
airflow.dagProcessor.resources.requests.cpu string "100m"
airflow.dagProcessor.resources.requests.memory string "256Mi"
airflow.dags.gitSync.branch string "main"
airflow.dags.gitSync.enabled bool true
airflow.dags.gitSync.repo string "https://github.com/afranzi/mini-data-platform.git"
airflow.dags.gitSync.rev string "HEAD"
airflow.dags.gitSync.subPath string "airflow"
airflow.dags.persistence.enabled bool false
airflow.data.metadataSecretName string "airflow-metadata"
airflow.data.resultBackendSecretName string "airflow-result-backend"
airflow.executor string "CeleryExecutor"
airflow.fernetKeySecretName string "airflow-config-credentials"
airflow.images.airflow.repository string "apache/airflow"
airflow.images.airflow.tag string "3.2.2-python3.12"
airflow.ingress.apiServer.enabled bool true
airflow.ingress.apiServer.hosts[0].name string "airflow.data"
airflow.ingress.apiServer.ingressClassName string "nginx"
airflow.ingress.apiServer.path string "/"
airflow.ingress.enabled bool true
airflow.jwtSecretName string "airflow-config-credentials"
airflow.migrateDatabaseJob.applyCustomEnv bool false
airflow.migrateDatabaseJob.enabled bool true
airflow.migrateDatabaseJob.jobAnnotations."argocd.argoproj.io/hook" string "Sync"
airflow.migrateDatabaseJob.useHelmHooks bool false
airflow.postgresql.enabled bool false
airflow.redis.enabled bool true
airflow.redis.persistence.enabled bool false
airflow.scheduler.resources.limits.cpu string "1000m"
airflow.scheduler.resources.limits.memory string "1Gi"
airflow.scheduler.resources.requests.cpu string "250m"
airflow.scheduler.resources.requests.memory string "512Mi"
airflow.triggerer.enabled bool true
airflow.triggerer.persistence.enabled bool false
airflow.triggerer.replicas int 1
airflow.triggerer.resources.requests.cpu string "100m"
airflow.triggerer.resources.requests.memory string "256Mi"
airflow.workers.persistence.enabled bool false
airflow.workers.replicas int 1
airflow.workers.resources.requests.cpu string "256m"
airflow.workers.resources.requests.memory string "1Gi"