停机重建(Recreate)是什么
Recreate 是 Kubernetes Deployment 的一种发布策略:先终止全部旧 Pod,再创建新 Pod,发布窗口内服务中断。它适合两类服务:无法容忍新旧两版本并存的(协议/状态不兼容),以及独占资源的(本地锁、独占许可证、单写者)。回滚路径简单——改回旧版本镜像重新应用即可,但同样带着一次中断。中断时长等于「旧实例完全停止 + 新实例启动就绪」,要按最坏情况(大镜像拉取、冷启动)预留窗口,把中断当作计划内维护来管理。
基本信息
| 行为 | 旧 Pod 全部终止后才创建新 Pod |
|---|---|
| 代价 | 发布窗口内服务中断 |
| 典型场景 | 独占资源、单实例有状态服务 |
| 回滚 | 同路径重建旧版本镜像 |
典型使用场景
- 单实例有状态服务:两个版本无法同时持有同一份本地状态。
- 独占许可证软件:许可证锁绑定单实例,无法双跑。
- 协议不兼容变更:新旧版本对同一存储/协议解读不同,不能共存。
- 数据库迁移窗口:配合停机维护完成结构与代码同步切换。
- 内部工具服务:非核心、可接受短暂不可用的场景优先选简单策略。
Recreate 配置
Recreate 配置
spec:
strategy:
type: Recreate
template:
spec:
containers:
- name: app
image: registry.example.com/app:1.9.0
# 发布窗口内服务中断, 提前公告
# 回滚: 改回旧 tag 重新应用与滚动更新对比
| 维度 | Recreate | RollingUpdate |
|---|---|---|
| 服务中断 | 有(发布窗口内) | 无(正常情况) |
| 两版本并存 | 不允许 | 允许 |
| 资源峰值 | 较低 | 较高(双倍实例) |
| 适用 | 独占/不兼容服务 | 无状态服务 |
中断时长 = 旧实例停止 + 新实例启动就绪:按最坏情况(镜像拉取、冷启动)预留窗口并提前公告,别按平均时间估。
把中断变成计划内:选低峰窗口、发公告、核对下游重试与超时策略,服务恢复后验证再关闭维护通知。