kubernetes 一次性任务与定时任务

kubernetes 一次性任务与定时任务

一、Job 一次性任务概述

主要负责批处理任务,Job 创建一个或多个 Pod,并确保指定数量的 Pod 成功终止。Pod 成功完成后,Job 将跟踪成功完成的情况。当达到指定的成功完成次数时,任务(即Job)就完成了。删除 Job 将清除其创建的 Pod。

一个简单的情况是创建一个 Job 对象,以便可靠地运行一个 Pod 来完成。如果第一个Pod发生故障或被删除(例如,由于节点硬件故障或节点重启),则 Job 对象将启动一个新的 Pod。当然还可以使用 Job 并行运行多个 Pod。

二、Job 终止和清理

Job 完成后,不会再创建其他 Pod,但是 Pod 也不会被删除。这样使我们仍然可以查看已完成容器的日志,以检查是否有错误、警告或其他诊断输出。Job对象在完成后也将保留下来,以便您查看其状态。当我们删除Job对象时,对应的pod也会被删除。

特殊说明:
1)单个 Pod 时,默认 Pod 成功运行后 Job 即结束。
2)restartPolicy 仅支持 Never 和 OnFailure。
3).spec.completions 标识Job结束所需要成功运行的Pod个数,默认为1
4).spec.parallelism 标识并行运行的 Pod 个数,默认为1
5).spec.activeDeadlineSeconds 为 Job 的持续时间,不管有多少 Pod 创建。一旦工作到指定时间,所有的运行 pod 都会终止且工作状态将成为type: Failedreason: DeadlineExceeded

三、Job 示例

1、编写 yaml 文件 job.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  #completions: 3  # 标识Job结束所需要成功运行的Pod个数,默认为1
  template:
    spec:
      containers:
      - name: pi
        image: registry.cn-beijing.aliyuncs.com/google_registry/perl:5.26
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

2、创建一次性任务

kubectl  apply -f  job.yaml 
job.batch/pi created

3、查看 pod 状态

# 查看,执行完成后,状态Status会变为Completed
[root@kubernetes-master-001 ~]# kubectl  get pods
NAME                   READY   STATUS              RESTARTS   AGE
ds-test-7krrv          1/1     Running             0          22h
ds-test-jnxzm          1/1     Running             0          22h
pi-bvvs4               0/1     ContainerCreating   0          106s
web-5bb6fd4c98-54ll2   1/1     Running             0          2d22h
web-5bb6fd4c98-585rn   1/1     Running             0          2d22h

[root@kubernetes-master-001 ~]# kubectl  get pods
NAME                   READY   STATUS      RESTARTS   AGE
ds-test-7krrv          1/1     Running     0          22h
ds-test-jnxzm          1/1     Running     0          22h
pi-bvvs4               0/1     Completed   0          2m21s
web-5bb6fd4c98-54ll2   1/1     Running     0          2d22h
web-5bb6fd4c98-585rn   1/1     Running     0          2d22h

4、查看 Pod 的标准输出

[root@kubernetes-master-001 ~]# kubectl  logs --tail 500 pi-bvvs4
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277

5、删除任务

kubectl  delete  -f job.yaml 
job.batch "pi" deleted

六、CronJob 示例

1、编写 yaml 文件 cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: registry.cn-beijing.aliyuncs.com/google_registry/busybox:1.24
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

2、创建定时任务

kubectl  apply  -f cronjob.yaml 
cronjob.batch/hello created

3、查看 pod 状态

# 查看,执行完成后,状态Status会变为Completed
[root@kubernetes-master-001 ~]# kubectl  get pods
NAME                   READY   STATUS              RESTARTS   AGE
ds-test-7krrv          1/1     Running             0          22h
ds-test-jnxzm          1/1     Running             0          22h
hello-27278409-kzdp8   0/1     ContainerCreating   0          106s
web-5bb6fd4c98-54ll2   1/1     Running             0          2d22h
web-5bb6fd4c98-585rn   1/1     Running             0          2d22h

[root@kubernetes-master-001 ~]# kubectl  get pods
NAME                   READY   STATUS      RESTARTS   AGE
ds-test-7krrv          1/1     Running     0          22h
ds-test-jnxzm          1/1     Running     0          22h
hello-27278409-kzdp8   0/1     Completed   0          41s
web-5bb6fd4c98-54ll2   1/1     Running     0          2d23h
web-5bb6fd4c98-585rn   1/1     Running     0          2d23h

4、查看 Pod 的标准输出

#1.查看详细的定时任务
[root@kubernetes-master-001 ~]# kubectl  get  cronjobs.batch  -o wide
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE     CONTAINERS   IMAGES                                                          SELECTOR
hello   */1 * * * *   False     0        17s             3m17s   hello        registry.cn-beijing.aliyuncs.com/google_registry/busybox:1.24   <none>

#2.查看cronjob
[root@kubernetes-master-001 ~]# kubectl  get  job  -o wide
NAME             COMPLETIONS   DURATION   AGE     CONTAINERS   IMAGES                                                          SELECTOR
hello-27278409   1/1           6s         2m54s   hello        registry.cn-beijing.aliyuncs.com/google_registry/busybox:1.24   controller-uid=ed1fee63-b42f-4c79-a9ad-02de25ef756d
hello-27278410   1/1           2s         114s    hello        registry.cn-beijing.aliyuncs.com/google_registry/busybox:1.24   controller-uid=72adc412-165d-472c-9307-ee5597682ac9
hello-27278411   1/1           2s         54s     hello        registry.cn-beijing.aliyuncs.com/google_registry/busybox:1.24   controller-uid=46ddc73b-bc1a-436f-98cb-f021370f63d9

#3.找到最后一次调度任务创建的 Pod, 并查看 Pod 的标准输出。请注意任务名称和 Pod 名称是不同的。
[root@kubernetes-master-001 ~]# kubectl  logs hello-27278411-w6hwb
Fri Nov 12 08:11:01 UTC 2021
Hello from the Kubernetes cluster

5、删除任务

[root@kubernetes-master-001 ~]# kubectl get cronjob
NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        32s             19m

[root@kubernetes-master-001 ~]# kubectl delete cronjob hello  # 或者 kubectl delete -f cronjob.yaml
cronjob.batch "hello" deleted

[root@kubernetes-master-001 ~]# kubectl get cronjob   # 可见已删除
No resources found in default namespace.

评论

暂无

添加新评论