Job 负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
Job Controller 负责根据 Job Spec 创建 Pod,并持续监控 Pod 的状态,直至其成功结束。如果失败,则根据 restartPolicy(只支持 OnFailure 和 Never,不支持 Always)决
定是否创建新的 Pod 再次重试任务。
spec.template
格式和 Pod 是一样的:
Never
或 OnFailure
。.spec.completions
标志 Job 结束需要成功运行的 Pod 个数,默认为 1.spec.parallelism
标志并行运行的 Pod 的个数,默认为 1,可以陪配合 .spec.completions
指定固定结束次数的并行 Job 。spec.activeDeadlineSeconds
标志失败 Pod 的重试最大时间,超过这个时间不会继续重试.spec.backoffLimit
: 指定 Job 失败后进行重试的次数。默认是 6 次,每次失败后重试会有延迟时间,该时间是指数级增长,最长时间是 6min
。已知问题 Issue #54870,
.spec.template.spec.restartPolicy
设置为Onfailure
时,会与.spec.backoffLimit
冲突,可以暂时将restartPolicy
设置为Never
进行规避。
job.yml
:1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
1 | # 创建 Job |
所谓 Bare Pods 是指直接用 PodSpec 来创建的 Pod(即不在 ReplicaSets 或者 ReplicationController 的管理之下的 Pods)。这些 Pod 在 Node 重启后不会自
动重启,但 Job 则会创建新的 Pod 继续任务。所以,推荐使用 Job 来替代 Bare Pods,即便是应用只需要一个 Pod。