如何确定作业是否失败

时间:2018-04-27 02:09:33

标签: kubernetes

我如何以编程方式确定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

但是,documentation并未解释为什么conditions是一个列表。可以有多种条件吗?如果是这样,我依赖哪一个?是否保证只有一个status: "True"

2 个答案:

答案 0 :(得分:2)

JobConditionsPodConditions类似。您可以在official docs中了解PodConditions

无论如何,为了确定一个成功的pod,我会采用另一种方式。我们来看看吧。

作业规范中有两个字段。

一个是spec.completion(默认值为1),即

  

指定成功完成的pod的所需数量   工作应该用。

另一个是spec.backoffLimit(默认值为6),即

  

指定标记此作业失败前的重试次数。

现在在JobStatus

JobStatus中也有两个字段。 SucceededFailedSucceeded表示Pod成功完成的次数,Failed表示达到阶段失败的窗格数。

  • 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"
}

答案 1 :(得分:0)

  

如果是这样,我依赖哪一个?

考虑到commit dd84bba64

,您可能不必选择
  

作业完成后,控制器将无限期更新其条件   完整的条件。
  此更改使控制器退出   一旦找到工作被标记为完成,就会进行协调。