下载
中文
注册
使用Volcano和Ascend Operator组件场景下,业务面故障的任务所有Pod的Status全部变为Failed,任务无法触发无条件重试重调度

使用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后会发生无条件重试故障重调度。

  1. 修改开源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:

  2. 修改开源Volcano开源代码vendor/volcano.sh/apis/pkg/apis/bus/v1alpha1/actions.go,增加IgnoreAction。

    IgnoreAction Action = "Ignore"

  3. 修改任务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
    ...

本页内容