我正在使用Kubernetes CronJobs运行管理任务,并使用kube-state-metrics使Prometheus在生成的作业之一失败时发出警报:
kube_job_status_failed{job="kube-state-metrics"} > 0
我想拥有它,以便在有较新的作业通过时清除失败的作业,以使警报停止触发。
CronJob资源是否独自支持此行为?
解决方法是使作业清理失败作为最后一步,或者创建更复杂的警报规则以将最新的作业作为确定状态,但这不是IMO最好的解决方案。
Kubernetes版本:v1.15.1
答案 0 :(得分:0)
作为解决方法,以下查询将向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
答案 1 :(得分:0)
在清理工作方面有很棒的Kubernetes guide。
具体来说,是JobSpec API中定义的ttlSecondsAfterFinished
。
这应该满足您的要求,即如果发生一堆失败的作业,那么当一个作业成功时,应将它们全部清除的时间。