当 Job 完成后:

    • 将不会创建新的 Pod
    • 已经创建的 Pod 也不会被清理掉。此时,您仍然可以继续查看已结束 Pod 的日志,以检查 errors/warnings 或者其他诊断用的日志输出
    • Job 对象也仍然保留着,以便您可以查看该 Job 的状态
    • 由用户决定是否删除已完成的 Job 及其 Pod

    Job 通常会顺利的执行下去,但是在如下情况可能会非正常终止:

    • 某一个 Pod 执行失败(且 restartPolicy=Never)
    • 或者某个容器执行出错(且 restartPolicy=OnFailure)
      • 此时,Job 按照 处理Pod和容器的失败 中 .spec.bakcoffLimit 描述的方式进行处理
      • 一旦重试次数达到了 .spec.backoffLimit 中的值,Job 将被标记为失败,且尤其创建的所有 Pod 将被终止
    • Job 中设置了 .spec.activeDeadlineSeconds。该字段限定了 Job 对象在集群中的存活时长,一旦达到 .spec.activeDeadlineSeconds 指定的时长,该 Job 创建的所有的 Pod 都将被终止,Job 的 Status 将变为 type:Failed 、 reason: DeadlineExceeded

    TIP Job 中 .spec.activeDeadlineSeconds 字段的优先级高于 .spec.backoffLimit。因此,正在重试失败 Pod 的 Job,在达到 .spec.activeDeadlineSecondes 时,将立刻停止重试,即使 .spec.backoffLimit 还未达到。

    例如:

    1. apiVersion: batch/v1
    2. kind: Job
    3. metadata:
    4. name: pi-with-timeout
    5. spec:
    6. backoffLimit: 5
    7. activeDeadlineSeconds: 100
    8. template:
    9. spec:
    10. containers:
    11. - name: pi
    12. image: perl
    13. command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
    14. restartPolicy: Never

    注意 Job 中有两个 activeDeadlineSeconds: .spec.activeDeadlineSeconds 和 .spec.template.spec.activeDeadlineSeconds(参考 Pod)。请不要混淆了