一、什么是CronJob¶
CronJob创建基于时隔重复调度的 Job。其中.spec.schedule 字段是必需的。该字段的值遵循 Cron 语法:
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │ 或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
步长可被用于范围组合。范围后面带有 /<数字> 可以声明范围内的步幅数值。 例如,0-23/2 可被用在小时字段来声明命令在其他数值的小时数执行 (V7 标准中对应的方法是 0,2,4,6,8,10,12,14,16,18,20,22)。 步长也可以放在通配符后面,因此如果你想表达 “每两小时”,就用 */2 。
例如 0 0 13 * 5 表示此任务必须在每个星期五的午夜以及每个月的 13 日的午夜开始。
二、CronJob工作流程¶
CronJob工作流程图如下:

CronJob工作流程如下:
- 用户创建 CronJob
在指定的
Namespace下定义一个CronJob对象,配置以下关键参数: schedule:cron 表达式(如*/5 * * * *表示每 5 分钟执行一次)。jobTemplate:定义 Job 的模板(包括容器镜像、命令、重试策略等)。concurrencyPolicy:并发策略(允许/禁止同一时间运行多个 Job)。successfulJobsHistoryLimit和failedJobsHistoryLimit:保留成功/失败 Job 的历史数量。- CronJob Controller 监听调度 Kubernetes 的 CronJob Controller 持续监控时间表,当达到预设的调度时间时,触发一个新的 Job 资源。
- Job 创建 Pod 执行任务
- 每个触发的 Job 会根据
jobTemplate在相同 Namespace 下创建 Pod(图中显示多个 Pod,可能表示 Job 的parallelism或历史记录)。 - Pod 执行用户定义的任务(如定时备份、数据清理),完成后以退出码
0标记成功,非零标记失败。 - 任务状态监控与清理
- 若 Job 成功完成,CronJob 会根据
successfulJobsHistoryLimit保留指定数量的历史记录,超出的 Job 会被自动清理。 - 若 Job 失败,根据
failedJobsHistoryLimit保留失败记录,同时可能触发重试(需在 Job 模板中配置backoffLimit)。
组件关系
- CronJob → Job → Pod
- 一个 CronJob 按时间表生成多个 Job(图中显示多个 Job 和 Pod)。
- 每个 Job 可能启动一个或多个 Pod(取决于 Job 的
completions和parallelism配置)。
三、CronJob特点和优势¶
CronJob特点和优势如下:
- 周期执行:CronJob使用cron表达式定期创建Job执行任务
- 并行执行:CronJob具备多种并发策略,调用Job更加灵活
- 可靠性高:CronJob可以调度到K8s的任意节点运行,防止单点故障
- 环境隔离:CronJob可以使用不同的镜像执行任务,无需考虑版本冲突
- 历史记录:CronJob可以保留多个成功和失败的任务,便于问题跟踪和审计
四、CronJob使用场景¶
CronJob 用于执行排期操作,例如备份、生成报告等。 一个 CronJob 对象就像 Unix 系统上的 crontab(cron table)文件中的一行。 它用 Cron格式进行编写, 并周期性地在给定的调度时间执行 Job。