一、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.