首页/云/云与容器速查/kubectl rollout restart 滚动重启
Kubernetes68 条

kubectl rollout restart 滚动重启

不改配置的重启姿势:给 Pod 模板打一次时间戳注解触发滚动重启,逐个替换实例不掉可用性;改完 ConfigMap/Secret 后让它生效的标准动作。

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

kubectl rollout restart 是什么

rollout restart 是不改配置就重启工作负载的标准做法:它在 Pod 模板上加一个带时间戳的注解,触发一次滚动更新,按 maxUnavailable 与 maxSurge 逐个替换实例,过程中可用性不掉。修改 ConfigMap 或 Secret 后让它生效的常用动作就是它——尤其是通过环境变量注入的配置,必须重建 Pod 才会重新读取。

基本信息

命令kubectl rollout restart deploy/web,也支持 statefulset 与 daemonset
实现原理在 Pod 模板写 kubectl.kubernetes.io/restartedAt 注解
滚动行为按 maxUnavailable 与 maxSurge 参数逐个替换实例
观察方式kubectl get pods -w 看替换过程,rollout status 看结果
适用范围只对有控制器管理的工作负载有效,单个裸 Pod 不适用

典型使用场景

  • 配置生效:改完用环境变量注入的 ConfigMap 或 Secret 后重建实例
  • 证书轮换:Secret 中的证书更新后让应用重新加载
  • 内存回落:长期运行的实例内存上涨,重启释放后继续观察趋势
  • 演练验证:验证滚动更新策略是否符合预期,提前发现参数问题
  • 依赖恢复:下游恢复后重启上游实例,重新建立连接

使用示例

使用示例
kubectl rollout restart deploy/web -n dev     # 触发滚动重启
kubectl rollout status deploy/web -n dev      # 等待并确认滚动完成
kubectl get pods -l app=web -w                # 观察实例逐个替换
kubectl rollout history deploy/web            # 查看版本历史与 revision
kubectl rollout undo deploy/web               # 有问题时回滚到上一版

重启方式对照

方式可用性可追踪性建议
rollout restart滚动不中断有 revision 记录推荐
手工删 Pod控制器补齐顺序不可控仅用于单实例故障
改镜像触发更新滚动不中断有 revision 记录发布新版本时使用
删除 Deployment 重建中断记录断档不推荐
以数据卷方式挂载的 ConfigMap 最终会一致(通常分钟级),但通过环境变量注入的配置不会自动更新,必须重建 Pod 才生效——rollout restart 就是为这一类场景准备的。
重启之前先确认配置本身是对的:如果新实例因为配置错误起不来,滚动过程会卡住甚至把可用实例逐个换掉,反而把原本还能服务的版本替换掉。

易错点

  • 手工删 Pod 代替重启,多副本时顺序不可控且不易跟踪
  • 以为重启能解决一切,配置本身写错,新实例同样起不来还多一轮抖动
  • 滚动参数设得激进(maxUnavailable 过大),重启期间可用实例不足
  • 重启后没有确认状态就宣布完成,实际滚动卡在中间

数据来源与参考

  • Kubernetes Docs:kubectl rollout restart

相关工具

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