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: Failed与reason: DeadlineExceeded。

三、Job示例

1.编写yaml文件

[root@kubernetes-master-001 ~]# vi 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.创建一次性任务

[root@kubernetes-master-001 ~]# 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.删除任务

[root@kubernetes-master-001 ~]# kubectl  delete  -f job.yaml 
job.batch "pi" deleted

六、CronJob示例

1.编写yaml文件

[root@kubernetes-master-001 ~]# vim 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.创建定时任务

[root@kubernetes-master-001 ~]# 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.

评论

暂无

添加新评论