跳到正文
CronExplain

Kubernetes CronJob 调度解析器

Kubernetes CronJob 会按照用标准 Cron 语法编写的重复调度来创建 Job。粘贴 spec.schedule 的值,即可查看它的含义以及接下来何时创建 Job。

含义

Kubernetes CronJob:标准五字段,支持宏。设置 spec.timeZone 可使用控制器以外的时区。

✓ 有效 · 含义

整点, 每隔 6 小时

预设

接下来 10 次运行

#UTC 时间你的本地时间
1——
2——
3——
4——
5——
6——
7——
8——
9——
10——

其他方言中的同一调度

  • 标准 crontab0 */6 * * *
  • Quartz0 0 */6 * * ?
  • AWS EventBridgecron(0 */6 * * ? *)EventBridge 规则使用 UTC。
  • Spring0 0 */6 * * *

可视化生成器

为每个字段选择取值。生成器输出标准的五字段表达式,使用时会自动转换为当前选择的方言。

分钟
小时
日
月
星期
0 9 * * 1-5

schedule 字段

spec.schedule 接受五字段的 Cron 表达式,例如 "0 */6 * * *" 表示每 6 小时一次。Kubernetes 也支持 @hourly、@daily、@weekly、@monthly 和 @yearly 等宏。请在 YAML 中给值加上引号,避免星号被误解析。

使用 spec.timeZone 设置时区

如果不设置时区,调度会按 kube-controller-manager 所在时区解释,通常是 UTC。从 Kubernetes 1.27 起,可以把 spec.timeZone 设置为 Asia/Shanghai 这样的 IANA 名称。在工具中选择相同时区,即可预览准确的创建时间,包括夏令时切换。

错过的运行与并发

如果控制器错过了某个调度时间,startingDeadlineSeconds 决定 Job 最晚还能延迟多久启动。concurrencyPolicy 控制上一次运行仍在进行时的行为:Allow、Forbid 或 Replace。选择每分钟这类频繁调度时,要特别注意这些设置。

测试时可以用 kubectl create job --from=cronjob/<name> <job-name> 立即触发一次运行,并用 kubectl get cronjob 查看 LAST SCHEDULE 和 ACTIVE 列。CronJob 对象上的事件会说明某个调度时间为何被跳过,或 Job 为何启动失败。

最小清单示例

CronJob 使用 apiVersion batch/v1 和 kind CronJob,包含 spec.schedule、可选的 spec.timeZone 以及描述要运行 Pod 的 jobTemplate。设置 suspend: true 可以暂停调度而不删除它;successfulJobsHistoryLimit 和 failedJobsHistoryLimit 控制保留多少已完成的 Job 以便排查问题。

常见问题

Kubernetes CronJob 支持秒吗?
不支持。schedule 只有五个字段,所以最短间隔是 1 分钟。
schedule 里可以使用 CRON_TZ 吗?
不可以。不支持 TZ 和 CRON_TZ 前缀,请改用 spec.timeZone 字段。
0 */6 * * * 是什么意思?
每 6 小时整点运行一次:00:00、06:00、12:00 和 18:00。
为什么我的 CronJob 运行了两次或者根本没运行?
请检查 startingDeadlineSeconds 和 concurrencyPolicy,以及控制器当时是否宕机。CronJob 会尽量做到每个调度时间创建一个 Job,但并不保证。