Apache Airflow 是一个用于以有向无环图(DAGs)形式表达和执行工作流的工具,包含任务调度、进度监控和依赖管理等功能。Bitnami 提供的该 Helm Chart 用于在 Kubernetes 集群上快速部署和配置 Apache Airflow,简化其在容器化环境中的管理流程。
Apache Airflow 官方概述
商标说明:本软件包由 Bitnami 打包,提及的商标分属各自公司所有,使用不意味着关联或背书。
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/airflow
生产环境建议使用 VMware Tanzu Application Catalog(Bitnami 商业版目录)。
自 2025 年 8 月 28 日起,Bitnami 将升级其公共镜像目录,推出 Bitnami Secure Images 计划,重点提供安全硬化的容器镜像。过渡期间注意:
docker.io/bitnamilegacy 仓库,不再更新详细信息见 https://github.com/bitnami/containers/issues/83267%E3%80%82
使用发布名称 my-release 安装:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/airflow
需替换占位符:
REGISTRY_NAME为 Helm 镜像仓库(如registry-1.docker.io),REPOSITORY_NAME为仓库名称(如bitnamicharts)。
Airflow 支持多种执行器,通过 executor 参数指定:
CeleryExecutor(默认)
基于 Redis 消息队列协调 worker 节点,适用于分布式任务处理:
consoleexecutor=CeleryExecutor # 默认启用,无需额外配置
KubernetesExecutor
为每个任务动态创建 worker pod,无需预置 worker:
consoleexecutor=KubernetesExecutor rbac.create=true serviceAccount.create=true redis.enabled=false # 无需 Redis,可禁用
任务 pod 模板通过
worker.podTemplate自定义。
LocalExecutor
在 Scheduler pod 内通过进程池执行任务:
consoleexecutor=LocalExecutor redis.enabled=false
其他执行器
Bitnami Chart 在首次启动时配置凭证,后续更新需手动操作:
shellkubectl create secret generic SECRET_NAME \ --from-literal=airflow-password=PASSWORD \ --from-literal=airflow-fernet-key=FERNET_KEY \ --from-literal=airflow-secret-key=SECRET_KEY \ --from-literal=airflow-jwt-secret-key=JWT_SECRET_KEY \ --dry-run -o yaml | kubectl apply -f -
自动生成配置
默认根据 Chart 参数自动生成 airflow.cfg,例如 executor 参数对应 [core] 部分的 executor 配置。
自定义配置
通过 configuration 参数提供完整配置(YAML 格式):
yamlconfiguration: core: dags_folder: "/opt/bitnami/airflow/dags" load_examples: "False" webserver: expose_config: "True"
将被转换为:
ini[core] dags_folder = "/opt/bitnami/airflow/dags" load_examples = "False" [webserver] expose_config = "True"
扩展默认配置
通过 overrideConfiguration 参数覆盖默认配置,优先级高于 configuration:
yamloverrideConfiguration: core: parallelism: 32
支持以下两种方式(可同时使用):
方式 1:使用现有 ConfigMap
consoledags.enabled=true dags.existingConfigmap=my-dags-configmap
方式 2:从 Git 仓库同步
通过 initContainer 克隆仓库,sidecar 容器定期更新:
consoledags.enabled=true dags.repositories[0].repository=https://github.com/USERNAME/REPOSITORY # Git 仓库地址 dags.repositories[0].name=REPO-IDENTIFIER # 仓库标识(唯一) dags.repositories[0].branch=main # 分支
https://USERNAME:TOKEN@repo)或 SSH(通过 dags.sshKey 或 dags.existingSshKeySecret 配置密钥)从 Git 仓库加载插件,配置方式类似 DAG:
consoleplugins.enabled=true plugins.repositories[0].repository=https://github.com/teamclairvoyant/airflow-rest-api-plugin.git plugins.repositories[0].branch=v1.0.9-branch plugins.repositories[0].path=plugins # 插件在仓库中的路径
通过 extraVolumes 和 extraVolumeMounts 挂载 requirements.txt 至 /bitnami/python/requirements.txt,容器启动时自动执行 pip install -r:
yamlextraVolumes: - name: requirements-volume configMap: name: airflow-requirements extraVolumeMounts: - name: requirements-volume mountPath: /bitnami/python/requirements.txt subPath: requirements.txt
使用外部 PostgreSQL
consolepostgresql.enabled=false # 禁用内置 PostgreSQL externalDatabase.host=my.external.postgres.host # 外部数据库地址 externalDatabase.user=bn_airflow # 用户名 externalDatabase.database=bitnami_airflow # 数据库名 externalDatabase.existingSecret=all-my-secrets # 存储密码的 Secret 名称 externalDatabase.existingSecretPasswordKey=postgresql-password # Secret 中密码的 Key
使用外部 Redis(仅 CeleryExecutor)
consoleredis.enabled=false # 禁用内置 Redis externalRedis.host=my.external.redis.host # 外部 Redis 地址 externalRedis.existingSecret=all-my-secrets # 存储密码的 Secret 名称 externalRedis.existingSecretPasswordKey=redis-password # Secret 中密码的 Key
现有 Secret 示例
yamlapiVersion: v1 kind: Secret metadata: name: all-my-secrets type: Opaque data: airflow-password: "Smo1QTJLdGxXMg==" # base64 编码的密码 airflow-fernet-key: "YVRZeVJVWnlXbU4wY1dOalVrdE1SV3cxWWtKeFIzWkVRVTVrVjNaTFR6WT0=" postgresql-password: "cG9zdGdyZXMK" redis-password: "cmVkaXMK"
基本配置
启用 StatsD 指标导出和 Prometheus 集成:
consolemetrics.enabled=true
Chart 会部署 StatsD Exporter,将指标转换为 Prometheus 格式。
Prometheus Operator 集成
部署 ServiceMonitor 资源:
consolemetrics.serviceMonitor.enabled=true
需确保集群已安装 Prometheus Operator CRD(可通过 https://github.com/bitnami/charts/tree/main/bitnami/kube-prometheus 安装)。
Ingress TLS
通过 Ingress 控制器管理 TLS:
consoleingress.enabled=true ingress.tls=true ingress.hostname=airflow.example.com ingress.tlsSecret=airflow-tls-secret # 包含 tls.crt 和 tls.key 的 Secret
Webserver 直接 TLS
配置 Webserver 自身启用 TLS:
consoleweb.tls.enabled=true web.tls.existingSecret=web-tls-secret # 现有 TLS Secret
web.tls.autoGenerated.engine=helm)或 CertManager(engine=cert-manager,需集群安装 CertManager)手动设置资源请求与限制
yamlweb: resources: requests: cpu: 200m memory: 256Mi limits: cpu: 1000m memory: 1Gi scheduler: resources: requests: cpu: 300m memory: 512Mi worker: resources: requests: cpu: 500m memory: 1Gi
使用资源预设
通过 resourcesPreset 快速应用预定义配置(如 small、medium,定义见 https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15%EF%BC%89%EF%BC%9A
consoleweb.resourcesPreset=medium scheduler.resourcesPreset=medium worker.resourcesPreset=large
Airflow 自身无持久化存储需求,依赖 PostgreSQL 存储元数据(由 PostgreSQL Chart 管理持久化)。
| 参数名 | 描述 | 默认值 |
|---|---|---|
global.imageRegistry | 全局 Docker 镜像仓库 | "" |
global.imagePullSecrets | 全局镜像拉取密钥列表 | [] |
global.defaultStorageClass | 持久化存储的默认 StorageClass | "" |
完整参数列表:由于长度限制,完整参数请参考 https://github.com/bitnami/charts/blob/main/bitnami/airflow/README.md%E3%80%82
使用 Velero 备份和恢复 Kubernetes 集群中的持久化卷及部署配置,具体步骤见 Bitnami 备份指南。
以下是 bitnamicharts/airflow 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务