AdvancedCronJob
注意:v1beta1 从 Kruise v1.9.0 版本开始可用
AdvancedCronJob 是对于原生 CronJob 的扩展版本。 后者根据用户设置的 schedule 规则,周期性创建 Job 执行任务,而 AdvancedCronJob 的 template 支持多种不同的 job 资源:
- v1beta1
- v1alpha1
apiVersion: apps.kruise.io/v1beta1
kind: AdvancedCronJob
spec:
template:
# Option 1: use jobTemplate, which is equivalent to original CronJob
jobTemplate:
# ...
# Option 2: use broadcastJobTemplate, which will create a BroadcastJob object when cron schedule triggers
broadcastJobTemplate:
# ...
# Option 3: use imageListPullJobTemplate, which will create an ImageListPullJobTemplate object when cron schedule triggers
imageListPullJobTemplate:
# ...
# Option 4(future): ...
apiVersion: apps.kruise.io/v1beta1
kind: AdvancedCronJob
spec:
template:
# Option 1: use jobTemplate, which is equivalent to original CronJob
jobTemplate:
# ...
# Option 2: use broadcastJobTemplate, which will create a BroadcastJob object when cron schedule triggers
broadcastJobTemplate:
# ...
# Option 3(future):...
- jobTemplate:与原生 CronJob 一样创建 Job 执行任务
- broadcastJobTemplate:周期性创建 BroadcastJob 执行任务
- imageListPullJobTemplate:周期性创建 ImageListPullJob 执行任务

用例
BroadcastJob的定时任务
- v1beta1
- v1alpha1
apiVersion: apps.kruise.io/v1beta1
kind: AdvancedCronJob
metadata:
name: acj-test
spec:
schedule: "*/1 * * * *"
template:
broadcastJobTemplate:
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
completionPolicy:
type: Always
ttlSecondsAfterFinished: 30
apiVersion: apps.kruise.io/v1alpha1
kind: AdvancedCronJob
metadata:
name: acj-test
spec:
schedule: "*/1 * * * *"
template:
broadcastJobTemplate:
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
completionPolicy:
type: Always
ttlSecondsAfterFinished: 30
上述 YAML 定义了一个 AdvancedCronJob,每分钟创建一个 BroadcastJob 对象,这个 BroadcastJob 会在所有节点上运行一个 job 任务。
ImageListPullJob的定时任务
apiVersion: apps.kruise.io/v1beta1
kind: AdvancedCronJob
metadata:
name: acj-test
spec:
schedule: "0 */2 * * *"
concurrencyPolicy: Replace
template:
imageListPullJobTemplate:
spec:
parallelism: 5
images:
- nginx:1.14.2
- busybox:latest
pullSecrets:
- default-secret
selector:
names:
- node1
- node2
pullPolicy:
timeoutSeconds: 60
imagePullPolicy: IfNotPresent
上述 YAML 定义了一个 AdvancedCronJob,每2小时创建一个 ImageListPullJob 对象,这个 ImageListPullJob 会在所选节点上下载指定的镜像。
FEATURE STATE: Kruise v1.9.0
在 v1.9.0 版本中,我们引入了 spec.template.imageListPullJobTemplate 字段。
你可以设置它来定时下载指定镜像的到所选节点上。
时区
默认情况下,所有 AdvancedCronJob schedule 调度时,都是基于 kruise-controller-manager 容器本地的时区所计算的。
FEATURE STATE: Kruise v1.3.0
不过,在 v1.3.0 版本中我们引入了 spec.timeZone 字段,你可以将它设置为任意合法时区的名字。例如,设置 spec.timeZone: "Asia/Shanghai" 则 Kruise 会根据国内的时区计算 schedule 任务触发时间。
Go 标准库中内置了时区数据库,作为在容器的系统环境中没有外置数据库时的 fallback 选择。