K8S CronJob
1、cron基础语法
Cron Job的定时表达式基本上照搬了Linux Cron的表达式,格式如下:
Minutes Hours DayofMonth Month DayofWeek
其中每个域都可出现的字符如下:
域 | 描述 |
---|---|
Minutes | 可出现“,” “-” “*” “/” 这4个字符,有效范围为0~59的整数 |
Hours | 可出现“,” “-” “%” “/” 这4个字符,有效范围为0~23的整数 |
DayofMonth | 可出现“,” “- “*” “/“ “?” “L” “W“ “C”这8个字符,有效范围 为1~31的整数 |
Month | 可出现“,” “-” “*” “/”这4个字符,有效范围为112的整数,JANDEC |
DayofWeek | 可出现“,” “*” “/” “?” “L” “C” “#” 这8个字符,有效范围为1~7的整数或SUN-SAT。1表示星期天,2表示星期一,以此类推 |
表达式中的特殊字符“*”与“/”的含义如下:
- :表示匹配该域的任意值,假如在Minutes域使用“”,则表示每分钟都会触发事件;
- /:表示从起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域设置为5/20,则意味着第1次触发在第5min时,接下来每20min触发一 次,将在第25min、第45min等时刻分别触发
2、CronJob属性
1)、schedule
每分钟执行一次
'*/1 * * * *'
分 小时 日 月 周 要运行的命令
第1列分钟(0~59)
第2列小时(0~23)
第3列日(1~31)
第4列月(1~12)
第5列星期(0~7)(0和7表示星期天)
第6列要运行的命令
2)、successfulJobsHistoryLimit
保留执行成功的历史记录次数,默认值是3。
假如设置为5,就会保留过去5次成功的执行记录
3)、failedJobsHistoryLimit
保留执行失败的历史记录次数,默认值是1。
假如设置为3,就会保留过去3次失败的执行记录
4)、startingDeadlineSeconds
它表示任务如果由于某种原因错过了调度时间,开始该任务的截止时间的秒数。
控制器将测量从预期创建作业到现在之间的时间。
如果差异高于该限制,它将跳过此执行。
例如,如果设置为60,则它允许在实际计划后最多60 秒内创建作业。
5、ttlSecondsAfterFinished
假如jobTemplate添加了ttlSecondsAfterFinished,这个时候successfulJobsHistoryLimit和failedJobsHistoryLimit就会失效。
例如ttlSecondsAfterFinished设置成30,这样不管这次的job是成功还是失败,在30秒后会照样清除
3、CronJob yaml配置样例
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: invokekafka
namespace: dev
spec:
schedule: "*/1 * * * *"
#successfulJobsHistoryLimit: 1 #默认3
#failedJobsHistoryLimit: 1 #默认1
#startingDeadlineSeconds: 60 ##CronJob 控制器将测量从预期创建作业到现在之间的时间。如果差异高于该限制,它将跳过此执行。 例如,如果设置为200,则它允许在实际计划后最多 200 秒内创建作业。
jobTemplate:
spec:
#ttlSecondsAfterFinished: 30
template:
spec:
containers:
- name: invokekafka
image: 172.171.2.148:5000/invokeintf
imagePullPolicy: Always
args: [http://kafka-demo.dev:8090/send]
restartPolicy: OnFailure
1)、运行yaml 文件
kubectl apply -f xxx.yaml
2)、查看运行日志
kubectl get pod -n namespace
[root@k8s-master conf]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
gateway-demo-5fbd8f4dc9-vvbmp 1/1 Running 0 19d
invokekafka-1678933860-sjj7m 0/1 Completed 0 3m6s
invokekafka-1678933920-xffz4 0/1 Completed 0 2m6s
invokekafka-1678933980-vmv74 0/1 Completed 0 65s
invokekafka-1678934040-ksxdt 0/1 Completed 0 5s
kafka-demo-7d545b454-jsqv9 1/1 Running 0 23h
kubectl logs podname -n namespace
[root@k8s-master conf]# kubectl logs invokekafka-1678934040-ksxdt -n dev
请求地址:http://kafka-demo.dev:8090/send
发送kafka成功