job

主要用于负责**批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)**任务。Job特点如下:

  • 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量
  • 当成功结束的pod达到指定的数量时,Job将完成执行

关于重启策略设置的说明:

  • 如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变
  • 如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1

job.yaml

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
apiVersion: batch/v1
kind: Job
metadata:
name: job
labels:
app: job
spec:
# 允许使用selector(默认是false)
manualSelector: true
# 指定job在任一时刻应该并发运行Pods的数量。默认值: 1
parallelism: 2
# 指定job需要成功运行Pods的次数。默认值: 1
completions: 3
# 指定job失败后进行重试的次数。默认是6
backoffLimit: 6
# 如果30s内没运行完则自动销毁,不配则为∞
# activeDeadlineSeconds: 30
template:
metadata:
name: job
labels:
app: job
spec:
containers:
- name: job
image: busybox
command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]
restartPolicy: Never
selector:
matchExpressions:
- key: app
operator: In
values:
- job

查看效果

成功3次后job销毁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@release-master ~]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
job-4x6mz 1/1 Running 0 35s
job-xx7fx 1/1 Running 0 35s
job-4x6mz 0/1 Completed 0 36s
job-4s8z4 0/1 Pending 0 0s
job-4s8z4 0/1 Pending 0 0s
job-xx7fx 0/1 Completed 0 36s
job-4s8z4 0/1 ContainerCreating 0 0s


[root@release-master ~]# kubectl get job -w
NAME COMPLETIONS DURATION AGE
job 0/3 6s 7s
job 1/3 36s 37s
job 2/3 36s 37s
job 3/3 73s 74s

cronjob

CronJob控制器以Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复的)去运行job任务。

cron-job.yaml

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
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
labels:
app: cron-job
spec:
#concurrencyPolicy:
# Allow: 允许Jobs并发运行(默认)
# Forbid: 禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
# Replace: 替换,取消当前正在运行的作业并用新作业替换它
concurrencyPolicy: Allow
# 5位
schedule: "*/1 * * * *"
# 保留失败历史数
failedJobsHistoryLimit: 1
# 保留成功历史数
successfulJobsHistoryLimit: 3
# 启动作业错误的超时时常
startingDeadlineSeconds: 30
jobTemplate:
spec:
# 指定job在任一时刻应该并发运行Pods的数量。默认值: 1
parallelism: 2
# 指定job需要成功运行Pods的次数。默认值: 1
completions: 3
# 指定job失败后进行重试的次数。默认是6
backoffLimit: 6
# 下面注释的部分不需要配置
# The CronJob "cron-job" is invalid:
#* spec.jobTemplate.spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"cron-job"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: `selector` will be auto-generated
#* spec.jobTemplate.spec.manualSelector: Unsupported value: true: supported values: "nil", "false"
# manualSelector: true
# selector:
# matchLabels:
# app: cron-job
template:
metadata:
name: cron-job
labels:
app: cron-job
spec:
containers:
- name: cron-job
image: busybox
command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done"]
restartPolicy: Never

每分钟执行一次

每子job里需要成功执行3次任务, 然后同时允许2个pod并行执行