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

