等待kubernetes工作完成的最佳方法是什么?我注意到了很多建议:
kubectl wait --for=condition=complete job/myjob
但我认为这只有在工作成功的情况下才有效。如果它失败了,我必须做类似的事情:
kubectl wait --for=condition=failure job/myjob
有没有办法等待这两个条件使用等待?如果没有,等待工作成功或失败的最佳方式是什么?
kubectl wait --for=condition=<condition name
正在等待一个特定的条件,所以afaik目前无法指定多个条件。
我的解决方法是使用oc get --wait
,如果目标资源更新,--wait
将关闭命令。我将使用status
监视oc get --wait
部分工作,直到更新status
。 status
部分的更新意味着Job已完成某些状态条件。
如果作业成功完成,那么status.conditions.type
会立即更新为Complete
。但是如果作业失败,那么无论restartPolicy
是OnFailure
还是Never
,工作窗都会自动重启。但是我们可以认为这个工作是Failed
状态,如果不是在第一次更新后更新为Complete
。
查看我的测试证据如下。
# 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
。# 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
# 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
Failed
,它会告诉你Complete
。在删除现有作业资源后进行测试。# 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
我希望它对你有所帮助。 :)