如何使用gke中的cron作业删除kubernetes集群中失败的作业?.当我尝试使用以下YAML删除失败的作业时,它已经删除了所有作业(包括正在运行的)
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: XXX
namespace: XXX
spec:
schedule: "*/30 * * * *"
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
serviceAccountName: XXX
containers:
- name: kubectl-runner
image: bitnami/kubectl:latest
command: ["sh", "-c", "kubectl delete jobs $(kubectl get jobs | awk '$2 ~ 1/1' | awk '{print $1}')"]
restartPolicy: OnFailure
3条答案
按热度按时间ddrv8njm1#
要删除
GKE
中失败的**Jobs
**,您需要使用以下命令:$ kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.failed==1)].metadata.name}')
此命令将为所有作业输出
JSON
,并搜索status.failed
字段设置为1
的作业。然后,它会将失败的作业传递给$ kubectl delete jobs
如果没有状态为的作业,则在
CronJob
中运行的此命令将失败:failed
.作为一种解决方法,您可以用途:
添加
exit 0
是为了确保Pod
离开时的状态代码为0至于在问题下提出的部分意见:
如果支持**“失败”**作业,则需要对其进行修改
我已经尝试了以下方法,但无法删除作业。
kubectl delete job $(kubectl get job -o=jsonpath='{.items[?(@.status.Failed==1)].metadata.name}')
@.status.Failed==1
〈--不正确,因为JSON
是case sensitive@.status.failed==1
〈--正确如果您要在以下Pod上运行此命令的错误版本(以显示它们失败且未运行完成):
您应该得到以下错误:
当没有作业传递到
$ kubectl delete job
时,也会显示上述错误。运行此命令的正确版本应删除所有失败的作业:
我鼓励您查看其他资源:
y4ekin9u2#
@Dawid Kruk的答案是优秀的,但工作在一个特定的命名空间,而不是所有的命名空间,因为我需要.为了解决这个问题,我已经创建了一个简单的bash脚本,获得所有失败的作业,并删除它们-
mkshixfv3#
这一个看起来更好,因为我: