Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes cronjobs‘开始死线秒’的确切含义是什么?_Kubernetes_Kubernetes Cronjob - Fatal编程技术网

Kubernetes cronjobs‘开始死线秒’的确切含义是什么?

Kubernetes cronjobs‘开始死线秒’的确切含义是什么?,kubernetes,kubernetes-cronjob,Kubernetes,Kubernetes Cronjob,在《库伯内特斯》一书中,有这样一句话: 如果CronJob控制器在从CronJob开始时间到开始时间加上startingDeadlineSeconds的一段时间内未运行或中断,或者如果该时间跨度涵盖多个开始时间且并发策略不允许并发,则作业可能无法运行 我从中了解到的是,如果startingDeadlineSeconds设置为10,并且cronjob由于某种原因无法在其预定时间启动,那么只要10秒还没有过去,它仍然可以尝试重新启动,但是,在10秒之后,它肯定不会启动,对吗 另外,如果我将concu

在《库伯内特斯》一书中,有这样一句话:

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

我从中了解到的是,如果
startingDeadlineSeconds
设置为
10
,并且cronjob由于某种原因无法在其预定时间启动,那么只要
10
秒还没有过去,它仍然可以尝试重新启动,但是,在
10
秒之后,它肯定不会启动,对吗


另外,如果我将
concurrencyPolicy
设置为
bank
,那么当有一个cronjob正在运行时,如果cronjob尝试调度,K8s是否会将其视为失败?

在调查了的代码库后,cronjob控制器就是这样工作的:

  • CronJob控制器在给定的Kubernetes客户机中创建CronJob列表
  • 对于每个CronJob,它都会检查从
    lastScheduleTime
    到现在为止,它在持续时间内错过了多少个计划。如果超过,则不会启动作业并记录事件:

    “FailedNeedsStart”,“无法确定是否需要启动作业。错过的启动时间太多(>100)。设置或减少。spec.startingDeadlineSeconds或检查时钟偏移。”

  • 重要的是要注意,如果设置了字段
    startingDeadlineSeconds
    (而不是
    nil
    ),它将计算从
    startingDeadlineSeconds
    的值到现在为止发生了多少遗漏的作业。例如,如果
    startingDeadlineSeconds
    =
    200
    ,它将计算在最近的
    200
    秒内发生的错过的作业数。计算可以找到多少遗漏计划的准确实现

  • 如果上一步错过的计划不超过100个,CronJob控制器将检查时间
    现在
    是否在其
    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),那么这意味着没有截止日期…”