Kubernetes cronjobs‘开始死线秒’的确切含义是什么?
在《库伯内特斯》一书中,有这样一句话: 如果CronJob控制器在从CronJob开始时间到开始时间加上startingDeadlineSeconds的一段时间内未运行或中断,或者如果该时间跨度涵盖多个开始时间且并发策略不允许并发,则作业可能无法运行 我从中了解到的是,如果Kubernetes cronjobs‘开始死线秒’的确切含义是什么?,kubernetes,kubernetes-cronjob,Kubernetes,Kubernetes Cronjob,在《库伯内特斯》一书中,有这样一句话: 如果CronJob控制器在从CronJob开始时间到开始时间加上startingDeadlineSeconds的一段时间内未运行或中断,或者如果该时间跨度涵盖多个开始时间且并发策略不允许并发,则作业可能无法运行 我从中了解到的是,如果startingDeadlineSeconds设置为10,并且cronjob由于某种原因无法在其预定时间启动,那么只要10秒还没有过去,它仍然可以尝试重新启动,但是,在10秒之后,它肯定不会启动,对吗 另外,如果我将concu
startingDeadlineSeconds
设置为10
,并且cronjob由于某种原因无法在其预定时间启动,那么只要10
秒还没有过去,它仍然可以尝试重新启动,但是,在10
秒之后,它肯定不会启动,对吗
另外,如果我将
concurrencyPolicy
设置为bank
,那么当有一个cronjob正在运行时,如果cronjob尝试调度,K8s是否会将其视为失败?在调查了的代码库后,cronjob控制器就是这样工作的:
lastScheduleTime
到现在为止,它在持续时间内错过了多少个计划。如果超过,则不会启动作业并记录事件:
“FailedNeedsStart”,“无法确定是否需要启动作业。错过的启动时间太多(>100)。设置或减少。spec.startingDeadlineSeconds或检查时钟偏移。”
startingDeadlineSeconds
(而不是nil
),它将计算从startingDeadlineSeconds
的值到现在为止发生了多少遗漏的作业。例如,如果startingDeadlineSeconds
=200
,它将计算在最近的200
秒内发生的错过的作业数。计算可以找到多少遗漏计划的准确实现
现在
是否在其scheduledTime+startingDeadlineSeconds
的时间之后,即开始作业是否为时不晚(超过了最后期限)。如果还不太晚,CronJob控制器将继续尝试启动作业。但是,如果已经太晚,则不会启动作业并记录事件:
“错过了{cronjob name}的启动窗口。错过了启动作业的计划时间{scheduledTime}”
startingDeadlineSeconds
(非nil
),则表示根本没有设置截止日期,这意味着CronJob控制器将尝试启动任何作业,而不检查其是否更晚
因此,要回答上述问题:
1。如果startingDeadlineSeconds设置为10,并且cronjob由于某种原因无法在其预定时间启动,则只要这10秒没有过去,就仍然可以尝试再次启动,但是,在这10秒之后,它肯定不会启动,对吗?
CronJob控制器将尝试启动作业,如果计划时间后的10秒尚未过去,则将成功计划该作业。但是,如果截止日期已过,则本次运行将不会开始,并将在以后的执行中被视为错过的计划
2。如果我将concurrencyPolicy设置为“禁止”,那么当有一个cronjob正在运行时,如果试图调度cronjob,K8s是否将其视为失败?
是的,它将被视为错过的时间表。因为错过的时间表是按照我在上文第2点中所述的方式计算的。Hesham。我有一个工作,它错过了它的时间表超过100次,我已经设置了并发策略禁止,并没有设置启动死线秒。我如何通过“太多错过的开始时间(>100)”错误来防止它,因为根据作业占用的数据大小,它会占用更少或更多的时间。假设一个作业计划在上午5点每分钟运行一次,并发策略设置为禁止。如果第一个作业(早上5点一个)在早上7点完成它的作业,我们在2小时内错过了119个计划,即>100,cronjob将抛出错误。如果我将startingDeadlineSeconds添加到200秒,它会检查在过去200秒或(2小时+200秒)内发生了多少错过的计划吗@k_vishwanath将startingDeadlineSeconds设置为200,将统计过去200秒内发生的错过的计划->在您的情况下,由于计划每1分钟运行一次,因此仅3个错过的计划。这意味着控制器将再次开始调度它。如你所愿。这个设计非常令人困惑,那么你怎么会想出这个愚蠢的设计呢?只是检查一下,当你说“…已设置(不是零),那么它意味着没有截止日期…”时,这是向后的吗?基于答案前面的重复文本,以及您描述的行为,似乎应该是“…未设置(nil),那么这意味着没有截止日期…”