首页/云/Kubernetes 速查/CronJob 定时任务基础

CronJob 定时任务基础

按 cron 表达式周期性创建 Job:备份、报表、清理等定时作业;理解调度与 Job 模板的关系是使用前提。

Kubernetes 速查云更新于 2026-10-13

CronJob 是什么

CronJob 按时间表达式周期性地创建一次性任务对象,由任务对象再去管理执行任务的 Pod。备份、报表、清理、对账这类定时作业用它最合适:调度规则与执行逻辑分开描述,集群负责在到点时拉起容器并把结果保留下来。

时区与并发的两个坑

时间表达式按什么时区解释,取决于控制器版本与配置:早期版本沿用控制器的本地时区,新版本支持在对象里显式指定时区。另一个坑是并发策略:上一轮还没跑完,下一轮到点了怎么办,默认允许重叠,会造成同一任务重复执行。

基本信息

适用环境任何 Kubernetes 发行版,接口版本随集群版本不同
语法时间表达式五段:分、时、日、月、周
时区默认沿用控制器时区,新版本支持显式指定
并发策略控制上一轮未结束时是否允许再起一轮
历史保留分别限制成功与失败任务的保留数量
手动触发从既有定时任务创建一个任务对象立即执行

典型使用场景

  • 每日备份:固定低峰时间拉取数据做备份并上传
  • 报表生成:按天或按小时汇总数据并产出报表
  • 过期数据清理:定期删除日志、临时文件与历史记录
  • 对账与巡检:周期性比对双方数据并告警
  • 证书续期:在到期前提前执行续期流程
  • 缓存预热:业务高峰前把热点数据加载进缓存

CronJob 清单

CronJob 清单
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-backup
spec:
  schedule: "0 2 * * *"        # 分 时 日 月 周,注意加引号
  concurrencyPolicy: Forbid     # 上一轮未结束时禁止并发
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  suspend: false
  jobTemplate:
    spec:
      backoffLimit: 2           # 失败重试次数
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: backup
              image: registry.example.com/backup:1.4
              command: ["./backup.sh"]

管理操作

管理操作
kubectl get cronjob                                  # 看调度时间与上次触发
kubectl get jobs --watch                              # 观察任务创建
kubectl create job --from=cronjob/nightly-backup manual-1   # 立即手动触发一次
kubectl patch cronjob nightly-backup -p '{"spec":{"suspend":true}}'   # 暂停调度
kubectl logs job/manual-1                             # 看这次执行的日志

关键字段读法

字段含义设置建议
schedule调度时间表达式必须加引号,避免被外层提前展开
concurrencyPolicy并发策略备份与对账类作业建议禁止并发
suspend是否暂停调度维护窗口期可临时暂停
历史保留成功与失败任务的保留数按排障需要保留几轮即可
backoffLimit任务失败重试次数结合任务幂等性设定
时间表达式必须用引号包裹,否则星号会被外层解释器当成通配符展开,导致提交的内容与预期不符。
需要立刻跑一次时用从定时任务创建任务的方式,不要临时改调度时间再改回去,那样容易忘记复原。

易错点

  • 时间表达式不加引号:提交到集群的内容被外层展开,调度时间与预期不同
  • 忽略时区差异:表达式按控制器时区解释,与业务所在地不一致时会算错执行时间
  • 并发策略保持默认允许重叠:上一轮未结束时又起一轮,备份与对账类作业会互相干扰
  • 任务不幂等:失败重试会完整重跑一遍容器,重复执行造成数据重复或副作用
  • 历史任务不清理:保留数量过大,集群里堆满已完成的旧任务对象

数据来源与参考

  • Kubernetes 官方文档 · CronJob
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌