pod控制器之CronJob
CronJob(CJ)介绍
CronJob控制器以Job控制器资源为其管控对象,并借助它管理pod资源对象,Job控制器定义的作业任务在其控制器资源创建之后便会立即执行,但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说,CronJob可以在特定的时间点(反复地)去运行Job任务
CJ的资源清单文件
apiVersion: batch/v1beta1 kind: CronJob metadata: name: namespace: labels: controller: cronjob spec: schedule: #cron格式的作业调度运行时间点,用于控制任务在什么时间执行 concurrencyPolicy: #并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业 failedJobHistoryLimit: #为失败的任务执行保留的历史记录数,默认为1 successfulJobHistoryLimit: #为成功的任务执行保留的历史记录数,默认为3 startingDeadlineSeconds: #启动作业错误的超时时长 jobTemplate: #job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义 metadata: spec: completions: 1 #指定job需要成功运行pods的次数,默认值为1 parallelism: 1 #指定job在任一时刻应该并发运行pods的数量,默认值为1 activeDeadlineSeconds: 30 #指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止 backoffLimit: 6 #指定job失败后进行重试的次数,默认值是6 manualSelector: true #是否可以使用selector选择器选择pod,默认是false selector: #选择器,通过它指定该控制器管理哪些pod matchLabels: #Labels匹配规则 app: counter-pod matchExpressions: #Expression匹配规则 - {key: app, operator: In, values: [counter-pod]} template: #模板,当副本数量不足时,会根据下面的模板创建pod副本 metadata: labels: app: counter-pod spec: restartPolicy: Never #重启策略只能设置为Never或者OnFailure containers: - name: counter image: busybox:1.30 command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 2;done"]
需要重点解释的几个选项:
schedule:cron表达式,用于指定任务的执行时间
*/1 * * * *
<分钟> <小时> <日> <月份> <星期>
分钟值从0到59
小时值从0到23
日值从1到31
月值从1到12
星期值从0到6,0代表星期日
多个时间可以用逗号隔开,范围可以用连字符给出,*可以作为通配符,/表示每。。。
concurrencyPolicy:
Allow:允许Jobs并发默认
Forbid:禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
Replace:替换,取消当前正在运行的作业并用新作业替换它
使用CronJob
创建pc-cronjob.yaml文件
apiVersion: batch/v1beta1 kind: CronJob metadata: name: pc-cronjob namespace: dev labels: controller: cronjob spec: schedule: "*/1 * * * *" #表明每一分钟都会执行这个任务 jobTemplate: #job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义 metadata: spec: template: #模板,当副本数量不足时,会根据下面的模板创建pod副本 spec: restartPolicy: Never #重启策略只能设置为Never或者OnFailure containers: - name: counter image: busybox:1.30 command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1;do echo $i;sleep 3;done"]
新建三个xshell窗口,一个监控cronjob,一个监控pod,一个监控job
在第二个窗口中监控cj
[root@master ~]# kubectl get cj -n dev -w
在第三个窗口中监控pod
[root@master ~]# kubectl get pod -n dev -w
在第四个窗口中监控job
[root@master ~]# kubectl get job -n dev -w
使用配置文件创建cronjob,查看监控窗口的变化
[root@master ~]# kubectl create -f pc-cronjob.yaml
cronjob.batch/pc-cronjob created
cronjob监控窗口
pod监控窗口
job监控窗口
发现每隔一分钟,就会运行一个pod