断点续训任务被重调度后Pod状态不一致
2025/01/26
169
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
官方 | 集群调度 | 断点续训 | 重调度、Pod状态 |
问题现象描述
在多节点集群环境中下发分布式训练任务,若此时环境资源刚好满足,开启任务重调度且重调度参数“fault-scheduling”为“grace”。此时,如果出现故障将触发重调度,但是任务重调度后会概率性出现一个Pod状态为Running和一个Pod状态为Pending的情况。后续故障恢复后,状态为Pending的Pod依然为Pending。
原因分析
- 该问题是开源代码中对任务数量的判断存在问题。
- 当Pod被终止时,若容器中的脚本没有返回非0的值时(即返回0值时),则Pod的状态会显示为Success(K8s机制)。此时该Pod正在释放资源,Volcano调度器会将该Pod(未重启)算作是已经重启且状态为Success。这种情况下,刚好满足Volcano的gang调度插件的机制,先重启的Pod会进入创建阶段。当正在终止的Pod结束并重新拉起时,则会由于资源不足进入Pending状态。
- 未使用断点续训的脚本。
- 集群资源不够。
解决措施
- 执行以下命令,手动删除已运行的Pod。
kubectl delete pod -n pod所在的namespace pod名称
- 删除该任务,再重新下发任务。