重建式发布是什么
重建策略会先把旧副本全部终止,再创建新副本,中间存在一段完全不可用的窗口。它的价值在于保证新旧版本不并存:需要独占文件锁、独占设备的服务无法接受两个版本同时运行。滚动策略保证可用性,重建策略保证互斥,两者取舍取决于业务能否容忍中断。
基本信息
| 适用平台 | Kubernetes 1.20+,部署对象的策略字段 |
|---|---|
| 发布行为 | 先缩到零,再创建新副本 |
| 可用性 | 存在明确的不可用窗口 |
| 适用条件 | 新旧版本不能同时运行 |
| 替代方案 | 滚动发布、蓝绿切换、单副本加维护窗口 |
典型使用场景
- 服务依赖独占文件锁,两个实例同时启动会互相阻塞
- 单实例应用挂载独占设备或使用固定主机端口
- 数据库结构变更前后版本不兼容,必须以整体切换方式发布
- 测试环境追求发布流程简单,可以接受短暂中断
- 迁移期应用无法同时处理新旧两种数据格式
策略配置
策略配置
spec:
replicas: 1
strategy:
type: Recreate # 先终止旧副本,再创建新副本
template:
spec:
containers:
- name: web
image: registry.example.com/web:1.27.0行为验证
行为验证
kubectl patch deploy/web -p '{"spec":{"strategy":{"type":"Recreate"}}}' # 切换策略
kubectl set image deploy/web web=web:1.27.0 # 触发发布
kubectl get pods -l app=web -w # 观察先缩到零再起新副本
kubectl rollout status deploy/web # 确认发布完成两种策略对照
| 策略 | 发布过程 | 适用判断 |
|---|---|---|
| 滚动发布 | 逐步替换,可用性高 | 默认选择,副本可并存 |
| 重建发布 | 先全部停止再创建 | 新旧版本互斥时使用 |
| 蓝绿切换 | 两套环境切换流量 | 需要快速回退且资源充足 |
| 单副本维护窗口 | 停机窗口内操作 | 可预约中断的非核心业务 |
修改策略字段本身不会触发新的发布,只有模板变化才会产生新的副本。切换策略后需要有意识地在变更窗口内触发一次发布并验证结果。
重建期间服务完全不可用。生产环境使用前必须确认业务方能接受这段中断,并提前通知相关方,配合健康检查避免长时间挂着不可用状态。