2

无论出于何种原因,当我删除运行由 CronJob 启动的作业的 pod 时,我立即看到正在创建一个新的 pod。只有当我删除 6 倍于 pod 数量的东西时,才会backoffLimit停止创建新的。

当然,如果我在主动监控进程,我可以删除 CronJob,但是如果我不看的时候,job 里面的 Pod 失败了怎么办?我希望它不要被重新创建。

如何阻止 CronJob 坚持创建新作业(或 pod?),如果当前作业/pod 失败,则等到下一个预定时间?有没有类似于乔布斯的东西backoffLimit,但对于 CronJobs?

4

2 回答 2

2

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

同时设置.spec.concurrencyPolicyForbid和 CronJobs 跳过新作​​业运行,而先前创建的作业仍在运行。

如果 startingDeadlineSeconds 设置为较大的值或未设置(默认值)并且如果concurrencyPolicy设置为Forbid,则作业在失败时将不会运行。

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

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

  • 允许(默认) - cron 作业允许同时运行的作业
  • 禁止- cron 作业不允许并发运行;如果是运行新作业的时间并且之前的作业运行尚未完成,则 cron 作业会跳过新作业运行
  • 替换- 如果是运行新作业的时间并且之前的作业运行尚未完成,则 cron 作业将当前正在运行的作业运行替换为新的作业运行

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

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

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

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

我希望它有所帮助。

于 2019-06-06T13:05:27.237 回答
1

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

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

于 2021-06-25T23:29:11.163 回答