如何阻止CronJob重新创建失败的作业?

时间:2019-06-05 14:06:00

标签: kubernetes kubernetes-cronjob

无论出于什么原因,当我删除运行由CronJob启动的Job的吊舱时,我立即看到正在创建一个新的吊舱。只有删除了backoffLimit个Pod数量的六倍之类的东西之后,新的Pod才会停止创建。

当然,如果我正在积极地监视该过程,则可以删除CronJob,但是如果我不看时工作中的Pod失败了怎么办?我希望不要重新创建它。

如何阻止CronJob继续创建新作业(或吊舱?),如果当前作业/吊舱失败,要等到下一个预定时间吗?除了CronJobs之外,还有与乔布斯的backoffLimit类似的东西吗?

2 个答案:

答案 0 :(得分:1)

startingDeadlineSeconds 设置为较大的值或未设置(默认值)。

同时将 .spec.concurrencyPolicy 设置为 Forbid ,当先前创建的作业仍在运行时,CronJobs将跳过新作业。

如果 startingDeadlineSeconds 设置为较大值或未设置(默认设置),并且 concurrencyPolicy 设置为 { {1}} ,如果失败,该作业将不会运行。

您可以将并发策略字段添加到规范中以定义CronJob(.spec.concurrencyPolicy),但这是可选的。

它指定如何处理由该CronJob创建的作业的并发执行。规范可能仅指定以下三种并发策略之一:

  • 允许(默认)-Cron作业允许同时运行的作业
  • 禁止-Cron作业不允许并行运行;如果是时候开始新的任务并且之前的任务还没有完成,则cron任务会跳过新的任务
  • 替换-如果是时候开始新的作业了,而之前的作业还没有完成,则cron作业将当前正在运行的作业替换为新的作业

很高兴知道货币政策仅适用于同一CronJob创建的工作。 如果有多个CronJob,则始终允许它们各自的作业同时运行。

如果未能在计划的时间创建CronJob,则将其计为未命中。例如,如果 Forbid 设置为 concurrencyPolicy ,并且在仍在运行先前的调度时尝试调度CronJob,则它将将被视为错过。

对于每个CronJob,CronJob控制器都会检查从最后一个计划时间到现在的持续时间内错过了多少个计划。如果错过了100个以上的日程表,则它不会启动作业并记录错误

您可以在此处找到更多信息:CronJobsAutomatedTask

希望对您有帮助。

答案 1 :(得分:1)

在您的情况下,CronJob 通过具有默认值 (6) 的“backoffLimit”创建作业,默认情况下重启策略是 (Always)

最好使 backoffLimit > (0) 并重新启动策略 = (Never) 并将startingDeadlineSeconds 增加到低于或等于您的间隔,或者您可以根据您的要求对其进行自定义以控制每个 CronJob 运行的运行时间 此外,您可以停止“concurrencyPolicy”>>(禁止)