Apache Airflow 的 Helm Chart¶
此 Chart 使用 Helm 包管理器,在 Kubernetes 集群上引导(bootstrap)一个 Airflow 部署。
Requirements¶
Kubernetes 1.30+ 集群
Helm 3.10+
底层基础设施中对 PV Provisioner 的支持(可选)
特性¶
支持的执行器(所有 Airflow 版本):
LocalExecutor、CeleryExecutor、KubernetesExecutor支持的混合静态执行器(Airflow 版本
2.11.X):LocalKubernetesExecutor、CeleryKubernetesExecutor支持多执行器(
2.11+)支持 AWS Provider 版本
8.21.0+的 AWS 执行器airflow.providers.amazon.aws.executors.batch.AwsBatchExecutorairflow.providers.amazon.aws.executors.ecs.AwsEcsExecutor
支持 AWS Provider 版本
9.9.0+的 AWS 执行器airflow.providers.amazon.aws.executors.aws_lambda.lambda_executor.AwsLambdaExecutor
支持 edge3 Provider 版本
1.0.0+的 Edge 执行器airflow.providers.edge3.executors.EdgeExecutor
支持的 Airflow 版本:
2.11+、3.0+支持的数据库后端:
PostgreSQL、MySQL由 KEDA 提供的
CeleryExecutor自动伸缩PostgreSQL与PgBouncer的经受考验的配置监控
Airflow 的 StatsD/Prometheus 指标
PgBouncer 的 Prometheus 指标
Flower
新部署后自动进行数据库迁移
部署期间创建管理员账户
Kerberos 安全配置
使用单一命令即可部署任何类型的执行器。您无需提供其他服务,例如 Redis/数据库,即可测试 Airflow
安装 Helm Chart¶
使用 Helm 3 安装此 Chart,请运行以下命令
helm repo add apache-airflow https://airflow.org.cn
helm upgrade --install airflow apache-airflow/airflow --namespace airflow --create-namespace
该命令在 Kubernetes 集群的 airflow 命名空间中使用默认配置部署 Airflow。参数参考 部分列出了安装期间可以配置的参数。
提示
使用 helm list 列出所有发布。
升级已部署的 Helm Chart¶
使用发布名称 airflow 升级此 Chart
helm upgrade airflow apache-airflow/airflow --namespace airflow
注意
要升级到 Chart 的新版本,请先运行 helm repo update。
提示
在 helm upgrade 命令上设置 --install 标志,如果之前未部署,则会安装 Helm Chart。
卸载已部署的 Helm Chart¶
卸载/删除 airflow 部署
helm delete airflow --namespace airflow
该命令会移除与 Chart 关联的所有 Kubernetes 组件并删除该发布。
注意
某些由 Chart 的 helm hooks 创建的 Kubernetes 资源在执行 helm uninstall 后可能仍保留在命名空间中。
使用 Argo CD、Flux、Rancher 或 Terraform 安装 Helm Chart¶
使用 Argo CD、Flux、Rancher 或 Terraform 安装 Chart 时,必须 设置以下四个值,否则应用将无法启动,因为迁移不会被执行。
createUserJob:
useHelmHooks: false
applyCustomEnv: false
migrateDatabaseJob:
useHelmHooks: false
applyCustomEnv: false
这样可以确保这些 CI/CD 服务在更新时不会出现问题,并且能够保持 Kubernetes Job 清单的不可变性。
注意
此规则同样适用于在 helm install 或 helm upgrade 命令中使用 --wait 标志的 Chart 安装。
注意
在使用 Argo 部署此 Helm Chart 时,您可能会遇到数据库迁移在升级时未自动运行的问题。
要让 Argo CD 自动运行数据库迁移,您需要添加以下内容:
migrateDatabaseJob:
jobAnnotations:
"argocd.argoproj.io/hook": Sync
这将在每次 Argo CD 触发 Sync 事件时执行数据库迁移。虽然在每次同步时运行迁移并非最佳实践,但这是一种权衡,能够保证迁移自动执行。
如果您在使用内置 Redis 的 CeleryExecutor 或 CeleryKubernetesExecutor,建议通过提供 redis.passwordSecretName 与 data.brokerUrlSecretName 或直接使用 redis.password 来设置静态 Redis 密码。
注意
默认情况下,extraSecrets 与 extraConfigMaps 也会启用 Helm hooks。使用上述 CI/CD 工具时,可能会因这些默认 hook 而出现问题。
为避免潜在问题,建议通过将 useHelmHooks=false 设置为以下示例所示,以禁用这些 hook。
extraSecrets:
'{{ .Release.Name }}-example':
useHelmHooks: false
data: |
AIRFLOW_VAR_HELLO_MESSAGE: "Hi!"
extraConfigMaps:
'{{ .Release.Name }}-example':
useHelmHooks: false
data: |
AIRFLOW_VAR_HELLO_MESSAGE: "Hi!"
命名约定¶
对于新安装,强烈建议开始使用标准命名约定。默认未启用此功能,因为它可能在现有安装上导致意外行为。您可以通过设置 useStandardNaming 来启用它。
useStandardNaming: true
对于已有的安装,所有资源将使用新名称重新创建,helm 会删除之前的资源。
这不会删除 StatefulSets/Deployments 使用的日志 PVC,但会使用全新 PVC 重新创建它们。如果您希望保留日志历史,需要在部署后手动将这些卷的数据复制到新卷中。具体步骤取决于您使用的存储后端/类。如果您不介意从全新日志/Redis 卷开始,可以直接删除旧的持久卷声明,例如:
kubectl delete pvc -n airflow logs-gta-triggerer-0
kubectl delete pvc -n airflow logs-gta-worker-0
kubectl delete pvc -n airflow redis-db-gta-redis-0
注意
如果在升级后未更改 useStandardNaming 或 fullnameOverride,则可以照常进行,且不会出现意外行为。