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