Airflow Helm部署后任务卡滞及后续操作咨询
解决Airflow CeleryExecutor在EKS部署后调度器超时&任务卡滞问题
先看你的Pod状态,bitnami-release-airflow-worker-0是0/1 Running——这个worker容器没就绪,这大概率是导致任务卡滞、调度器心跳异常的核心原因,结合调度器日志里的Process timed out错误,咱们一步步排查:
1. 优先排查Worker Pod未就绪的问题
Worker是Celery模式下执行任务的核心,它连不上消息队列(Redis)或者数据库的话就没法正常启动:
- 查看Worker日志:
重点找Redis/PostgreSQL连接失败的报错,比如kubectl logs bitnami-release-airflow-worker-0Could not connect to Redis或者数据库认证失败的信息。 - 验证Redis服务可用性:
先确认Redis节点正常运行:
正常应该返回kubectl exec bitnami-release-redis-master-0 -- redis-cli pingPONG。如果失败,检查你设置的$REDIS_PASSWORD是否正确,再进入Worker Pod验证环境变量:
确保kubectl exec bitnami-release-airflow-worker-0 -- env | grep REDISREDIS_PASSWORD和你安装时设置的一致。
2. 处理调度器的超时问题
调度器日志里的Process timed out通常和资源不足或数据库连接异常有关:
- 检查PostgreSQL连接:
进入调度器Pod测试数据库连接:
输入你设置的kubectl exec bitnami-release-airflow-scheduler-774d647447-j6vpd -- psql -h bitnami-release-postgresql -U airflow -d airflow$POSTGRESQL_PASSWORD,如果能成功进入psql交互环境,说明数据库连接正常;如果失败,检查密码是否匹配或者PostgreSQL服务是否正常。 - 调整Pod资源配置:
默认Helm Chart给的资源请求可能偏低,导致进程超时。查看当前调度器Pod的资源限制:
如果资源不足,重新部署时增加资源配置,比如:kubectl describe pod bitnami-release-airflow-scheduler-774d647447-j6vpd | grep Resourceshelm upgrade airflow bitnami/airflow \ --set scheduler.resources.requests.cpu=1000m \ --set scheduler.resources.requests.memory=2Gi \ --set worker.resources.requests.cpu=1000m \ --set worker.resources.requests.memory=2Gi \ # 保留你之前的其他配置项 --set auth.username=$AIRFLOW_USER \ --set auth.password=$AIRFLOW_PASSWORD \ --set auth.fernetKey=$AIRFLOW_FERNETKEY \ --set postgresql.postgresqlPassword=$POSTGRESQL_PASSWORD \ --set redis.password=$REDIS_PASSWORD
3. 纠正Helm部署后的错误操作
Bitnami的Airflow Helm Chart已经帮你做了所有初始化工作,不需要手动执行以下操作:
- 不需要在WebServer Pod里执行
airflow initdb:新版本Airflow用airflow db init替代了airflow initdb,而且Chart部署时已经自动完成了数据库初始化、用户创建等步骤,手动执行反而可能导致冲突。 - 不需要手动启动调度器:Chart会通过Deployment自动管理调度器的生命周期,手动启动会和容器内的主进程冲突,导致异常。
4. 验证CeleryExecutor的核心配置
确保Celery模式的关键配置正确:
- 确认Executor类型:Bitnami Chart默认是
CeleryExecutor,如果不确定,进入WebServer Pod查看:
如果不是kubectl exec bitnami-release-airflow-web-5897c99754-hq6nr -- airflow config get-value core executorCeleryExecutor,重新部署时加上--set airflow.executor=CeleryExecutor。 - 验证Fernet Key一致性:所有Airflow组件(web、scheduler、worker)必须使用同一个Fernet Key加密连接信息,进入各个Pod检查:
确保和你安装时设置的kubectl exec <pod-name> -- env | grep FERNET_KEY$AIRFLOW_FERNETKEY一致。
5. 测试任务执行
当Worker Pod变成1/1 Running后,做简单验证:
- 进入Worker Pod检查Celery worker状态:
正常会返回worker在线的信息。kubectl exec bitnami-release-airflow-worker-0 -- airflow celery inspect ping - 在Airflow UI重新触发
example_bash_operator,观察任务是否能从running状态变为success。
内容的提问来源于stack exchange,提问作者alt-f4
相关产品推荐
相关产品推荐

