让 Kubernetes CronJob 每 15 分钟运行
Kubernetes 中“每 15 分钟”的表达式是 */15 * * * *。下面是可直接粘贴的配置、接下来的运行时间和需要注意的地方。 Kubernetes CronJob 在 spec.schedule 里读五段式 cron,每次运行创建一个 Job。
*/15 * * * *在工具中打开“每隔 15 分钟”
CronJob 清单
every-15-minutes.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: every-15-minutes
spec:
schedule: "*/15 * * * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
startingDeadlineSeconds: 300
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: busybox:1.37
command: ["sh", "-c", "echo running every-15-minutes"]Kubernetes 的坑
星期只能 0-6解析器上限是 6。周日写 0,写 7 会报错。
错过太多次就不再启动CronJob 错过超过 100 次启动后,控制器不再启动它。设置 startingDeadlineSeconds,让旧的错过不再计数。
运行会重叠concurrencyPolicy 默认是 Allow,慢的 Job 会和下一次重叠。改用 Forbid 或 Replace。
日期字段里的 */n 算“已设置”只有 * 或 ? 才算不限制。0 0 */2 * 1 在奇数日或周一运行,而 Vixie cron 理解为既是奇数日又是周一。
常见问题
Kubernetes 中“每 15 分钟”的 cron 表达式是什么?
*/15 * * * *。含义:每隔 15 分钟
Kubernetes 的定时任务按哪个时区运行?
不设 spec.timeZone 时按 kube-controller-manager 的本地时区,通常是 UTC。设置 spec.timeZone(Kubernetes 1.27 起稳定)为 IANA 时区名。schedule 里写 CRON_TZ 或 TZ 会被拒绝。
CronJob 支持 @daily 吗?
支持。spec.schedule 可以写 @yearly、@monthly、@weekly、@daily 和 @hourly。
为什么 CronJob 运行了两次,或者一次都没运行?
CronJob 对每个时间点大约创建一个 Job,不保证恰好一个。让 Job 可以安全重复执行,并检查 startingDeadlineSeconds 和 concurrencyPolicy。