任务(Job)
# Job 常用配置项
# 1一个简单的Job
# 示例1
apiVersion: batch/v1
kind: Job
metadata:
name: job1
spec:
template:
metadata:
creationTimestamp: null
spec:
containers:
- image: busybox
imagePullPolicy: IfNotPresent
name: job1
command: ['sh', '-c', 'echo hello ; sleep 10']
resources: {}
restartPolicy: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 示例2
apiVersion: batch/v1
kind: Job
metadata:
name: job1
spec:
parallelism: 3 # 并行运行 3 个 Pod
completions: 6 # Job 必须成功 6 次才算成功
backoffLimit: 4 # 重试次数为 4
activeDeadlineSeconds: 1800 # 最大运行时间为 1800 秒
template:
metadata:
spec:
containers:
- image: busybox
imagePullPolicy: IfNotPresent
name: job1
command: ['sh', '-c', 'echo hello && sleep 10']
restartPolicy: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# spec.restartPolicy(重启策略)
重启策略共有三种,但是 Job 只能使用除了 Always 之外的两种:
Never
:只要任务没有完成,就创建新的 Pod 运行,直到 Job 完成(会产生多个 Pod)Onfailure
:只要任务没有完成,就会重启 Pod,重新执行任务
# spec.parallelism
并行运行 N 个 Pod。
spec:
parallelism: N # 绝对数值,单位:个
1
2
2
# spec.completions
Job 必须成功 M 次才算成功。即,必须要有 M 个状态为 “Completed” 的 Pod。如果没有就重复执行。
spec:
completions: M # 绝对数值,单位:次
1
2
2
# spec.backoffLimit
Job 失败后的重试次数。
spec:
backoffLimit: N # 绝对数值,单位:次
1
2
2
注意
- 如果并行创建 2 个 Pod,则算是重复 2 次,以此类推。
- 有时创建的 Pod 会被自动删除,例如总共创建了 5 个 Pod,自动删除了 2 个,最终看到的是 3 个。所以不能以最终的 Pod 数来计算重试的次数。
# spec.activeDeadlineSeconds
Job 运行的最长时间。超过这个时间,不管 Job 有没有完成都会被终止,没完成的 Pod 也会被强制删除,不会再产生新的 Pod。
spec:
activeDeadlineSeconds: N # 绝对数值,单位:秒
1
2
2
编辑 (opens new window)