一、CronJob特性
CronJob是基于时间的Job控制器,简单理解就是CronJob控制器会依赖Job控制器,基于Job控制器之上增加了时间方面的约束。所以CronJob是周期性的执行Job控制器,Job控制器跑Pod的方式来完成周期性任务的。

CronJob有些特性如下:


以上特性,对其中某些做些说明:
1、spec.schedule:这个跟linux里面的corntab类似,采用 [* * * * * job命令] 方式。5个*分别代表了分时日月周。
2、spce.concurrencyPolicy:并发策略。并发策略需要根据你实际业务情况进行设定。其中:
- Allow(默认):允许并发允许Job,比如当你的任务在周期时刻被调度的时候,上一次跑的任务都还没有结束,那么Allow就是允许本次被调度运行,与前一次的任务可以并行的。
- Forbid:禁止并发运行。如果前一次调度的任务还没有完成,本次调度的任务就会跳过,不会执行本次调度任务。
- Replace:在本次调度时刻,如果上次调度的任务还在运行中,那么就会取消正在运行的Job,用一个新的Job来替换。
3、spec.suspend:挂起。将后续所有任务都挂起,对已经开始执行的Job不起作用。比如临时业务情况有变化,比如周期性备份数据库任务需要暂停,这时候可以设置suspend为ture。
4、spec.successfulJobsHistoryLimit和spec.failedJobsHistoryLimit:成功的job和失败的job的历史记录限制条数。假如我们有一个是每分钟要执行的任务,那么一个月一年下来,我们创建的Job控制器的记录都会保留在etcd中,记录太多了,没必要记录这么多,因为对于我们使用者来说关注的是当前最新几个pod的情况是否正常,所以系统默认分别设置了'3'和'1'。
二、CronJob实操
1、创建CronJob控制器
vim 12.cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-demo
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
completions: 3
template:
spec:
containers:
- name: cronjob-demo-container
image: nginx:v1
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
root@k8s-master01 5\]# kubectl apply -f 12.cronjob.yaml
cronjob.batch/cronjob-demo created
\[root@k8s-master01 5\]# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob-demo \*/1 \* \* \* \* False 0 \