【问题标题】:How to cleanup failed CronJob spawned Jobs once a more recent job passes一旦最近的作业通过,如何清理失败的 CronJob 生成的作业
【发布时间】:2020-02-16 20:34:26
【问题描述】:

我正在使用 Kubernetes CronJobs 运行管理任务,并让 Prometheus 在使用 kube-state-metrics 生成的作业之一失败时发出警报:

kube_job_status_failed{job="kube-state-metrics"}  > 0

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

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

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

Kubernetes 版本:v1.15.1

【问题讨论】:

    标签: kubernetes prometheus kubernetes-cronjob kube-state-metrics


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      具体来说,JobSpec API 中定义的 ttlSecondsAfterFinished

      这应该可以满足您的要求,即如果发生一堆失败的作业,当一个成功时,应该将它们全部删除。

      【讨论】:

      • 我确实尝试过这个,不幸的是,这似乎并不优先于 failedJobsHistoryLimitsuccessfulJobsHistoryLimit 我需要设置 >0 才能读取作业状态信息 - 我猜是因为 cronjob控制它,而是将清理责任委托给它,但我还没有阅读代码。它还需要一个功能标志
      猜你喜欢
      • 2019-10-21
      • 2020-08-04
      • 2012-12-01
      • 2015-04-11
      • 1970-01-01
      • 2022-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      相关资源
      最近更新 更多