CronJob和Job很像,
就是在Job
的基础上加上了时间调度,在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux
中的crontab
就非常类似了。
一个CronJob
对象其实就对应中crontab
文件中的一行,它根据配置的时间格式周期性地运行一个Job
,格式和crontab
也是一样的。
crontab
的格式如下:
分 时 日 月 星期 要运行的命令
第1列分钟0~59
第2列小时0~23
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令
现在,创建一个CronJob的
yaml文件来管理我们上面的Job
任务,
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-test
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: cronjob-test
image: m.daocloud.io/docker.io/busybox
args:
- "bin/sh"
- "-c"
- "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
这里的Kind
是CronJob
了,注意的是.spec.schedule
字段是Crontab的必须字段,用来指定任务运行的周期,格式就和liunx中的crontab
一样,另外一个字段是.spec.jobTemplate
, 用来指定需要运行的任务,格式当然和Job
是一致的。
还有一些值得我们关注的字段.spec.successfulJobsHistoryLimit
和.spec.failedJobsHistoryLimit
,表示历史限制,是可选的字段。它们指定了可以保留多少完成和失败的Job
,默认没有限制,所有成功和失败的Job
都会被保留。然而,当运行一个Cron Job
时,Job
可以很快就堆积很多,所以一般推荐设置这两个字段的值。如果设置限制的值为 0,那么相关类型的Job
完成后将不会被保留。
接下来我们来创建这个cronjob
# kubectl apply -f crontab.yaml
cronjob.batch/cronjob-test created
一旦不再需要 Cron Job,简单地可以使用 kubectl 命令删除它:
root@k8s-master:~# kubectl delete -f crontab.yaml
cronjob.batch "cronjob-test" deleted
如果不进行清楚,这个定时任务会按照设定一直执行下去,下图为例,已经启动了3个job:
如果想要删除当前 Namespace 中的所有 Job,可以通过命令 kubectl delete jobs --all 立刻删除它们。