CronJob需正确配置调度表达式和Job模板,并设置时区、并发策略、历史清理等参数。调度表达式为“分 时 日 月 星期”,支持*、/、,、-;spec.timeZone指定本地时区;jobTemplate中restartPolicy须为OnFailure或Never;concurrencyPolicy可选Allow/Forbid/Replace;startingDeadlineSeconds设错过调度宽限期;successfulJobsHistoryLimit和failedJobsHistoryLimit控制历史Job保留数量。

直接用 YAML 定义 CronJob 资源,核心是写对 调度表达式 和 任务模板,再根据业务需要调整并发、历史保留等策略。
写对 Cron 表达式
Cron 表达式控制执行时间,格式为 分 时 日 月 星期(共 5 位),支持 *、/、,、- 等符号:
-
"0 2 * * *":每天凌晨 2 点执行 -
"*/10 * * * *":每 10 分钟执行一次 -
"0 9 * * 1-5":工作日(周一至周五)上午 9 点执行 -
"0 0 1 * *":每月 1 号 0 点执行
注意:Kubernetes 默认使用 UTC 时间,如需本地时区(如 Asia/Shanghai),需显式指定 spec.timeZone 字段(v1.24+ 支持)。
定义 Job 模板内容
spec.jobTemplate 是真正要运行的任务,结构和普通 Job 一致:
- 容器镜像必须可拉取(私有镜像需配置
imagePullSecrets) -
restartPolicy必须设为OnFailure或Never(不能是 Always) - 建议设置资源限制(
resources.limits/requests),避免影响集群稳定性 - 可加
activeDeadlineSeconds防止任务长期卡住(例如设为 600 表示最多运行 10 分钟)
控制并发与容错行为
默认情况下,CronJob 允许并发执行(concurrencyPolicy: Allow),但多数场景建议显式约束:
-
Forbid:前一个任务没结束,本次调度直接跳过(适合有状态、不可并行的任务) -
Replace:新任务启动时,自动终止正在运行的旧任务(适合“最新优先”场景) -
startingDeadlineSeconds:允许错过调度的宽限期(单位秒),超时则标记为失败(例如设为 300,表示最多容忍 5 分钟延迟)
清理历史 Job 记录
不清理会导致 Job 对象越积越多,影响集群性能:
-
successfulJobsHistoryLimit:默认保留 3 个成功完成的 Job -
failedJobsHistoryLimit:默认只保留 1 个失败 Job - 设为
0表示不保留任何历史记录(适合调试阶段或日志已落盘的场景)


















