主要属性
CronJob.spec.schedule
1
2
3
4
5
6
7
8
9
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 月的某天 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
│ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
│ │ │ │ │
│ │ │ │ │
* * * * *
CronJob.spec.concurrencyPolicy
Allow
(默认):CronJob 允许并发任务执行。Forbid
: CronJob 不允许并发任务执行;如果新任务的执行时间到了而老任务没有执行完,CronJob 会忽略新任务的执行。Replace
:如果新任务的执行时间到了而老任务没有执行完,CronJob 会用新任务替换当前正在运行的任务。
CronJob.spec.suspend
true
,可以挂起针对 CronJob 执行的任务,不会影响 CronJob 已经开始的任务,后续发生的执行都会被挂起false
,默认值。
CronJob.spec.successfulJobsHistoryLimit
- 保留多少已完成的任务
CronJob.spec.failedJobsHistoryLimit
- 保留多少已失败的任务
CronJob.spec.timeZone
- 特性状态:
Kubernetes v1.27 [stable]
- eg:
spec.timeZone: "Asia/Shanghai"
- 默认基于 kube-controller-manager 的时区
1
2
[root@k8s-master1 ~]# kubectl get pods -A | grep kube-controller-manager
kube-system kube-controller-manager-k8s-master1.zhch.lan 1/1 Running 14 (2d8h ago) 12d
样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@k8s-master1 test]# vim cj-test.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cj-test
spec:
schedule: "*/2 * * * *" # 每两分钟执行一次
concurrencyPolicy: Forbid # 不允许并发任务执行
timeZone: "Asia/Shanghai"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
suspend: false
jobTemplate:
spec:
template:
spec:
containers:
- name: cj-test-c
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
[root@k8s-master1 test]# kubectl create -f cj-test.yaml
cronjob.batch/cj-test created
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@k8s-master1 test]# kubectl get cj
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cj-test */2 * * * * False 0 105s 13m
[root@k8s-master1 test]# kubectl get po
NAME READY STATUS RESTARTS AGE
cj-test-28391832-xm6ss 0/1 Completed 0 5m50s
cj-test-28391834-xxrmn 0/1 Completed 0 3m50s
cj-test-28391836-796qf 0/1 Completed 0 110s
[root@k8s-master1 test]# kubectl logs cj-test-28391834-xxrmn
Mon Dec 25 13:14:00 UTC 2023
Hello from the Kubernetes cluster