繁体   English   中英

Kubernetes cronjobs`startingDeadlineSeconds'究竟意味着什么?

[英]What does Kubernetes cronjobs `startingDeadlineSeconds` exactly mean?

在Kubernetes cronjobs中 ,在限制部分中说明了这一点

如果CronJob控制器在从CronJob的开始时间到开始时间加上startingDeadlineSeconds之前的一段时间内没有运行或中断,或者如果跨度涵盖多个开始时间并且concurrencyPolicy不允许并发,则作业可能无法运行。

我从中理解的是,如果startingDeadlineSeconds设置为10并且cronjob在其预定时间由于某种原因无法启动,那么只要10秒没有通过,它仍然可以尝试再次启动,但是, 10秒后,肯定不会启动,这是正确的吗?

另外,如果我有concurrencyPolicy设定为Forbid ,不K8S把它作为一种失败,如果一个cronjob试图安排,当有一个已经运行?

在调查了Kubernetes repo的代码库之后,这就是CronJob控制器的工作原理:

  1. CronJob控制器将每隔10秒检查给定Kubernetes客户端中的cronjobs列表。
  2. 对于每个CronJob,它会检查从lastScheduleTime到现在持续时间内错过的计划数。 如果错过的计划超过100个 ,则它不会启动作业并记录事件:

    "FailedNeedsStart", "Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew."

重要的是要注意,如果设置字段startingDeadlineSeconds (不是nil ),它将计算从startingDeadlineSeconds的值到现在发生的错过的作业数。 例如,如果startingDeadlineSeconds = 200 ,它将计算最近200秒内发生的错过的作业数。 可以在此处找到计算错过的时间表的确切实施。

  1. 如果上一步没有超过100个错过的时间表,CronJob控制器将检查now的时间是否不是它的scheduledTime + startingDeadlineSeconds的时间之后,即启动工作还不算太晚(通过截止日期) )。 如果还不晚,CronJob控制器将继续尝试启动该作业。 但是,如果已经太晚了,那么它就不会启动工作并记录事件:

    "Missed starting window for {cronjob name}. Missed scheduled time to start a job {scheduledTime}"

同样重要的是要注意,如果设置字段startingDeadlineSeconds (不是nil ),则意味着所有设置都没有截止日期,这意味着CronJob控制器将尝试启动任何作业,而不检查它是否稍后。

因此,回答上述问题:

1.如果startingDeadlineSeconds设置为10并且cronjob在其预定时间由于某种原因无法启动,那么只要10秒没有通过,它仍然可以尝试再次启动,但是在10秒之后,它肯定不会启动,这是正确的吗?

CronJob控制器将尝试启动该作业,并且如果在其计划时间之后的10秒尚未过去,则它将成功安排。 但是,如果截止日期已过,则此次运行将不会启动,并且在以后的执行中将被视为错过的时间表。

2.如果我将concurrencyPolicy设置为Forbid,如果cronjob尝试安排,当有一个已经运行时,K8会将其视为失败吗?

是的,它将被视为错过的时间表。 由于错过的时间表是按照我在上面第2点中所述计算的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM