27、k8s-pod的控制器-第六种-CronJob(CJ)-定时执行Job任务(控制job控制器)
概念:CronJob控制器以Job控制器资源为其管控对象、并借助它管理pod资源对象、Job控制器定义的作业任务在其控制器资源创建之后便会立即执行、
但CronJob可以以类似于linux操作系统的周期性任务作业计划的方式控制其运行的 时间点 及 重复运行的方式、也就是说、CronJob可以在特定的时间点(反复的)去运行Job任务
CronJob的资源清单文件:
vim cronjob.yaml
---------------------------------------------------------------
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob
namespace: dev
labels:
controller: cronjob
spec:
schedule: #cronjob格式的作业调度运行时间点、用于控制任务在什么时间执行
concurrencyPolicy: #并发执行 是策略、用于定义前一次做作业运行尚未完成时是否(如何)运行后一次的作业
failedJobHistoryLimit: #为失败的任务执行保留的历史记录、默认位1
successfulJobHistoryLimit: #位成功的任务执行保留的历史记录数、默认为3
startingDeadlineSeconds: #启动作业错误的超时时长
jobTemplate: #job控制器的模板、用于cronjob控制器生成job对象、下面其实就是job的定义
metadata:
spec:
completions: 1
parallelism: 1
activeDeadlineSeconds: 30
backoffLimit: 6
manualSelector: true
selector:
matchLabels:
app: counter-pod
matchExpressions:
- {key: app, operator: In, values: [counter-pod]}
template:
metadata:
labels:
app: counter-pod
spec:
restartPolicy: Never
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"]
----------------------------------------------------------------------------------------------
·schedule: cron的表达式、用于指定任务执行的时间、类似于linux的cron调度任务
·concurrencyPolicy:
·Allow:允许Jobs并发允许
·Forbid:禁止并发允许、如果上一次运行尚未完成、则跳过下一次运行
·Replace:替换、取消当前正在运行的作业并用新的作业替换它
案例:
1、创建cronjob的yaml文件:
----------------------------------------------------------
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: pc-cronjob
namespace: dev
labels:
controller: cronjob
spec:
schedule: "*/1 * * * *" #每分钟执行一次
jobTemplate:
metadata:
spec:
template:
spec:
restartPolicy: Never
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"]
---------------------------------------------------------------------------------------------------
2、执行yaml文件创建cronjob并实时观察cronjob、job和pod的情况:
·kubectl create -f pc-cronjob.yaml
·kubectl get cj -ndev -w
·kubectl get job -ndev -w
·kubectl get pod -ndev -w