首页/云/Kubernetes 速查/revisionHistoryLimit 修订历史保留

revisionHistoryLimit 修订历史保留

控制保留多少个旧 ReplicaSet 供回滚;保留越多可回滚版本越多,也会占用 etcd 与集群对象数量。

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

revisionHistoryLimit 是什么

Deployment 每改一次 Pod 模板就产生一个新的 ReplicaSet,旧 ReplicaSet 会被缩容到 0 但仍保留下来作为回滚目标,revisionHistoryLimit 决定这类旧对象最多留几个,默认值是 10。它管的是历史对象的保留数量,既不限制正在运行的副本数,也不影响当前版本的发布策略。值越大可回退的版本越多,代价是 etcd 里多出一批副本数为 0 的对象。

基本信息

所属字段Deployment.spec.revisionHistoryLimit
默认值10 个旧 ReplicaSet
取值范围不小于 0 的整数,0 表示不留历史对象
作用范围只作用于旧 ReplicaSet,不影响当前版本与副本数
生效方式修改 spec 后由控制器在后续对账中清理多余历史

典型使用场景

  • 核心服务保留更多回滚点:把值调大,近几次发布随时可以一键回退
  • 测试环境压缩对象数量:发布频繁、历史价值低,调小以减少集群里的无用对象
  • 发布前确认可回退范围:用 rollout history 看清当前还留着哪些 revision
  • 排查回滚失败:提示找不到可回滚版本时,先怀疑历史被清理或值被设成 0
  • 大规模集群治理:成批缩容到 0 的旧 ReplicaSet 会拖慢列表查询与巡检脚本

调整与查看

调整与查看
kubectl get deploy web -o jsonpath='{.spec.revisionHistoryLimit}'   # 当前保留数量
kubectl patch deploy/web -p '{"spec":{"revisionHistoryLimit":20}}'  # 调大保留量
kubectl rollout history deploy/web                                  # 列出仍在的 revision
kubectl rollout history deploy/web --revision=3                     # 看某版本的状态摘要
kubectl get rs -l app=web --sort-by=.metadata.creationTimestamp     # 旧 ReplicaSet 与副本数
kubectl rollout undo deploy/web --to-revision=3                     # 回滚到指定版本

取值参考

场景常见取值取舍
生产核心服务10 到 30回滚不必重新构建镜像,代价是对象数量上升
一般业务保持默认 10覆盖近期几次发布,占用可控
测试环境2 到 3发布频繁,历史价值低,优先减少集群对象
演练或临时集群0不打算回滚时避免堆积无用对象
rollout history 的 CHANGE-CAUSE 列取自 kubernetes.io/change-cause 注解。发布前用 kubectl annotate deploy/web kubernetes.io/change-cause="升级到 1.26.3" 写清内容,事后回看历史才知道每个编号对应什么改动。
历史对象的清理不可逆:被回收的旧 ReplicaSet 无法再作为回滚目标,对应 revision 也会从 rollout history 中消失。做高风险变更前,先记下当前镜像 tag 与 revision 号。

易错点

  • 把 revisionHistoryLimit 设成 0:rollout undo 立刻失去全部回滚目标,出故障只能重新拉旧镜像或重新走一次发布流程
  • 误以为它限制副本数:它只管旧 ReplicaSet 个数,副本数量由 replicas 与 HPA 决定
  • 回滚前不核对 revision 号与镜像 tag:旧对象被回收后编号会跳号,凭记忆选版本容易回到错误版本
  • 超大集群里无限保留历史:缩容到 0 的旧 ReplicaSet 持续占用 etcd,并让资源列表查询明显变慢
  • 发布时不写 change-cause 注解:rollout history 只剩编号没有说明,事后无法判断哪一版可以回退

数据来源与参考

  • Kubernetes 官方文档 · Deployment(revisionHistoryLimit)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌