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

在EKS集群的Airflow中使用PVC上传DAG遇问题求助

问题分析与解决方案

一、核心错误点

  1. hostPath PV在EKS中不适用
    EKS是分布式集群,每个节点的本地hostPath路径相互独立,Pod重启后若调度到其他节点,之前复制的DAG文件会因节点本地路径不一致丢失,这就是重启Pod后dag.py消失的原因。同时Airflow的Webserver、Scheduler等组件可能被调度到不同节点,导致各组件无法共享同一份DAG文件,这也是初期DAG在UI不显示的关键原因——Scheduler未读取到DAG。
  2. 存储类与访问模式不匹配
    你使用的gp3-storage-class是AWS EBS的存储类,而EBS仅支持ReadWriteOnce访问模式,但你定义的PV/PVC指定了ReadWriteMany,这会导致PV/PVC绑定异常,无法提供正确的共享存储能力。

二、正确配置步骤

1. 创建EKS兼容的共享存储(AWS EFS)

EKS中实现ReadWriteMany共享存储,推荐使用AWS EFS:

  • 在AWS控制台创建EFS文件系统,确保与EKS集群同VPC,且安全组允许集群节点访问EFS的NFS端口(2049)。
  • 安装EFS CSI驱动到EKS集群,使Kubernetes可挂载EFS。
  • 创建EFS对应的StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: <你的EFS文件系统ID>
  directoryPerms: "700"

2. 重新创建PV/PVC

使用EFS的StorageClass创建PVC(EFS的PV可由CSI驱动自动生成,无需手动定义):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: airflow-dags-pvc
  namespace: airflow
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: efs-sc

3. 重新安装Airflow Helm Chart

确保配置指向新的PVC:

helm install my-airflow apache-airflow/airflow \
  --namespace airflow \
  --set dags.persistence.enabled=true \
  --set dags.persistence.existingClaim=airflow-dags-pvc \
  --set airflow.config.AIRFLOW__CORE__DAGS_FOLDER=/opt/airflow/dags

三、正确上传DAG的方式

方式1:通过Pod上传DAG

找到挂载了airflow-dags-pvc的Pod(如Webserver Pod),用kubectl cp上传本地DAG:

# 查看目标Pod名称
kubectl get pods -n airflow | grep webserver
# 复制本地dag.py到Pod的DAG目录
kubectl cp ./dag.py airflow/<webserver-pod-name>:/opt/airflow/dags/

所有挂载该PVC的Airflow组件会共享这份DAG,Airflow默认每5分钟扫描一次DAG目录,无需重启Pod即可识别新DAG(可通过AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL调整扫描间隔)。

方式2:直接上传到EFS文件系统

在本地或EC2实例挂载EFS,直接复制DAG到对应目录:

# 挂载EFS到本地目录
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 <EFS挂载点>:/ /mnt/airflow-dags
# 复制DAG文件到挂载目录
cp ./dag.py /mnt/airflow-dags/

方式3:Git同步DAG(生产环境推荐)

Airflow Helm Chart支持从Git仓库自动同步DAG,无需手动上传:

helm upgrade my-airflow apache-airflow/airflow \
  --namespace airflow \
  --set dags.gitSync.enabled=true \
  --set dags.gitSync.repo=<你的Git仓库地址> \
  --set dags.gitSync.branch=main \
  --set dags.gitSync.subPath=dags \
  --set dags.persistence.enabled=false  # 使用Git同步时可关闭PVC挂载

内容的提问来源于stack exchange,提问作者Valle1208

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:26:12