使用Volcano和Ascend Operator组件场景下,业务面故障的任务所有Pod的Status全部变为Failed,任务无法触发无条件重试重调度
2025/01/26
31
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
官方 | 集群调度 | 断点续训 | 业务面故障、Pod状态为Failed、无条件重试重调度 |
问题现象描述
使用Volcano和Ascend Operator组件场景下,业务面故障的任务所有Pod的Status全部转变为Failed,任务无法发生无条件重试重调度。
原因分析
当前Volcano在业务面故障的任务所有Pod的Status全部转变为Failed时,会将任务设置为失败状态,默认不会拉起无条件重试重调度。
解决措施
用户可自行修改Volcano源码和任务yaml,在所有Pod的Status全部转变为Failed后会发生无条件重试故障重调度。
- 修改开源Volcano开源代码pkg/controllers/job/state/running.go,增加IgnoreAction。
func (ps *runningState) Execute(action v1alpha1.Action) error { switch action { case v1alpha1.RestartJobAction: return KillJob(ps.job, PodRetainPhaseNone, func(status *vcbatch.JobStatus) bool{ status.State.Phase = vcbatch.Restarting status.RetryCount+﹢ return true }) case v1alpha1.AbortJobAction: return KillJob(ps.job, PodRetainPhasesoft, func(status *vcbatch.Jobstatus) bool { status.State.Phase = vcbatch.Aborting return true }) case v1alpha1.TerminateJobAction: return KillJob(ps.job, PodRetainPhasesoft, func(status *vcbatch.Jobstatus) bool { status.State.Phase = vcbatch.Terminating return true }) case v1alpha1.CompleteJobAction: return Kil1Job(ps.job, PodRetainPhaseSoft, func(status *vcbatch.JobStatus) bool { status.State.Phase =vcbatch.Completing return true }) case v1alpha1.IgnoreAction: //增加case v1alpha1.IgnoreAction代码 return nil default:
- 修改开源Volcano开源代码vendor/volcano.sh/apis/pkg/apis/bus/v1alpha1/actions.go,增加IgnoreAction。
IgnoreAction Action = "Ignore"
- 修改任务yaml中spec字段。以a800_vcjob.yaml为例,修改示例如下。
apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: mindx-dls-test labels: ring-controller.atlas: ascend-910 fault-scheduling: "force" ... spec: minAvailable: 1 schedulerName: volcano policies: - event: PodFailed #增加event设置忽略PodFailed action: Ignore #增加action设置忽略PodFailed ...
本页内容