首页/云/Kubernetes 速查/CronJob 历史保留数量限制

CronJob 历史保留数量限制

successfulJobsHistoryLimit(默认 3)与 failedJobsHistoryLimit(默认 1)控制保留的已完成/失败 Job 数量,控制对象膨胀。

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

历史记录留多少合适

CronJob 会把已完成与失败的 Job 作为历史记录保留下来,由 successfulJobsHistoryLimit 与 failedJobsHistoryLimit 控制数量,常见默认值分别是 3 与 1。这些历史对象是查看日志与排障的主要证据;保留过多会让已完成的 Job 与 Pod 不断累积,增加对象数量与巡检噪声;保留过少又会让连续失败的现场被迅速顶掉,事后无从追溯。

基本信息

适用对象各版本的 CronJob
关键字段successfulJobsHistoryLimit 与 failedJobsHistoryLimit
常见默认成功历史 3,失败历史 1
影响对象Job 及其产生的已完成 Pod
范围提醒不限制正在运行的 Job,只清理已完成的对象

典型使用场景

  • 排障取证:连续失败时保留足够现场用于定位
  • 对象治理:控制已完成 Job 与 Pod 的数量,减少噪声
  • 巡检核对:确认是否存在大量残留的历史对象
  • 重要任务差异化:关键任务保留更多失败历史
  • 配合自动清理:在任务模板里设置完成后自动回收的时长

配置示例

配置示例
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-backup
  namespace: prod
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3      # 保留多少成功历史
  failedJobsHistoryLimit: 2          # 关键任务可适当调大
  jobTemplate:
    spec:
      ttlSecondsAfterFinished: 86400 # 完成后一天自动清理,可数量与时间双管
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: backup
              image: registry.example.com/backup:1.4

检查堆积情况

检查堆积情况
kubectl get jobs -n prod | grep backup
kubectl get pods -n prod --field-selector status.phase=Succeeded | wc -l
kubectl get cronjob nightly-backup -n prod -o jsonpath='{.spec.successfulJobsHistoryLimit}/{.spec.failedJobsHistoryLimit}'
kubectl get jobs -n prod -l app=backup -o custom-columns='JOB:.metadata.name,STATUS:.status.conditions[0].type'

字段与影响

字段作用注意
successfulJobsHistoryLimit保留多少成功历史过多会积累已完成对象
failedJobsHistoryLimit保留多少失败历史过少时连续失败现场会被迅速顶掉
正在运行的 Job不受数量限制影响只清理已完成对象
完成后的自动清理时长按时间回收可与数量限制叠加使用
历史记录是排障的主要证据来源:重要任务可以调大失败历史的保留数,或把日志集中收集,避免对象清理后线索也一起消失。
数量限制只作用于已完成对象:正在运行的 Job 不会被清理,容量与资源问题仍要看运行中的任务本身。

易错点

  • 失败历史保留过少:连续失败时旧现场被顶掉,事后无法定位根因
  • 成功历史保留过多:已完成 Pod 长期占用对象与磁盘,巡检噪声明显增加
  • 把数量限制当成资源回收手段:它不清理运行中的任务,也不回收卷与镜像
  • 调整限制后不核对现状:已经堆积的历史对象需要另行清理才能释放
  • 只看对象数量不看磁盘占用:Job 数量不多但单个任务的日志与产物很大,节点磁盘仍会被逐步吃满

数据来源与参考

  • Kubernetes 官方文档 · CronJob(Job history limits)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌