rollout restart 是什么
不改镜像也触发一次滚动重启:给 Pod 模板打时间戳注解,Deployment 生成新 ReplicaSet,按滚动更新策略替换实例。用于重载挂载配置、清理异常实例或让镜像重新拉取。注意重启不等于回滚:版本没变,问题版本重启只会重现问题。
基本信息
| 原理 | 修改 Pod 模板注解(restartedAt),触发新 ReplicaSet |
|---|---|
| 过程 | 与滚动更新一致,受 maxSurge/maxUnavailable 约束 |
| 用途 | 重载挂载配置、滚动替换异常实例 |
| 注意 | 重启不等于回滚:版本没变 |
| 记录 | rollout history 可查历次变更 |
典型使用场景
- 配置重载:挂载的 ConfigMap 更新后滚动生效
- 实例清理:内存泄漏实例分批替换
- 镜像拉取:同名标签场景强制重新拉取
- 故障替换:疑似坏实例先滚动替换,再诊断原因
实践要点
- 先取证:重启前抓日志与现场,别把证据清掉
- 分批观察:滚动过程盯就绪与错误率
- 区分手段:配置类问题重载,版本类问题 undo
- 时间戳注解:restartedAt 使模板变更可追踪
- 演练心态:把重启纳入 runbook 而不是随手执行
- 与 HPA 协同:重启期间的副本波动叠加扩缩容,容量评估要含两者
- 窗口选择:避开高峰与发布冻结期执行
- 容量确认:剩余副本扛得住滚动期间的缺口
触发与跟踪
触发与跟踪
kubectl rollout restart deployment/web
kubectl rollout status deployment/web
# 版本问题改用回滚
kubectl rollout undo deployment/webrollout 子命令
| 命令 | 作用 | 场景 |
|---|---|---|
| rollout restart | 滚动重启 | 配置重载与替换 |
| rollout status | 跟踪进度 | 观察就绪 |
| rollout undo | 回滚版本 | 坏版本处置 |
| rollout history | 版本记录 | 排障对照 |
把重启当故障处置手段前先确认版本是否有问题:问题版本重启只会重现问题,需要的是 rollout undo。
重启会一进一出替换实例:容量紧张的集群提前评估,避免滚动中余量不足。
重启不改镜像与版本:先分清是配置原因还是版本原因,再选手段。
多服务批量重启按依赖顺序排:上下游同时抖动会把故障放大。