2.7.2 CronJob并发策略¶
CronJob 支持三种并发策略:
- Allow:允许同时运行多个任务,默认值
- Forbid:不允许并发运行,如果之前的任务尚未完成,新的任务不会被创建
- Replace:如果之前的任务尚未完成,新的任务会替换的之前的任务
如需更改并发策略,只需要更改 CronJob 的 concurrencyPolicy 字段即可。比如不允许 CronJob并发执行:
1、重新定义一个CronJob
关键配置
concurrencyPolicy: Forbid
完整配置文件
[root@k8s-master01 ~]# vim cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
concurrencyPolicy: Forbid
schedule: '*/1 * * * *'
jobTemplate:
metadata:
name: hello
spec:
template:
metadata:
spec:
containers:
- command:
- sh
- -c
- echo "Hello,Job" && sleep 300
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox:1.28
name: hello
resources: {}
restartPolicy: OnFailure
说明:
- sleep 300是为了验证1分钟后能不能再创建一个新的job
2、创建cronjob
[root@k8s-master01 ~]# kaf cronjob.yaml
3、查看创建情况
[root@k8s-master01 ~]# kg cj
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * <none> False 1 2s 5s
4、该任务在第一个创建 Job 后,因为第一次调度的pod并未结束,同时由于并发策略的控制,导致第二个任务不会在两分钟后创建
[root@k8s-master01 ~]# kg job | grep hello
hello-29042369 Running 0/1 2m35s 2m35s
# 查看pod
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
hello-29042396-4cf8x 1/1 Running 0 90s
5、调整并发策略为Replace后重新应用
[root@k8s-master01 ~]# vim cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
concurrencyPolicy: Replace
schedule: '*/1 * * * *'
jobTemplate:
metadata:
name: hello
spec:
template:
metadata:
spec:
containers:
- command:
- sh
- -c
- echo "Hello,Job" && sleep 300
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox:1.28
name: hello
resources: {}
restartPolicy: OnFailure
# 重新应用
[root@k8s-master01 ~]# kaf cronjob.yaml
6、因为并发策略是替换,下一次任务会覆盖上一次任务(避免长时间无法结束的任务),查看新建的 Job 和 Pod
[root@k8s-master01 ~]# kg job | grep hello
hello-29042369 Running 0/1 2m35s 2m35s
# 查看新建的pod
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
hello-29042402-5r6f8 1/1 Terminating 0 60s
hello-29042403-cpxxs 0/1 ContainerCreating 0 0s
# 查看新建的pod
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
hello-29042402-5r6f8 1/1 Terminating 0 64s
hello-29042403-cpxxs 1/1 Running 0 4s
# 查看新建的pod
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
hello-29042403-cpxxs 1/1 Running 0 58s
7、环境复原
[root@k8s-master01 ~]# k delete -f cronjob.yaml
2.7.3 Cronjob执行记录¶
CronJob 默认的执行记录保留方式如下:
- 成功记录:默认为 3 次,可以通过 successfulJobsHistoryLimit 字段更改
- 失败记录:默认为 1 次,可以通过 failedJobsHistoryLimit 字段更改
1、重新定义一个CronJob
关键配置
failedJobsHistoryLimit: 5
successfulJobsHistoryLimit: 5
完整配置文件
[root@k8s-master01 ~]# vim cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
failedJobsHistoryLimit: 5
successfulJobsHistoryLimit: 5
schedule: '*/1 * * * *'
jobTemplate:
metadata:
name: hello
spec:
template:
metadata:
spec:
containers:
- command:
- sh
- -c
- echo "Hello,Job"
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/busybox:1.28
name: hello
resources: {}
restartPolicy: OnFailure
2、创建CronJob
[root@k8s-master01 ~]# kaf cronjob.yaml
3、查看创建情况
# 查看cronjob创建情况
[root@k8s-master01 ~]# kg cj
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * <none> False 0 20s 73s
# 查看pod创建情况
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
hello-29042412-m4h7j 0/1 Completed 0 4m23s
hello-29042413-2n88x 0/1 Completed 0 3m23s
hello-29042414-4hw6d 0/1 Completed 0 2m23s
hello-29042415-wtk4f 0/1 Completed 0 83s
hello-29042416-pzxhh 0/1 Completed 0 23s
# 查看pod日志信息
[root@k8s-master01 ~]# k logs -f hello-29042416-pzxhh
Hello,Job
4、环境复原
[root@k8s-master01 ~]# k delete -f cronjob.yaml