Helm部署Airflow:GCS同步边车容器运行但无DAG显示故障排查
问题详情
受公司政策限制,通过ArgoCD部署Airflow Helm Chart时无法使用gitSync或Kubernetes共享卷这类常规Git仓库同步方案,因此采用替代方案:创建边车容器,通过Cron任务每隔N分钟从GCS存储桶(由Git Action填充)拉取DAG数据。
已完成配置
- 自定义Docker镜像,内置GCP工具包(gsutil用于数据传输、gcloud用于身份验证),并添加以airflow用户身份执行的Cron任务:
* * * * * gsutil -m cp -r gs://mybucket/airflow_k8/dagsv2/* /opt/airflow/gcs/dagsv2
- 本地构建运行该镜像时,使用以下ENTRYPOINT可正常触发Cron任务并拉取数据:
["bash", "-c", "gcloud auth activate-service-account --key-file=/opt/airflow/creds/gcp_dataeng_secret.json && cron -f"]
- 部署到Worker和Scheduler组件的Helm配置如下:
helm: | ... # 为Airflow所有组件提供GCP密钥gcp_dataeng_secret.json volumes: - name: gcp-secret-path secret: secretName: airflow-gcp-dataeng-secret ... workers / scheduler : #Worker和Scheduler配置相同,使用同一个边车容器 ... extraVolumes: - name: dags-folder emptyDir: {} # 可能不需要在此挂载,已在边车容器中挂载,但为保险起见仍添加 extraVolumeMounts: - name: dags-folder mountPath: /opt/airflow/gcs/dagsv2 extraContainers: - name: cron-job image: my-gcs-sync-customImage:latest# 为securityContext指定airflow用户,因为任务以airflow用户定义 securityContext: runAsUser: 50000 volumeMounts: - name: gcp-secret-path mountPath: /opt/airflow/creds readOnly: true - name: dags-folder mountPath: /opt/airflow/gcs/dagsv2 readOnly: false # 通过gcp-secret-path挂载密钥文件,启动cron -f command: ["bash", "-c", "gcloud auth activate-service-account --key-file=/opt/airflow/creds/gcp_dataeng_secret.json && cron -f"] ... config: core: dags_folder: /opt/airflow/gcs/dagsv2
当前问题
部署后,cron-job边车容器成功创建且无报错,但Airflow UI始终无DAG显示。尝试多种配置调整均无效,因是Kubernetes新手推测遗漏基础配置,且受公司政策无法使用kubectl工具。
已排查情况
- 未挂载gcp-secret-path时会出现找不到密钥的错误,说明任务至少被触发;
- 存在类似S3同步实现的成功案例;
- 尝试设置
securityContext: runAsUser: 0或移除该字段,均无变化; - GCP密钥有效,已用于日志写入,具备读写权限。
内容的提问来源于stack exchange,提问作者emtec
相关产品推荐
相关产品推荐

