一旦最近的工作通过,如何清理失败的 CronJob 产生的工作

How to cleanup failed CronJob spawned Jobs once a more recent job passes

我正在 运行 使用 Kubernetes CronJobs 管理任务,并让 Prometheus 在其中一个生成的作业失败时使用 kube-state-metrics:

发出警报
kube_job_status_failed{job="kube-state-metrics"}  > 0

我想要它,以便在最近的作业通过时清除失败的作业,以便警报停止触发。

CronJob 资源本身是否支持此行为?

解决方法是让作业在最后一步清理失败的作业,或者创建一个更复杂的警报规则以将最近的作业作为最终状态,但它们不是 IMO 最好的解决方案。

Kubernetes 版本:v1.15.1

作为解决方法,以下查询将显示 CronJobs,其中最后完成的作业失败

(max by(owner_name, namespace) (kube_job_status_start_time * on(job_name) group_left(owner_name) ((kube_job_status_succeeded / kube_job_status_succeeded == 1) + on(job_name) group_left(owner_name) (0 * kube_job_owner{owner_is_controller="true",owner_kind="CronJob"}))))
< bool
(max by(owner_name, namespace) (kube_job_status_start_time * on(job_name) group_left(owner_name) ((kube_job_status_failed / kube_job_status_failed == 1) + on(job_name) group_left(owner_name) (0 * kube_job_owner{owner_is_controller="true",owner_kind="CronJob"})))) == 1

有一个很棒的 Kubernetes guide 清理作业。

具体来说,ttlSecondsAfterFinished定义在JobSpec API.

这应该可以满足您的要求,I.E.如果出现一堆失败的作业,当一个成功时,应该将它们之前的时间全部删除。