CronJob说白了就是用来管理Job对象的控制器,
通过jobTemplate管理Job对象,定时执行,最终实现我们的cron功能
示例
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 light weight baby !
restartPolicy: OnFailure
执行创建,看到
# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 1 13s 7m
再查看job,会发现cronjob创建了几个job对象
# kubectl get job
NAME DESIRED SUCCESSFUL AGE
hello-1571022240 1 1 2m
hello-1571022300 1 1 1m
hello-1571022360 1 1 50s
因为定时任务的特殊性,可能上一个Job没执行完,新的就产生了,可以通过spec.concurrencyPolicy字段来定义处理策略
- concurrencyPolicy=Allow,默认情况,Job可以同时存在
- concurrencyPolicy=Forbid,不会创建新的Pod,该创建周期被跳过
- concurrencyPolicy=Replace,新生产的Job会替换旧的没有执行完的Job