如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
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 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



来自真实用户的反馈,见证轩辕镜像的优质服务