一、Job配置参数详解¶
下面以一个示例来说明下Job配置参数:
apiVersion: batch/v1
kind: Job
metadata:
labels:
job-name: echo
name: echo
namespace: default
spec:
suspend: true # 1.21+
ttlSecondsAfterFinished: 100
backoffLimit: 4
completions: 1
parallelism: 1
template:
spec:
containers:
- command:
- echo
- Hello, Job
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: Always
name: echo
resources: {}
restartPolicy: Never
其中主要配置参数如下:
- backoffLimit:如果任务执行失败,失败多少次后不再执行
- completions:有多少个Pod执行成功,认为任务是成功的。如果为空默认和parallelism数值一样
- parallelism:并行执行任务的数量,如果parallelism数值大于未完成任务数,只会创建未完成的数量; 比如completions是4,并发是3,第一次会创建3个Pod执行任务, 第二次只会创建一个Pod执行任务
- ttlSecondsAfterFinished:Job在执行结束之后(状态为completed或 Failed)自动清理。设置为0表示执行结束立即删除,不设置则不会清除,需要开启TTLAfterFinished特性
1.6 Job配置示例¶
1.定义一个名为job.yaml的yaml文件
[root@k8s-master01 JOB]# vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:
labels:
job-name: echo
name: echo
namespace: default
spec:
backoffLimit: 4
ttlSecondsAfterFinished: 100
completions: 5 #成功数为5
parallelism: 3 #并发是3
template:
spec:
containers:
- command:
- echo
- Hello, Job
image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
imagePullPolicy: IfNotPresent
name: echo
resources: {}
restartPolicy: Never
上面参数说明如下:
- backoffLimit:如果任务执行失败,失败多少次后不再执行。这里设置为4,代表失败4次后不再执行
- completions:有多少个Pod执行成功,认为任务是成功的。如果为空默认和parallelism数值一样。这里设置为5,代表起来5个Pod是代表执行成功的
- parallelism:并行执行任务的数量,如果parallelism数值大于未完成任务数,只会创建未完成的数量; 比如completions是5,并发是3,第一次会创建3个Pod执行任务, 第二次只会创建2个Pod执行任务。
2.部署
[root@k8s-master01 JOB]# kubectl create -f job.yaml
job.batch/echo created
3.查看job
[root@k8s-master01 JOB]# kubectl get job
NAME COMPLETIONS DURATION AGE
echo 5/5 8s 5m21s
4.查看Pod状态,观察先完成3个,等3个完成后再完成剩下的两个
[root@k8s-master01 JOB]# kubectl get po
NAME READY STATUS RESTARTS AGE
echo-42g4k 0/1 Completed 0 3m45s
echo-66qsz 0/1 Completed 0 3m45s
echo-hbbc2 0/1 Completed 0 3m41s
echo-j4hxt 0/1 Completed 0 3m45s
echo-s7sjr 0/1 Completed 0 3m41s
5.查看任一Pod的日志
[root@k8s-master01 JOB]# kubectl logs -f echo-42g4k
Hello, Job
6.等待100s后,再次查看pod和job资源,观察到已被清除
# 查看pod资源
[root@k8s-master01 JOB]# kubectl get po
No resources found in default namespace.
# 查看job资源
[root@k8s-master01 JOB]# kubectl get job
No resources found in default namespace.