_images/helm-logo.svg

Apache Airflow 的 Helm Chart

此 Chart 使用 Helm 包管理器,在 Kubernetes 集群上引导(bootstrap)一个 Airflow 部署。

Requirements

  • Kubernetes 1.30+ 集群

  • Helm 3.10+

  • 底层基础设施中对 PV Provisioner 的支持(可选)

特性

  • 支持的执行器(所有 Airflow 版本): LocalExecutorCeleryExecutorKubernetesExecutor

  • 支持的混合静态执行器(Airflow 版本 2.11.X): LocalKubernetesExecutorCeleryKubernetesExecutor

  • 支持多执行器(2.11+

  • 支持 AWS Provider 版本 8.21.0+ 的 AWS 执行器

    • airflow.providers.amazon.aws.executors.batch.AwsBatchExecutor

    • airflow.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+

  • 支持的数据库后端:PostgreSQLMySQL

  • 由 KEDA 提供的 CeleryExecutor 自动伸缩

  • PostgreSQLPgBouncer 的经受考验的配置

  • 监控

    • 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 时,必须 设置以下四个值,否则应用将无法启动,因为迁移不会被执行。

values.yaml
createUserJob:
  useHelmHooks: false
  applyCustomEnv: false
migrateDatabaseJob:
  useHelmHooks: false
  applyCustomEnv: false

这样可以确保这些 CI/CD 服务在更新时不会出现问题,并且能够保持 Kubernetes Job 清单的不可变性。

注意

此规则同样适用于在 helm installhelm upgrade 命令中使用 --wait 标志的 Chart 安装。

注意

在使用 Argo 部署此 Helm Chart 时,您可能会遇到数据库迁移在升级时未自动运行的问题。

要让 Argo CD 自动运行数据库迁移,您需要添加以下内容:

values.yaml
migrateDatabaseJob:
  jobAnnotations:
    "argocd.argoproj.io/hook": Sync

这将在每次 Argo CD 触发 Sync 事件时执行数据库迁移。虽然在每次同步时运行迁移并非最佳实践,但这是一种权衡,能够保证迁移自动执行。

如果您在使用内置 Redis 的 CeleryExecutorCeleryKubernetesExecutor,建议通过提供 redis.passwordSecretNamedata.brokerUrlSecretName 或直接使用 redis.password 来设置静态 Redis 密码。

注意

默认情况下,extraSecretsextraConfigMaps 也会启用 Helm hooks。使用上述 CI/CD 工具时,可能会因这些默认 hook 而出现问题。

为避免潜在问题,建议通过将 useHelmHooks=false 设置为以下示例所示,以禁用这些 hook。

values.yaml
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 来启用它。

values.yaml
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

注意

如果在升级后未更改 useStandardNamingfullnameOverride,则可以照常进行,且不会出现意外行为。

此条目是否有帮助?