EKS部署Airflow自定义镜像配置未生效问题排查
确认values.yaml镜像配置路径正确
官方Airflow Helm Chart中,核心组件(scheduler、worker、webserver)的镜像配置需对应到正确层级。若使用统一镜像配置,需确保修改的是顶层images.airflow节点:images: airflow: repository: <你的ECR镜像URI> tag: <镜像标签> pullPolicy: IfNotPresent若为组件单独配置,需分别修改
webserver.image、scheduler.image、worker.image的repository和tag——SnowflakeOperator需要在scheduler和worker的运行环境中加载,这两个组件的镜像必须替换为自定义版本。验证Helm配置是否已正确应用
执行helm get values airflow -n <你的命名空间>,查看输出的镜像配置是否与你修改的values.yaml一致。若不一致,检查升级命令是否正确指定了values文件:helm upgrade airflow apache-airflow/airflow -f ./values.yaml -n <你的命名空间>注意确认values文件路径和命名空间是否准确。
检查自定义镜像的有效性与集群拉取权限
- 本地拉取镜像并验证依赖:
确认输出包含docker run --rm <ECR镜像URI> pip list | grep snowflakeapache-airflow-providers-snowflake==3.1.0。 - 检查EKS节点IAM角色是否具备ECR拉取权限(需包含
ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability权限)。 - 查看Pod事件排查镜像拉取问题:
若存在kubectl describe pod <scheduler或worker Pod名称> -n <你的命名空间>ImagePullBackOff或ErrImagePull,说明镜像拉取失败,需排查网络或权限问题。
- 本地拉取镜像并验证依赖:
确认Airflow组件已重启并使用新镜像
执行以下命令查看当前Pod使用的镜像:kubectl get pods -n <你的命名空间> -o jsonpath='{.items[*].spec.containers[*].image}'若仍显示旧镜像,手动删除scheduler和worker Pod触发滚动更新:
kubectl delete pods -l app=airflow,component=scheduler -n <你的命名空间> kubectl delete pods -l app=airflow,component=worker -n <你的命名空间>排查KubernetesPodOperator的特殊场景
若你需要在KubernetesPodOperator启动的任务Pod中使用Snowflake能力,需在Operator参数中显式指定自定义镜像:from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator KubernetesPodOperator( task_id="snowflake_job", image="<你的ECR镜像URI>", # 其他必要参数 )因为KubernetesPodOperator默认使用的镜像并非Airflow核心组件镜像,需单独指定。
检查Helm Chart与Airflow版本兼容性
Airflow 2.2.4需对应匹配的官方Helm Chart版本(如Chart 1.7.x系列),版本不兼容可能导致配置解析异常。执行helm list -n <你的命名空间>查看当前Chart版本,确认与Airflow版本匹配。
内容的提问来源于stack exchange,提问作者Mithun Manohar

