我如何从编程中确定job
是否已成为永久失败并且不会再重试?我在失败的工作中看到了以下内容:
status:
conditions:
- lastProbeTime: 2018-04-25T22:38:34Z
lastTransitionTime: 2018-04-25T22:38:34Z
message: Job has reach the specified backoff limit
reason: BackoffLimitExceeded
status: "True"
type: Failed
但是,该文档没有解释为什么conditions
是列表。可以有多种条件吗?如果是这样,我依靠哪一个?是否可以保证只有status: "True"
?
JobConditions
与 PodConditions
相似。您可以在官方文档中阅读有关PodConditions
的信息。
无论如何,要确定成功的豆荚,我遵循另一种方式。让我们看一下。
作业规格中有两个字段。
一个是 spec.completion
(默认值1(,它说,
指定成功完成的POD的所需数量 工作应与。
另一个是 spec.backoffLimit
(默认值6(,它说,
在标记此作业失败之前指定重试的数量。
现在在JobStatus
JobStatus也有两个字段。Succeeded
和Failed
。Succeeded
是指成功完成的POD的次数,Failed
表示,到达相位的POD数量失败。
- 一旦
Success
等于或大于spec.completion
,该作业将成为completed
。 - 一旦
Failed
等于或大于spec.backOffLimit
,该作业将成为failed
。
所以,逻辑将在这里,
if job.Status.Succeeded >= *job.Spec.Completion {
return "completed"
} else if job.Status.Failed >= *job.Spec.BackoffLimit {
return "failed"
}
如果是这样,我依靠哪一个?
您可能不必选择,考虑到dd84bba64
工作完成后,控制器将无限期更新其条件 有完整的条件。
此更改使控制器退出 一旦发现该工作已被标记为完整。
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#jobstatus-v1-batch说:
对象当前状态的最新可用观察结果。当一个工作失败,其中一个条件将具有"失败"类型。和状态真的。当工作暂停时,其中一个条件将具有类型"暂停"状态真实;恢复工作时,这种情况会变成错误。完成工作后,其中之一条件将具有"完整"类型。状态真实。更多信息:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/