本文介绍了使用命令行等待Kubernetes作业在失败/成功时完成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

等待kubernetes作业完成的最佳方法是什么?我注意到有很多建议可以使用:

What is the best way to wait for kubernetes job to be complete? I noticed a lot of suggestions to use:

kubectl wait --for=condition=complete job/myjob

但是我认为只有工作成功了才行.如果失败,我必须做类似的事情:

but i think that only works if the job is successful. if it fails, i have to do something like:

kubectl wait --for=condition=failure job/myjob

是否有一种方法可以使用wait等待两个条件?如果不是,那么等待工作成功或失败的最佳方法是什么?

is there a way to wait for both conditions using wait? if not, what is the best way to wait for a job to either succeed or fail?

推荐答案

kubectl wait --for=condition=<condition name正在等待特定条件,因此afaik当前无法指定多个条件.

kubectl wait --for=condition=<condition name is waiting for a specific condition, so afaik it can not specify multiple conditions at the moment.

我的解决方法是使用oc get --wait,如果目标资源已更新,则关闭--wait命令.我将使用oc get --wait监视作业的status部分,直到更新status. status部分的更新意味着该作业已完成,但具有某些状态条件.

My workaround is using oc get --wait, --wait is closed the command if the target resource is updated. I will monitor status section of the job using oc get --wait until status is updated. Update of status section is meaning the Job is complete with some status conditions.

如果作业成功完成,则status.conditions.type立即更新为Complete.但是,如果作业失败,则无论restartPolicyOnFailure还是Never,作业窗格都将自动重新启动.但是,如果在第一次更新后不将其更新为Complete,我们可以认为该作业为Failed状态.

If the job complete successfully, then status.conditions.type is updated immediately as Complete. But if the job is failed then the job pod will be restarted automatically regardless restartPolicy is OnFailure or Never. But we can deem the job is Failed status if not to updated as Complete after first update.

如下所示查看我的测试证据.

Look the my test evidence as follows.

  • Job Yaml测试成功完成

    # vim job.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      parallelism: 1
      completions: 1
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-wle", "exit 0"]
          restartPolicy: Never

  • 如果成功完成任务,它将显示Complete.
    • It will show you Complete if it complete the job successfully.
    • 
          # oc create -f job.yml &&
            oc get job/pi -o=jsonpath='{.status}' -w &&
            oc get job/pi -o=jsonpath='{.status.conditions[*].type}' | grep -i -E 'failed|complete' || echo "Failed"
      
          job.batch/pi created
          map[startTime:2019-03-09T12:30:16Z active:1]Complete
      

      • 用于测试的作业Yaml完成失败
      • 
            # vim job.yml
            apiVersion: batch/v1
            kind: Job
            metadata:
              name: pi
            spec:
              parallelism: 1
              completions: 1
              template:
                metadata:
                  name: pi
                spec:
                  containers:
                  - name: pi
                    image: perl
                    command: ["perl",  "-wle", "exit 1"]
                  restartPolicy: Never
        

        • 如果第一次作业更新不是Complete,它将显示Failed.在删除现有作业资源后进行测试.
          • It will show you Failed if the first job update is not Complete. Test if after delete the existing job resource.
          • 
                # oc delete job pi
                job.batch "pi" deleted
            
                # oc create -f job.yml &&
                  oc get job/pi -o=jsonpath='{.status}' -w &&
                  oc get job/pi -o=jsonpath='{.status.conditions[*].type}' | grep -i -E 'failed|complete' || echo "Failed"
            
                job.batch/pi created
                map[active:1 startTime:2019-03-09T12:31:05Z]Failed
            

            希望它能对您有所帮助. :)

            I hope it help you. :)

            这篇关于使用命令行等待Kubernetes作业在失败/成功时完成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-07 04:26