K8s 新类型的 Job,类似 Linux Cron 的定时任务 Cron Job。
在 API Server 的启动进程上增加以下配置参数并重启:
--runtime-config=batch/v2alpha1=true
Cron Job 的定时表达式,基本上照搬了 Linux Cron 的表达式,区别是第 1 位是分钟而不是秒,格式如下:
Minutes Hours DayofMonth Month DayofWeek Year
每一个域可出现的字符如下:
Minutes:可出现 ",-*/" 这 4 个字符, 有效范围为 0-59 的整数
Hours:可出现 ",-*/" 这 4 个字符,有效范围 0-23 的整数
DayofMonth:可出现 ",-*/?LWC" 这 8 个字符,有效范围为 0-31 的整数
Month:可出现 ",-*/" 这 4 个字符,有效范围为 1-12 的整数或 JAN-DEC。
DayofWeek:可出现 ",-*/?LC#" 这 8 个字符,有效范围为 1-7 的整数或 SUN-SAT 两个范围。1 表示星期天,2 表示星期一,以此类推。
表达式的特殊字符 "*“与”/" 的含义如下:
*:表示匹配该域的任意值,假如在 Minutes 域使用 * 则表示每分钟都会触发事件。
/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在 Minutes 域设置为 5/20,则意味着第 1 次出发在第 5min 时接下来每 20min 触发一次,将在第 25min、第 45min 等时刻分别触发。
比如每隔 1min 执行一次任务,则 Cron 表达式如下:*/1 * * * *
编写一个 Cron Job 的配置文件 cron.yaml
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date;echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
定义了一个名为 hello 的 Cron Job,任务每隔 1min 执行一次,运行的镜像是 busybox,执行的命令是 shell 脚本,脚本执行时会在控制台输出当前时间和字符串 "hello from the kubernetes cluster"
执行 kubectl create 命令完成创建:
kubectl create -f cron.yaml
cronjob "hello" created
每隔 1min 执行 kubectl get cronjob hello 查看任务状态,发现的确是每分钟调度了一次
kubectl get cronjob hello
NAME SCHEDULE SUSPEND ACTIVE LAST_SCHEDULE
hello */1 * * * * False 0
还可以通过查找 Cron Job 对应的容器,验证每隔 1min 产生一个容器的事实,如下所示:
docker ps -a | grep busybox
查看任意一个容器的日志,结果如下
docker logs 83f7b86728ea
运行下面的命令,可以更加直观地了解 Cron Job 定期触发任务执行的历史和现状:
kubectl get jobs --watch
NAME DESIRED SUCCESSFUL AGE
hello-14852 1 1 31m
hello-25930 1 1 30m
查看具体的 Pod 可以通过下面方式:
kubectl get pods --show-all | grep hello-14852
当不需要某个 Cron Job 时,可以通过下面的命令删除
kubectl delete cronjob hello
作者:目标博客专家
来源链接:
https://blog.csdn.net/zhengzaifeidelushang/article/details/122780041