You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes新手求教:如何在EKS上“开箱即用”部署Airflow?

嘿,作为Kubernetes新手想把Airflow部署到EKS上,咱们一步步来理清楚——既帮你优化现有的Terraform+Helm方案,也给你几个其他可选的路径,都能实现接近“开箱即用”的效果~

优化你的Terraform+Helm部署

你选Terraform来管理基础设施状态真的很明智,不过当前代码里有几个小细节得调整下,才能顺利跑起来:

1. 修正Helm Chart名称

官方Airflow Helm仓库的chart名称是airflow,不是你写的airflow-chart,这个小错误会导致Terraform找不到对应的chart包。

2. 统一Kubernetes认证配置

你的kubernetes provider已经用了EKS的直接认证(通过endpoint、CA证书和token),但helm provider却依赖本地的~/.kube/config,这样在自动化部署场景下容易出问题。咱们把helm provider也改成和kubernetes provider一致的认证方式,摆脱本地配置依赖:

修正后的完整Terraform代码片段如下:

provider "kubernetes" {
  host                   = data.aws_eks_cluster.cluster.endpoint
  cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
  token                  = data.aws_eks_cluster_auth.cluster.token
  load_config_file       = false
}

provider "helm" {
  kubernetes {
    host                   = data.aws_eks_cluster.cluster.endpoint
    cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
    token                  = data.aws_eks_cluster_auth.cluster.token
    load_config_file       = false
  }
}

data "helm_repository" "airflow" {
  name = "airflow"
  url  = "https://airflow-helm.github.io/charts"
}

resource "helm_release" "airflow" {
  name       = "airflow"
  repository = data.helm_repository.airflow.metadata[0].name
  chart      = "airflow"
  version    = "2.8.0" # 指定一个稳定版本,避免自动升级踩坑

  # 基础配置:暴露web界面到公网(测试环境用)
  set {
    name  = "webserver.service.type"
    value = "LoadBalancer"
  }

  # 启用CeleryExecutor+自动扩缩容,适合多任务场景
  set {
    name  = "airflow.executor"
    value = "CeleryExecutor"
  }

  set {
    name  = "workers.autoscaling.enabled"
    value = "true"
  }
}

3. 一键式配置(接近开箱即用)

如果想更省心,可以写一个values.yaml文件,把所有基础配置放进去,然后在Terraform里引用它。比如启用内置的Postgres和Redis(测试环境足够用),配置Airflow的基础参数:

# values.yaml 示例
airflow:
  defaultAirflowRepository: apache/airflow
  defaultAirflowTag: "2.8.0"
  executor: CeleryExecutor

webserver:
  service:
    type: LoadBalancer
    port: 80

workers:
  replicas: 2
  autoscaling:
    enabled: true
    minReplicas: 1
    maxReplicas: 5

postgresql:
  enabled: true
  auth:
    username: airflow
    password: airflow
    database: airflow

redis:
  enabled: true
  auth:
    password: airflow

然后在Terraform的helm_release块里加上:

values = [file("${path.module}/values.yaml")]

这样部署后,你直接访问LoadBalancer的IP就能打开Airflow的web界面,默认账号密码是admin/admin(记得测试环境用完改密码)。

其他可选部署方案

如果你不想用Terraform,还有几个方案能快速部署Airflow到EKS:

直接用Helm CLI

这是最轻量化的方式,先把EKS的kubeconfig配置到本地:

aws eks update-kubeconfig --name your-eks-cluster-name

然后添加Airflow仓库并安装:

helm repo add airflow https://airflow-helm.github.io/charts
helm repo update
# 创建命名空间
kubectl create namespace airflow
# 安装Airflow,用刚才的values.yaml配置
helm install airflow airflow/airflow --namespace airflow -f values.yaml

这个方式适合快速测试,不用管Terraform的状态,上手成本极低。

AWS Managed Airflow (MWAA)

如果你完全不想自己运维Airflow集群,MWAA绝对是最佳选择——它是AWS托管的Airflow服务,底层运行在EKS上,你只需要配置DAG存储(S3)、执行角色和基础参数,剩下的集群维护、扩容、升级全由AWS搞定,真正的“开箱即用”。不过这是付费服务,适合生产环境或者不想折腾运维的场景。

Kustomize(原生K8s配置)

如果你喜欢用原生Kubernetes配置文件,可以用Kustomize来部署Airflow。官方提供了基础的Kustomize模板,你可以根据需要修改服务类型、副本数等,然后用kubectl apply -k一键部署。不过相比Helm,需要手动管理更多组件的配置,适合已经熟悉K8s manifest的用户。


内容的提问来源于stack exchange,提问作者alt-f4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:52:19