一、认识CronJob控制器
CronJob控制器用于管理Job控制器资源的运行时间。Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但是CronJob可以以类似于Linux操作系统中的周期任务作业计划(crontab)的方式控制其运行的时间点及重复运行的方式,具体如下:
1)在未来某个时间点运行作业一次
2)在指定的时间点重复运行作业
CronJob对象支持使用时间格式类似于CronJob,略微有不同的是,CronJob控制器在指定的时间点时,"?“和”*"的意义相同,都表示任何可用的有效值。
二、创建CronJob对象
CronJob控制器的spec字段可嵌套使用以下字段:
1)jobTemplate<Object>:Job控制器模板,用于为CronJob控制器生成Job对象;必选字段;
2)schedule<string>:Cron格式的作业调度运行时间点;必须字段;
3)concurrencyPolicy<string>:并发执行策略,可用的值有"Allow(允许)"、"Forbid(禁止)“和"Replace(替换)”,用于定义前一次作业运行尚未完成时是否以及如何运行后一次作业;
4)failedJobHistoryLimit<integer>:为失败的任务执行保留的历史记录数,默认为1;
5)successfulJobHistoryLimit<integer>:为成功的任务执行保留的历史记录数,默认为3;
6)startingDeadlineSeconds<integer>:因各种原因缺乏执行作业的时间点所导致的启动作业错误的超时时长,会被记入错误历史记录;
7)suspend<bollean>:是否挂起后续的任务执行,默认为false,对运行中的作业不会产生影响;
]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: crontab-example
labels:
app: mycronjob
spec:
schedule: "*/2 * * * *"
jobTemplate:
metadata:
labels:
app: mycronjob-jobs
spec:
parallelism: 2
template:
spec:
containers:
- name: myjob
image: alpine
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster; sleep 10
restartPolicy: OnFailure
]# kubectl apply -f cronjob.yaml
cronjob.batch/crontab-example created
2)查看CronJob控制器信息
]# kubectl get cronjob -o wide
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE CONTAINERS IMAGES SELECTOR
crontab-example */2 * * * * False 0 <none> 8s myjob alpine <none>
命令结果的显示:
SCHEDULE:是指其调度的时间点
SUSPEND:表示后续任务是否处于挂起状态,即暂停任务的调度和运行
ACTIVE:表示活动状态的Job对象的数量
LAST SCHEDULE:表示上次调度运行至此刻的时长
]# kubectl get pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
crontab-example-1597022880-bj7c8 0/1 Completed 0 71s 10.244.2.30 node2 <none> <none>
crontab-example-1597022880-nvc4r 0/1 Completed 0 71s 10.244.1.73 node1 <none> <none>
crontab-example-1597023000-rjfvw 0/1 Pending 0 0s <none> <none> <none