问题描述
等待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
.但是,如果作业失败,则无论restartPolicy
是OnFailure
还是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 notComplete
. 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作业在失败/成功时完成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!