赞
踩
该对象是用来执行运行一段时间后会退出的任务。
使用yaml描述Job对象,其中restartPolicy是重启策略,需要设定为OnFailure,代表着如果失败则重启,如果是正常执行完成退出,则不需要再次启动。默认的值是Always,会保持着该Pod总是运行的。
template下的Pod模板,Job通过该模板来创建Pod。
apiVersion: batch/v1
kind: Job
metadata:
name: echo-job
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- image: busybox
name: echo-job
command: ["/bin/echo"]
args: ["hello", "world"]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WkqjGLtw-1662126673545)(https://gcore.jsdelivr.net/gh/tenqaz/BLOG-CDN@main/20220721102314.png)]
使用yaml文件创建Job,然后查看job的pod对象,会发现它的STATUS状态为Completed,因为该job正常完成结束退出了。
[root@k8s-worker1 zwf]# kubectl apply -f job.yaml -n zwf
job.batch/echo-job created
[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME READY STATUS RESTARTS AGE
echo-job-45pmc 0/1 Completed 0 5s
再来看下该Completed的log,会发现已经输出了hello world
[root@k8s-worker1 zwf]# kubectl logs echo-job-45pmc -n zwf
hello world
Job的参数
activeDeadlineSeconds,设置 Pod 运行的超时时间。
backoffLimit,设置 Pod 的失败重试次数。
为什么不直接在Pod上实现,而要新创建对象Job?
保持单一原则,将业务特性与容器管理分开。
该对象用于定时任务。
使用Yaml描述CronJob对象,会发现该对象多了一个schedule字段,这个是用来描述定时任务周期的规则,jobTemplate是Job对象的模板,也就是在定时周期内不断创建Job对象来达到定时任务的目的,也是一种组合的方式。
apiVersion: batch/v1 kind: CronJob metadata: name: echo-cj spec: schedule: '*/1 * * * *' jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - image: busybox name: echo-cj imagePullPolicy: IfNotPresent command: ["/bin/echo"] args: ["hello", "world"]
使用定义的Yaml创建CronJob
[root@k8s-worker1 zwf]# kubectl apply -f cronjob.yaml -n zwf
cronjob.batch/echo-cj created
[root@k8s-worker1 zwf]# kubectl get cronjob -n zwf
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
echo-cj */1 * * * * False 1 1s 2m24s
等待3分钟后,创建了3个CronJob的Pod,并且通过AGE可以发现是每分钟创建一个。
[root@k8s-worker1 zwf]# kubectl get pods -n zwf
NAME READY STATUS RESTARTS AGE
echo-cj-27698578-jtfxm 0/1 Completed 0 2m23s
echo-cj-27698579-cdzxg 0/1 Completed 0 83s
echo-cj-27698580-rfp72 0/1 Completed 0 23s
我的个人博客
我的微信公众号:编程黑洞
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。