首页/云/云与容器速查/CronJob 定时任务
Kubernetes68 条

CronJob 定时任务

按 cron 表达式周期创建 Job:默认时区是 UTC(对国内业务等于凌晨跑偏 8 小时),建议显式配置 timeZone;concurrencyPolicy 控制重叠与并发。

云与容器速查云更新于 2026-10-13

CronJob 做什么

CronJob 按 cron 表达式周期性地创建 Job,每个 Job 再创建 Pod 执行任务,适合备份、报表、清理这类周期性作业。它有两个最容易踩的地方:时区,默认按 UTC 计算,对国内业务等于凌晨任务跑偏 8 小时;并发策略,默认 Allow,上一轮没跑完还会再起一轮。上线前把这两项显式写清楚,能省掉大部分「任务时间不对、数据打架」的排查。

基本信息

schedule五段式 cron:分 时 日 月 周,例如 0 2 * * *
timeZone1.27 起 GA,可写 timeZone: Asia/Shanghai 显式声明
concurrencyPolicyAllow 默认 / Forbid 同一时间只保留一个 / Replace 用新一轮替换未完成的
历史保留successfulJobsHistoryLimit 默认 3、failedJobsHistoryLimit 默认 1
补跑判定startingDeadlineSeconds:错过调度窗口后是否补执行的判定范围
suspend设为 true 可暂停调度,常用于排障期间临时停掉任务

并发策略对比

策略行为适用任务
Allow允许重叠,同一时刻可能有多轮任务在跑任务幂等、需要最大吞吐的场景
Forbid已有任务未结束时跳过本轮对账、账务、单例清理等不允许并发的任务
Replace取消未完成的任务并启动新一轮只关心最新一轮结果的采集与缓存刷新

典型使用场景

  • 夜间数据备份与归档,配合对象存储的生命周期策略
  • 定时生成报表、统计与告警汇总
  • 缓存预热与数据同步,让业务高峰前数据就位
  • 清理过期数据与临时文件,控制存储成本
  • 证书有效期检查与密钥轮换提醒,避免到期才发现

CronJob 示例

CronJob 示例
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-backup
spec:
  schedule: "0 2 * * *"            # 分 时 日 月 周
  timeZone: Asia/Shanghai          # 显式声明时区,避免按 UTC 跑偏
  concurrencyPolicy: Forbid        # 上一轮未结束时跳过本轮
  successfulJobsHistoryLimit: 3    # 保留成功历史,便于核对执行记录
  failedJobsHistoryLimit: 3        # 失败历史保留,现场不会被过早清掉
  startingDeadlineSeconds: 300     # 错过窗口后 300 秒内仍可补跑
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: backup
              image: registry.example.com/team/backup:1.0.0
cron 表达式按 UTC 计算时,0 2 * * * 实际是北京时间 10 点,定时任务「跑偏」先查时区。timeZone 字段自 1.27 起 GA,更早版本该字段可能不生效,需要从节点或镜像侧处理时区。
排查顺序:先看 Job 有没有被创建,没有创建说明是调度或 suspend 问题;再看 Job 与 Pod 状态和日志,创建了但失败属于任务本身的问题。历史保留数量太少会导致失败现场被清理,事后只能靠外部日志。

易错点

  • 不写 timeZone 依赖集群设置:换集群或升级后执行时间发生漂移,凌晨任务跑到业务高峰
  • concurrencyPolicy 默认 Allow:上一轮没跑完又启动一轮,写同一份数据时相互覆盖
  • 任务非幂等却任由重试:Job 默认会按 backoffLimit 反复重试,重复写入产生脏数据
  • 历史保留设得过小或为 0:失败现场被及时清理,事后无法从 Job 与 Pod 中查到日志

数据来源与参考

  • Kubernetes Docs:CronJob

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌