Job负责批量处理
短暂的一次性任务 (short lived one-off tasks)
,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
Kubernetes支持以下几种Job:
-
非并行Job:通常创建一个Pod直至其成功结束
Job类型
|
使用示例
|
行为
|
completions
|
Parallelism
|
一次性Job
|
数据库迁移
|
创建一个Pod直至其成功结束
|
1
|
1
|
固定
结束次数
的Job
|
处理工作队列的Pod
|
依次创建一个Pod运行直至completions个成功结束
|
2+
|
1
|
固定结束次数的并行Job
|
多个Pod同时处理工作队列
|
依次创建多个Pod运行直至completions个成功结束
|
2+
|
2+
|
并行Job
|
多个Pod同时处理工作队列
|
创建一个或多个Pod直至有一个成功结束
|
1
|
2+
|
Job Controller
Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。

Job Spec格式
-
spec.template格式同 Pod
-
RestartPolicy仅支持Never或OnFailure
-
单个Pod时,默认Pod成功运行后Job即结束
-
.spec.parallelism标志并行运行的Pod的个数,默认为1
-
spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试
一个简单的例子:
apiVersion
:
batch
/
v1
kind
:
Job
metadata
:
name
:
pi
spec
:
template
:
metadata
:
name
:
pi
spec
:
containers
:
-
name
:
pi
image
:
perl
command
:
[
"perl"
,
"-Mbignum=bpi"
,
"-wle"
,
"print bpi(2000)"
]
restartPolicy
:
Never
$ kubectl create
-
f
./
job
.
yaml
job
"pi"
created
$ pods
=
$
(
kubectl
get
pods
--
selector
=
job
-
name
=
pi
--
output
=
jsonpath
={.
items
..
metadata
.
name
})
$ kubectl logs $pods
3.141592653589793238462643383279502
...
固定结束次数的Job示例
apiVersion
:
batch
/
v1
kind
:
Job
metadata
:
name
:
busybox
spec
:
completions
:
3
template
:
metadata
:
name
:
busybox
spec
:
containers
:
-
name
:
busybox
image
:
busybox
command
:
[
"echo"
,
"hello"
]
restartPolicy
:
Never
Bare Pods
所谓Bare Pods是指直接用
PodSpec来创建的Pod
(
即不在ReplicaSets或者ReplicationCtroller的管理之下的Pods
)。这些Pod在Node重启后不会自动重启,但Job则会创建新的Pod继续任务。所以,推荐使用Job来替代Bare Pods,即便是应用只需要一个Pod。