我正在寻找一种方法来告诉(从脚本中)Kubernetes Job完成的时间。我想从容器中取出日志并执行清理。
这样做的好方法是什么?最好的方法是运行kubectl describe job <job_name>
和grep for 1 Succeeded
或类似的东西吗?
答案 0 :(得分:50)
从1.11版开始,您可以执行以下操作:
kubectl wait --for=condition=complete job/myjob
,您还可以设置超时时间:
kubectl wait --for=condition=complete --timeout=30s job/myjob
答案 1 :(得分:21)
您可以使用此命令直观地查看作业的状态:
kubectl get jobs myjob -w
-w
选项会监视更改。您正在寻找显示SUCCESSFUL
的{{1}}列。
要在shell脚本中等待,我将使用此命令:
1
答案 2 :(得分:2)
您可以使用官方Python kubernetes-client
。
https://github.com/kubernetes-client/python
创建新的Python virtualenv:
virtualenv -p python3 kubernetes_venv
用
source kubernetes_venv/bin/activate
并使用以下命令安装kubernetes客户端:
pip install kubernetes
创建新的Python脚本并运行:
from kubernetes import client, config
config.load_kube_config()
v1 = client.BatchV1Api()
ret = v1.list_namespaced_job(namespace='<YOUR-JOB-NAMESPACE>', watch=False)
for i in ret.items:
print(i.status.succeeded)
请记住要在kubeconfig
中设置特定的~/.kube/config
和作业名称空间的有效值-> '<YOUR-JOB-NAMESPACE>'
答案 3 :(得分:0)
我会使用-w
或--watch
:
$ kubectl get jobs.batch --watch
NAME COMPLETIONS DURATION AGE
python 0/1 3m4s 3m4s
答案 4 :(得分:0)
使用 kubectl
kubectl get job test-job -o jsonpath='{.status.succeeded}'
或
kubectl get job test-job -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}'