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

Posted

技术标签:

【中文标题】kubectl list / 删除所有已完成的作业【英文标题】:kubectl list / delete all completed jobs 【发布时间】:2019-05-01 13:10:45 【问题描述】:

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

我试过了:

kubectl get job --field-selector status.succeeded=1

但我明白了:

enfield selector "status.succeeded=1": field label "status.succeeded" not supported for batchv1.Jobter code here

--fieldSelector在找工作时可能有哪些字段?

有没有更好的方法来做到这一点?

【问题讨论】:

如果您在 pod 上附加了一个通用标签,您可以使用 #kubectl delete job -l app=myjob 【参考方案1】:

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

kubectl get job --all-namespaces | grep "succeeded"

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

kubectl delete job $(kubectl get job -o=jsonpath='.items[?(@.status.succeeded==1)].metadata.name')

【讨论】:

第一个命令不起作用。我们可能有不同的 kubectl 版本。第二个命令工作得很好!谢谢! 第一个命令不像@should_be_working 指出的那样工作。这是因为在默认的kubectl get job 列表中没有将作业状态描述为“成功”的字段。 如果使用 powershell,列出所有成功作业的命令是:kubectl get job --all-namespaces | select-string "succeeded"【参考方案2】:

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

kubectl get jobs $(kubectl get jobs -o=jsonpath='.items[?(@.status.failed>0)].metadata.name')

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

kubectl get jobs $(kubectl get jobs -o=jsonpath='.items[?(@.status.active==1)].metadata.name')

【讨论】:

【参考方案3】:

你快到了,你可以在下面删除已完成的作业

kubectl delete jobs --field-selector status.successful=1 

【讨论】:

太棒了,你有文档说明为什么会这样吗?我只在kubernetes.io/docs/concepts/overview/working-with-objects/… 中发现“支持的字段选择器因 Kubernetes 资源类型而异”,并且鉴于作业在其 yaml 中有status.succeeded: 1,它不是很直观(尽管它有效)。 有点晚了,但我最终设法找到了这些定义的位置kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/…

以上是关于kubectl list / 删除所有已完成的作业的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes:如何从 kubectl 配置中删除集群和上下文?

Kubernetes 作业清理

kubectl (node:7) [MONGODB DRIVER] 警告:当前的服务器发现和监控引擎已被弃用,将在未来版本中删除

从向量中删除已完成的线程

所有任务尝试都已完成,但mapreduce中的作业失败

Spark 作业在显示所有作业已完成然后失败后重新启动(TimeoutException: Futures timed out after [300 seconds])