定时任务是指可以制定周期的任务,比如每周二0点1分执行一次。在《研发工程师玩转Kubernetes——非定时任务》中,我们介绍了单次执行的任务。现在我们只要对其清单稍作修改,就可以实现定时任务。
# wrk_cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: wrk-cronjob
spec:
schedule: "0/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: wrk
image: localhost:32000/wrk:v1
command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
restartPolicy: Never
和单次任务清单相比,主要的修改点是:新增了spec.schedule字段。它用于描述周期。
可以见得,我们可以控制的最短周期是分钟。
在表达式中,*表示”所有”。比如:
- *****表示:每分钟、每小时、每天、每月和每周的每天,直白点说就是每分钟执行一次。
- 1**** 表示每月每天每小时的1分钟时执行一次。
- 1 22 30 5 *表示每年的5月30日22时1分执行一次。
- 1 22 * * 2表示每个星期2的22时1分执行一次。
除了指定时间执行,还可以指定周期。即用/表示切分周期。比如: - */2 * * * *表示每两分钟执行一次。
我们还可以使用https://crontab.guru/来查看表达式的表意。
比如例子中的*/1 * * * *表达的是每一分钟执行一次。
我们使用下面指令创建cronjob。
kubectl create -f wrk_cronjob.yaml
cronjob.batch/wrk-cronjob created
可以看到每隔一分钟,我们创建了一个Job;每个Job也创建了一个Pod
如果没有dashboard,可以使用命令查看。
kubectl get jobs.batch --watch
NAME COMPLETIONS DURATION AGE
wrk-cronjob-28090472 1/1 33s 3m21s
wrk-cronjob-28090473 1/1 33s 2m21s
kubectl get pod --watch
NAME READY STATUS RESTARTS AGE
simple-http-deployment-58dd5b649b-4p429 1/1 Running 0 5d13h
simple-http-deployment-58dd5b649b-pcnw9 1/1 Running 0 5d13h
wrk-cronjob-28090472-8snlv 0/1 Completed 0 39s
wrk-cronjob-28090473-ptbgg 0/1 Pending 0 0s
wrk-cronjob-28090473-ptbgg 0/1 Pending 0 0s
wrk-cronjob-28090473-ptbgg 0/1 ContainerCreating 0 0s
wrk-cronjob-28090473-ptbgg 0/1 ContainerCreating 0 0s
wrk-cronjob-28090473-ptbgg 1/1 Running 0 1s
wrk-cronjob-28090473-ptbgg 0/1 Completed 0 31s
wrk-cronjob-28090473-ptbgg 0/1 Completed 0 32s
wrk-cronjob-28090473-ptbgg 0/1 Completed 0 33s
wrk-cronjob-28090473-ptbgg 0/1 Completed 0 33s
如果我们希望CronJob创建的Job和Pod在执行结束后自动删除,可以给
spec.jobTemplate.spec.ttlSecondsAfterFinished设定一个值,例子如下:
# wrk_cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: wrk-cronjob
spec:
schedule: "0/1 * * * *"
jobTemplate:
spec:
ttlSecondsAfterFinished: 0
template:
spec:
containers:
- name: wrk
image: localhost:32000/wrk:v1
command: ["wrk", "-t20", "-c20", "-d30", "http://192.168.137.248:30000"]
restartPolicy: Never
我们可以通过下面指令删除CronJob,这样它创建的Job和Pod都会被删除。文章来源:https://www.toymoban.com/news/detail-469113.html
kubectl delete cronjobs.batch wrk-cronjob
cronjob.batch “wrk-cronjob” deleted文章来源地址https://www.toymoban.com/news/detail-469113.html
参考资料
- https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/cron-jobs/
- https://man.freebsd.org/cgi/man.cgi?crontab%285%29
到了这里,关于研发工程师玩转Kubernetes——定时任务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!