ReplicaSet,Deployment和DaemonSet这些控制器都是负责始终运行在后台接受客户端请求并响应的服务进程,而有些进程如备份任务、一次性的计算批处理任务,通常需要使用Job控制器来负责管理。

Job的执行流程

Job可以分为单队列多次执行和多队列并行执行。Job中的Pod运行完毕后会complated,其不会被重新启动起来。

Job资源定义规范

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: batch/v1  # API群组及版本
kind: Job # 资源类型特有标识
metadata:
name <string> # 资源名称,在作用域中要唯一
namespace <string> # 名称空间;Job资源隶属名称空间级别
spec:
selector <object> # 标签选择器,必须匹配template字段中Pod模板中的标签
template <object> # Pod模板对象
completions <integer> # 期望的成功完成的作业次数,成功运行结束的Pod数量
ttlSecondsAfterFinished <integer> # 终止状态作业的生存时长,超期将被删除
parallelism <integer> # 作业的最大并行度,默认为1
backoffLimit <integer> # 将作业标记为Failed之前的重试次数,默认为6
activeDeadlineSeconds <integer> # 作业启动后可处于活动状态的时长

Job单队列示例

1.编写资源清单文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@k8s-master01:~/yaml/chapter08# vim job-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template:
spec:
containers:
- name: myjob
image: alpine:3.11
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","sleep 60"]
restartPolicy: Never
completions: 2 # 任务运行两次
ttlSecondsAfterFinished: 3600 # 任务完成后3600将pod删除
backoffLimit: 3
activeDeadlineSeconds: 300

2.应用配置清单

1
2
root@k8s-master01:~/yaml/chapter08# kubectl apply -f job-demo.yaml
job.batch/job-demo created

3.对job进行watch

1
2
3
4
5
6
7
8
9
root@k8s-master01:~/yaml/chapter08# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
job-demo-fh6qr 1/1 Running 0 5s
job-demo-fh6qr 0/1 Completed 0 63s
job-demo-wm5b8 0/1 Pending 0 0s
job-demo-wm5b8 0/1 Pending 0 0s
job-demo-wm5b8 0/1 ContainerCreating 0 0s
job-demo-wm5b8 1/1 Running 0 3s
job-demo-wm5b8 0/1 Completed 0 64s

可以看到job的pod被启动了2次。

Job多对队列示例

1.编写资源清单文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@k8s-master01:~/yaml/chapter08# vim job-para-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-para-demo
spec:
template:
spec:
containers:
- name: myjob
image: alpine:3.11
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","sleep 60"]
restartPolicy: Never
completions: 12
parallelism: 2
ttlSecondsAfterFinished: 3600
backoffLimit: 3
activeDeadlineSeconds: 1200

2.应用配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
root@k8s-master01:~/yaml/chapter08# kubectl apply -f job-para-demo.yaml && kubectl get pods -w
job.batch/job-para-demo created
job-para-demo-8p7r8 0/1 ContainerCreating 0 0s
job-para-demo-mxvj5 0/1 ContainerCreating 0 0s
job-para-demo-8p7r8 1/1 Running 0 5s
job-para-demo-mxvj5 1/1 Running 0 5s
job-para-demo-8p7r8 0/1 Completed 0 65s
job-para-demo-4l9hc 0/1 Pending 0 0s
job-para-demo-mxvj5 0/1 Completed 0 65s
job-para-demo-4l9hc 0/1 Pending 0 0s
job-para-demo-4l9hc 0/1 ContainerCreating 0 0s
job-para-demo-mf9wv 0/1 Pending 0 0s
job-para-demo-mf9wv 0/1 Pending 0 0s
job-para-demo-mf9wv 0/1 ContainerCreating 0 0s
job-para-demo-mf9wv 1/1 Running 0 4s
job-para-demo-4l9hc 1/1 Running 0 4s
job-para-demo-mf9wv 0/1 Completed 0 63s
job-para-demo-mx7xq 0/1 Pending 0 0s
job-para-demo-mx7xq 0/1 Pending 0 0s
job-para-demo-mx7xq 0/1 ContainerCreating 0 1s
job-para-demo-4l9hc 0/1 Completed 0 64s
job-para-demo-6pbzm 0/1 Pending 0 0s
job-para-demo-6pbzm 0/1 Pending 0 0s
job-para-demo-6pbzm 0/1 ContainerCreating 0 1s
job-para-demo-mx7xq 1/1 Running 0 4s
job-para-demo-6pbzm 1/1 Running 0 4s
job-para-demo-mx7xq 0/1 Completed 0 64s
job-para-demo-nvxwq 0/1 Pending 0 0s
job-para-demo-nvxwq 0/1 Pending 0 0s
job-para-demo-nvxwq 0/1 ContainerCreating 0 0s
job-para-demo-6pbzm 0/1 Completed 0 65s
job-para-demo-ld4hk 0/1 Pending 0 0s
job-para-demo-ld4hk 0/1 Pending 0 0s
job-para-demo-ld4hk 0/1 ContainerCreating 0 0s
job-para-demo-nvxwq 1/1 Running 0 4s
job-para-demo-ld4hk 1/1 Running 0 3s
job-para-demo-nvxwq 0/1 Completed 0 64s
job-para-demo-zkmt7 0/1 Pending 0 0s
job-para-demo-zkmt7 0/1 Pending 0 0s
job-para-demo-zkmt7 0/1 ContainerCreating 0 0s
job-para-demo-ld4hk 0/1 Completed 0 64s
job-para-demo-hzlr8 0/1 Pending 0 0s
job-para-demo-hzlr8 0/1 Pending 0 0s
job-para-demo-hzlr8 0/1 ContainerCreating 0 0s
job-para-demo-zkmt7 1/1 Running 0 5s
job-para-demo-hzlr8 1/1 Running 0 3s
job-para-demo-zkmt7 0/1 Completed 0 65s
job-para-demo-nq9zj 0/1 Pending 0 0s
job-para-demo-nq9zj 0/1 Pending 0 0s
job-para-demo-nq9zj 0/1 ContainerCreating 0 0s
job-para-demo-hzlr8 0/1 Completed 0 64s
job-para-demo-dg9nx 0/1 Pending 0 0s
job-para-demo-dg9nx 0/1 Pending 0 0s
job-para-demo-dg9nx 0/1 ContainerCreating 0 1s
job-para-demo-nq9zj 1/1 Running 0 4s
job-para-demo-dg9nx 1/1 Running 0 4s
job-para-demo-nq9zj 0/1 Completed 0 64s
job-para-demo-dg9nx 0/1 Completed 0 65s

并行起了2个pod,每个线程上的pod运行了6次,一共12次