书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客
前面讲过job是一次性的,完成之后就没有然后了,比如演示的求圆周率小数点后2000位,并不需要一直去执行运算。但是cronjob是周期性的、循环性的,比如每周日凌晨2点都需要清理一下临时文件,cronjob简写为cj。
查看是否存在cronjob。
##########实操验证##########
[root@vms10 jobs]# kubectl get cj
No resources found in nsjob namespace.
[root@vms10 jobs]#
当前并不存在cronjob。
可以通过yaml的方式创建cronjob,也可以通过命令行的方式创建。不过建议使用命令行的方式生成yaml文件,然后根据需要修改yaml文件。
创建cronjob的命令如下。
kubectl create cj 名字 --image=镜像 --schedule="*/1 * * * *" -- /bin/sh -c "命令"
这里--schedule里定义的就是什么时候开始执行指定的命令,格式跟Linux系统里crontab的格式一样,到了时间点之后执行“--”后面的命令。
建议用命令行生成一个yaml文件,然后对此yaml进行相关的修改之后,使用kubectl apply来创建cronjob。
下面创建一个名为job2的cronjob,每隔1min执行一次命令。
步骤1:通过命令行生成创建cronjob的yaml文件job2.yaml。
##########实操验证##########
[root@vms10 jobs]# kubectl create cj job2 --image=busybox --schedule="*/1 * * * *" --dry-run=client -o yaml -- /bin/sh -c "echo hello world" > job2.yaml
[root@vms10 ~]#
步骤2:查看此yaml文件的内容,并添加镜像下载策略。
##########实操验证##########
[root@vms10 jobs]# cat job2.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
creationTimestamp: null
name: job2
spec:
jobTemplate:
metadata:
name: job2
spec:
template:
metadata:
spec:
containers:
- command: ["sh","-c","echo hello world"]
image: busybox
imagePullPolicy: IfNotPresent
name: job2
resources: {}
restartPolicy: OnFailure
schedule: '*/1 * * * *'
status: {}
[root@vms10 jobs]#
注意:这里schedule和jobTemplate是对齐的,为了使整个文件看起来更清晰,在command的地方使用json格式把命令写成了一行。这里的意思是每隔1min就创建一个pod,里面执行echo hello world!
步骤3:创建cronjob。
##########实操验证##########
[root@vms10 jobs]# kubectl apply -f job2.yaml
cronjob.batch/job2 created
[root@vms10 jobs]#
步骤4:查看cronjob。
##########实操验证##########
[root@vms10 jobs]# kubectl get cj
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
job2 */1 * * * * False 0 <none> 2s
[root@vms10 jobs]#
每隔1min就会运行一个pod。
步骤5:查看现有pod。
##########实操验证##########
[root@vms10 jobs]# kubectl get jobs
No resources found in nsjob namespace.
[root@vms10 jobs]#
可以看到现在还没有任何的pod出现。
步骤6:再次查看pod。
##########实操验证##########
[root@vms10 jobs]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job2-28099309-tknbd 0/1 Completed 0 3s
[root@vms10 jobs]#
步骤7:等1分钟之后再次查看pod。
##########实操验证##########
[root@vms10 jobs]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job2-28099309-tknbd 0/1 Completed 0 60s
job2-28099310-7xpwk 0/1 ContainerCreating 0 0s
[root@vms10 jobs]# kubectl get pods
NAME READY STATUS RESTARTS AGE
job2-28099309-tknbd 0/1 Completed 0 62s
job2-28099310-7xpwk 0/1 Completed 0 2s
[root@vms10 jobs]#
从上面可以看到,两个pod的间隔是1min。
步骤8:删除cj。
##########实操验证##########
[root@vms10 jobs]# kubectl delete cj job2
cronjob.batch "job2" deleted
[root@vms10 jobs]#
注意:在cronjob的yaml文件里的.spec.jobTemplate.spec字段里,可以写activeDeadlineSeconds参数,指定cronjob所生成的pod只能运行多久。