Cron Job 管理基于时间的 Job,即:
- 在给定时间点只运行一次
- 周期性地在给定时间点运行
一个 CronJob 对象类似于 crontab (cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job。
我们需要掌握Cron Job的定时表达式,它基本上照搬了Linux Cron的表达式,区别是第1位是分钟而不是秒,格式如下:
Minutes Hours DayofMonth Moth DaYofWeek Year
其中每个域都可出现的字符如下:
Minutes:可出现“,”“-”“*”“/”这4个字符,有效范围为0~59的整数。
Hours:可出现“,”“-”“*”“/”这4个字符,有效范围为0~23的整数。
DayofMonth:可出现“,”“-”“*”“/”“?”“L”“W”“C”这8个字符,有效范围为0~31的整数。
Month:可出现“,”“-”“*”“/”这4个字符,有效范围为1~12的整数或JAN~DEC。
DayofWeek:可出现“,”“-”“*”“/”“?”“L”“C”“#”这8个字符,有效范围为1~7的整数或SUN~SAT。1表示星期天,2表示星期一,以此类推。
表达式中的特殊字符“*”与“/”的含义如下。
*:表示匹配该域的任意值,假如在Minutes域使用“*”,则表示每分钟都会触发事件。
/:表示从起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域设置为5/20,则意味着第1次触发在第5min时,接下来每20min触发一次,将在第25min、第45min等时刻分别触发。
编写一个CrontJob 的配置文件。
任务每隔1分钟执行一次,运行的镜像时busybox,执行的命令是shell脚本,脚本执行时会爱控制台输出当前时间和字符串“hello from the kubernetes cluster”
[root@bogon ~]# vim cron.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
[root@bogon ~]# kubectl create -f cron.yaml
cronjob.batch/hello created
查看cronjob资源对象
[root@bogon ~]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 1 46s 7m51s
直观的了解cron job定期触发任务执行的历史和现状:
[root@bogon ~]# kubectl get cronjob --watch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 1 4s 10m
hello */1 * * * * False 0 31s 10m
hello */1 * * * * False 1 1s 11m
hello */1 * * * * False 0 11s 11m
删除cron job
[root@bogon ~]# kubectl delete cronjob hello
cronjob.batch "hello" deleted