前言

Job负责批量处理短暂的一次性任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

一、Job

1、Kubernetes支持以下几种Job:

    非并行Job:通常创建一个Pod直至其成功结束

    固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束

    带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功

2、特点

    RestartPolicy仅支持Never或OnFailure

    单个Pod时,默认Pod成功运行后Job即结束

    .spec.completions标志Job结束需要成功运行的Pod个数,默认为1

    .spec.parallelism标志并行运行的Pod的个数,默认为1

    spec.activeDeadlineSeconds标志失败Pod的重试最大时间,超过这个时间不会继续重试

二、非并行Job

(1)job-once.yaml

[root@k8s-master k8s]# cat job-once.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job-test
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: busybox-job-container
        image: busybox
        command: ["sh",  "-c"]
        args: ['echo "hello";sleep 30; echo "job"']

(2)创建

[root@k8s-master k8s]# kubectl create -f job-once.yaml
job.batch/busybox-job-test created

(3)查看pod

任务处于 Running 状态

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS    RESTARTS   AGE
busybox-job-test-qwvd2                         1/1     Running   0          7s
[root@k8s-master k8s]# kubectl logs busybox-job-test-qwvd2
hello

等待30s过后,再次查看,任务处理Completed 状态

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS      RESTARTS   AGE
busybox-job-test-qwvd2                         0/1     Completed   0          1m20s
[root@k8s-master k8s]# kubectl logs busybox-job-test-qwvd2
hello
job

(4)查看pod详细信息

能够看到job执行情况

[root@k8s-master k8s]# kubectl describe pod busybox-job-test-qwvd2
...
    Command:
      sh
      -c
    Args:
      echo "hello";sleep 30; echo "job"
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Sun, 26 Dec 2021 23:16:01 -0500
      Finished:     Sun, 26 Dec 2021 23:16:31 -0500
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-w5gbb (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-w5gbb:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-w5gbb
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  43s   default-scheduler  Successfully assigned default/busybox-job-test-qwvd2 to k8s-node01
  Normal  Pulling    41s   kubelet            Pulling image "busybox"
  Normal  Pulled     37s   kubelet            Successfully pulled image "busybox" in 4.480345937s
  Normal  Created    37s   kubelet            Created container busybox-job-container
  Normal  Started    37s   kubelet            Started container busybox-job-container

三、固定结束次数的Job

(1)job-many.yaml

[root@k8s-master k8s]# cat job-many.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job-many-test
spec:
  completions: 6
  parallelism: 3
  backoffLimit: 6
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: busybox-job-many-container
        image: busybox
        command: ["sh",  "-c"]
        args: ['echo "hello";sleep 30; echo "job"']

(2)创建

[root@k8s-master k8s]# kubectl create -f job-many.yaml
job.batch/busybox-job-many-test created

(3)查看pod

首先创建了3个job

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS    RESTARTS   AGE
busybox-job-many-test-75gq9                    1/1     Running   0          34s
busybox-job-many-test-l2v8w                    1/1     Running   0          34s
busybox-job-many-test-njhf6                    1/1     Running   0          34s

3个job完成后,又并行创建了3个job

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS      RESTARTS   AGE
busybox-job-many-test-75gq9                    0/1     Completed   0          56s
busybox-job-many-test-h99mq                    1/1     Running     0          15s
busybox-job-many-test-l2v8w                    0/1     Completed   0          56s
busybox-job-many-test-njhf6                    0/1     Completed   0          56s
busybox-job-many-test-pdsl2                    1/1     Running     0          10s
busybox-job-many-test-zpc74                    1/1     Running     0          19s

6个job全部完成

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS      RESTARTS   AGE
busybox-job-many-test-75gq9                    0/1     Completed   0          2m7s
busybox-job-many-test-h99mq                    0/1     Completed   0          86s
busybox-job-many-test-l2v8w                    0/1     Completed   0          2m7s
busybox-job-many-test-njhf6                    0/1     Completed   0          2m7s
busybox-job-many-test-pdsl2                    0/1     Completed   0          81s
busybox-job-many-test-zpc74                    0/1     Completed   0          90s
[root@k8s-master k8s]# kubectl get job
NAME                    COMPLETIONS   DURATION   AGE
busybox-job-many-test   6/6           83s        5m51s

四、带有工作队列的并行Job

(1)job-queue.yaml

[root@k8s-master k8s]# cat job-queue.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job-queue-test
spec:
  parallelism: 3
  backoffLimit: 6
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: busybox-job-queue-container
        image: busybox
        command: ["sh",  "-c"]
        args: ['echo "hello";sleep 30; echo "job"']

(2)创建

[root@k8s-master k8s]# kubectl create -f job-queue.yaml
job.batch/busybox-job-queue-test created

(3)查看job

并行启动了3个job,都处于Running 状态

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS    RESTARTS   AGE
busybox-job-queue-test-h4k9w                   1/1     Running   0          16s
busybox-job-queue-test-lhs6q                   1/1     Running   0          16s
busybox-job-queue-test-wr5zz                   1/1     Running   0          16s
[root@k8s-master k8s]# kubectl get job
NAME                     COMPLETIONS   DURATION   AGE
busybox-job-queue-test   0/1 of 3      20s        20s

等待一会任务完成后

[root@k8s-master k8s]# kubectl get pods
NAME                                           READY   STATUS      RESTARTS   AGE
busybox-job-queue-test-h4k9w                   0/1     Completed   0          101s
busybox-job-queue-test-lhs6q                   0/1     Completed   0          101s
busybox-job-queue-test-wr5zz                   0/1     Completed   0          101s
[root@k8s-master k8s]# kubectl get job
NAME                     COMPLETIONS   DURATION   AGE
busybox-job-queue-test   3/1 of 3      46s        100s
Logo

开源、云原生的融合云平台

更多推荐