首页/云/Kubernetes 速查/kubectl rollout undo 回滚发布
kubectl 基础56 条

kubectl rollout undo 回滚发布

把工作负载回退到上一个或指定修订版本,回滚同样以滚动方式执行;Deployment 通过切换 ReplicaSet 完成。

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

回滚是什么

回滚把工作负载的模板恢复到上一个或指定的历史修订,回退过程同样以滚动方式执行,不影响理解「当前有几个实例可用」。对无状态负载来说,历史修订对应不同的副本集,回滚就是把副本切回旧的那一个,因此速度取决于新实例的启动与就绪时间。

回滚能还原什么

它只还原对象模板,也就是镜像、副本数、探针这类定义层面的内容。数据库结构变更、外部配置、密钥内容、存储里的数据都不在其中。因此「发布了数据库迁移加应用升级」这种组合,单靠回滚应用往往不能恢复可用性,需要在发布流程里预先设计好兼容策略。

基本信息

适用环境任何 Kubernetes 发行版,支持工作负载类资源
语法kubectl rollout undo <资源>/<名称> [--to-revision=...]
默认行为回退到上一个修订版本
历史依赖受历史保留数量限制,超出保留范围的目标不可回滚
结果形态生成一个新的修订,编号继续增长
不含内容外部系统状态、数据变更、配置对象的内容

典型使用场景

  • 发布后立即发现问题:新版本报错率高,尽快恢复到上一个版本
  • 定位到具体版本:明确知道某个较早的修订稳定,直接指定回退
  • 验证流程:演练回滚过程,确认历史保留与回滚时间满足要求
  • 灰度失败:小范围验证不通过,把该负载切回旧版本
  • 误操作修正:镜像被改成错误版本后快速恢复
  • 逐步排查:在多个版本之间切换,定位是哪次改动引入问题

常用示例

常用示例
kubectl rollout undo deploy/web                          # 回退到上一个修订
kubectl rollout undo deploy/web --to-revision=2           # 指定目标修订
kubectl rollout undo sts/db --to-revision=5 -n prod        # 有状态负载回滚
kubectl rollout status deploy/web --timeout=180s           # 观察回滚进度
kubectl get rs -l app=web                                  # 看新旧副本集比例变化

回滚前要确认的事

确认项为什么怎么做
历史修订范围目标修订可能已被清理查看历史列表,确认目标存在
外部状态数据与配置不随回滚变化确认变更是否可逆
回滚耗时按滚动方式执行需要时间评估故障容忍窗口
镜像可用性旧镜像可能已从仓库清理确认仓库中仍可拉取
回滚会生成一个新的修订编号,历史记录不会被删除,连续回滚会在多个版本之间来回切换。
历史保留数量设置过小时,需要回滚的目标修订可能已经不存在,此时只能重新提交旧版本的清单。

易错点

  • 以为回滚能恢复数据:它只还原对象模板,数据库结构变更与外部状态不会跟着回退
  • 历史保留数量过小:需要回滚时目标修订已被清理,回滚无从下手
  • 旧镜像已从仓库清理:回滚触发的替换因拉取失败而卡住,故障时间反而拉长
  • 回滚后不观察结果:回滚同样是一次发布,必须确认实例全部就绪才算恢复

数据来源与参考

  • Kubernetes 官方文档 · kubectl rollout undo
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌