Kubernetes - 告诉工作完成时

rus*_*sst 39 kubernetes kubectl kubernetes-jobs

我正在寻找一种方法来告诉(从脚本中)Kubernetes Job完成的时间.我想从容器中取出日志并执行清理.

这样做有什么好办法?最好的方法是运行kubectl describe job <job_name>和grep 1 Succeeded或类似的东西?

aba*_*haw 70

你现在可以这样做:

kubectl wait --for=condition=complete job/myjob
Run Code Online (Sandbox Code Playgroud)

你也可以设置超时:

kubectl wait --for=condition=complete --timeout=30s job/myjob
Run Code Online (Sandbox Code Playgroud)

  • 只关注工作日志有什么问题吗?如果只有一个 pod,执行“kubectl logs job/myjob --follow”将有效地等待作业完成,无论其是否成功(“condition=complete”在作业失败时会触发) (5认同)
  • @JoãoMatos 默认`--timeout` 是 30 秒。为 `--timeout` 指定负值意味着“等待一周”(实际上,这几乎是无限期的)。看一下 [kubectl wait](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#wait) 参考。 (4认同)
  • 是否可以无限期超时(永远等待)? (2认同)

Eri*_*une 22

您可以使用此命令直观地查看作业的状态:

kubectl get jobs myjob -w
Run Code Online (Sandbox Code Playgroud)

-w选项监视更改.您正在寻找SUCCESSFUL要显示的列1.

要在shell脚本中等待,我将使用此命令:

until kubectl get jobs myjob -o jsonpath='{.status.conditions[? 
    (@.type=="Complete")].status}' | grep True ; do sleep 1 ; done
Run Code Online (Sandbox Code Playgroud)

  • shell脚本回答此问题将永远等待“失败”的作业,因为失败的作业将不返回任何内容 (2认同)

小智 6

您可以使用官方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)
Run Code Online (Sandbox Code Playgroud)

请记住为您的作业命名空间设置您的特定kubeconfigin~/.kube/config和有效值 ->'<YOUR-JOB-NAMESPACE>'