Airflow Helm Chart部署后步骤及CeleryExecutor任务停滞问题排查
从你的描述来看,核心问题出在Worker Pod未就绪(0/1 Running)——这直接导致CeleryExecutor模式下任务无法被执行,进而引发调度器超时和UI的心跳提示。咱们一步步来排查修复:
1. 先搞清楚Worker Pod为什么没就绪
Worker是Celery模式下执行任务的核心,它没正常启动的话,调度器发的任务永远会卡在队列里。
查看Worker Pod的启动日志
先看看Worker启动时有没有报错信息:
kubectl logs bitnami-release-airflow-worker-0
常见的错误原因包括:
- Redis连接失败(密码错误、网络不通)
- Airflow配置问题(比如Fernet Key不正确)
- 依赖缺失或者文件权限问题
验证Worker与Redis的连通性
Celery依赖Redis作为消息队列,先确认Worker能正常连上Redis:
# 先ping Redis Pod,检查网络连通性 kubectl exec bitnami-release-airflow-worker-0 -- ping bitnami-release-redis-master-0 # 用Redis-cli验证密码和连接有效性 kubectl exec bitnami-release-airflow-worker-0 -- redis-cli -h bitnami-release-redis-master-0 -a 你的REDIS_PASSWORD ping
如果返回PONG说明连接正常,否则检查Redis密码是否和你部署时设置的一致,或者Redis Pod是否正常运行。
查看Worker Pod的事件记录
看看有没有启动失败、探针超时的关键信息:
kubectl describe pod bitnami-release-airflow-worker-0
重点看Events部分,比如是否有Readiness probe failed或者Insufficient CPU/Memory这类提示。
2. 修复调度器的超时问题
你手动执行airflow scheduler其实是多余的——Bitnami的Chart已经用进程管理器(比如supervisor)自动管理调度器进程了,手动启动会和原有进程冲突,导致异常。
停止手动启动的调度器进程
kubectl exec -it bitnami-release-airflow-scheduler-774d647447-j6vpd -- bash # 杀死手动启动的scheduler进程 pkill -f "airflow scheduler" exit
重启调度器Pod让Chart自动管理
kubectl delete pod bitnami-release-airflow-scheduler-774d647447-j6vpd
Kubernetes会自动重建Pod,Chart的初始化脚本会正确启动调度器进程。
3. 确认Airflow的核心配置是否正确
验证Executor类型
确保Airflow用的是CeleryExecutor:
kubectl exec bitnami-release-airflow-web-5897c99754-hq6nr -- cat /opt/bitnami/airflow/airflow.cfg | grep executor
正常应该返回executor = CeleryExecutor。
验证Broker URL
确认Celery的消息队列配置正确:
kubectl exec bitnami-release-airflow-web-5897c99754-hq6nr -- cat /opt/bitnami/airflow/airflow.cfg | grep broker_url
应该看到类似redis://:你的密码@bitnami-release-redis-master-0:6379/0的配置,确保密码和地址都正确。
4. 安装Helm Chart后的正确步骤(划重点)
Bitnami的Airflow Chart已经做了所有初始化工作,你完全不需要手动执行这些操作:
- 不需要手动运行
airflow initdb:Chart的初始化容器已经完成了数据库迁移和用户创建 - 不需要手动启动任何服务:webserver、scheduler、worker都是由Chart自动管理的,Kubernetes会保证它们正常运行
- 部署完成后只需要做:
# 端口转发Web服务到本地 kubectl port-forward svc/airflow-web 8080:8080 # 然后访问http://127.0.0.1:8080登录即可
5. 资源不足的情况(如果上述步骤都没问题)
如果EKS节点的CPU/内存不够,Worker可能无法完成初始化。检查节点资源使用:
kubectl top nodes
如果资源紧张,可以调整Chart的资源请求和限制,比如升级部署:
helm upgrade airflow bitnami/airflow \ --set worker.resources.requests.cpu=100m \ --set worker.resources.requests.memory=256Mi \ --set worker.resources.limits.cpu=500m \ --set worker.resources.limits.memory=512Mi
内容的提问来源于stack exchange,提问作者alt-f4

