Kubernetes 作业和退避限制值:该值是重试次数还是分钟数?



我正在阅读有关作业和重试的 Kubernetes 文档。我发现这个:

在某些情况下,您希望在一定数量后使作业失败 由于配置中的逻辑错误等而重试。为此,请设置 .spec.backoffLimit 用于在考虑之前指定重试次数 a 作业失败。默认情况下,退避限制设置为 6。失败 与作业关联的 Pod 由作业控制器使用 指数退避延迟(10秒、20秒、40秒......(上限为六分钟。 如果在 作业的下一个状态检查。

我对上面的报价有两个问题:

  1. 退避限制值是分钟数还是重试次数?使用值6(六(的文档示例令人困惑,因为他最初确认该值是重试次数,但之后说"上限为6分钟"。
  2. 有没有办法定义退避延迟时间?据我了解,这种行为(10 秒、20 秒、40 秒......(是默认的,无法更改。

没有混淆.spec.backoffLimit是重试次数。

作业控制器以指数级延迟(10 秒、20 秒、40 秒、...、360 秒(重新创建失败的 Pod(与作业关联(。当然,此延迟时间由作业控制器设置。

  • 如果 Pod 失败,10 秒后将创建新的 Pod
  • 如果再次失败,20秒后将创建新的
  • 如果再次失败,40 多岁后新的就会出现
  • 如果再次失败,下一个是在 80 年代(1 分 20 秒(之后
  • 如果再次失败,下一个将在 160 秒(2 分 40 秒(后出现
  • 如果再次失败,在 320 秒(5 分 20 秒(后,新的 Pod 出现
  • 如果再次失败,在 360 秒(不是 640 秒,因为它大于 360 秒或 6 米(后,您将看到下一个

通过查看源代码,似乎backoffLimit属性指定了失败计数而不是失败时间。

上述代码摘录:

func (jm *Controller) syncJob(ctx context.Context, key string) (forget bool, rErr error) {
// ...
succeeded, failed := getStatus(&job, pods, uncounted, expectedRmFinalizers)
// ...
jobHasNewFailure := failed > job.Status.Failed
exceedsBackoffLimit := jobHasNewFailure && (active != *job.Spec.Parallelism) &&
(failed > *job.Spec.BackoffLimit)
// ...
}

最新更新