来自AI助手的总结
CronJob按Cron表达式定时创建Job,适合备份等周期任务

一、什么是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。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







暂无评论内容