kubectl list / 删除所有已完成的作业

sho*_*ing 16 kubernetes google-kubernetes-engine kubectl kubernetes-pod kubernetes-jobs

我正在寻找kubectl命令来列出/删除所有已完成的作业

我试过:

kubectl get job --field-selector status.succeeded=1
Run Code Online (Sandbox Code Playgroud)

但我得到:

enfield selector "status.succeeded=1": field label "status.succeeded" not supported for batchv1.Jobter code here
Run Code Online (Sandbox Code Playgroud)

工作时--fieldSelector的可能字段是什么?

有一个更好的方法吗 ?

pca*_*ana 17

要列出所有成功的作业,您可以先获取所有作业,然后过滤输出:

kubectl get job --all-namespaces | grep "succeeded"
Run Code Online (Sandbox Code Playgroud)

如果要删除所有成功的作业,可以使用以下命令:

kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
Run Code Online (Sandbox Code Playgroud)

  • 第一个命令不起作用,正如 @should_be_working 指出的那样。这是因为在默认的“kubectl get job”列表中没有将作业状态描述为“成功”的字段。 (2认同)

Rue*_*oel 14

您快到了,您可以执行以下操作来删除已完成的作业

kubectl delete jobs --field-selector status.successful=1 
Run Code Online (Sandbox Code Playgroud)

  • 太好了,你有文档说明为什么这样做吗?我只在 https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/ 中找到“支持的字段选择器因 Kubernetes 资源类型而异”,并且考虑到作业具有 `status.succeeded: 1`在他们的 yaml 中它不是很直观(尽管它有效)。 (3认同)

jwa*_*ack 5

FWIW,以下返回所有失败的作业:

kubectl get jobs $(kubectl get jobs -o=jsonpath='{.items[?(@.status.failed>0)].metadata.name}')
Run Code Online (Sandbox Code Playgroud)

以及所有仍在运行的作业:

kubectl get jobs $(kubectl get jobs -o=jsonpath='{.items[?(@.status.active==1)].metadata.name}')
Run Code Online (Sandbox Code Playgroud)