11.1 发布策略总览:蓝绿 vs 金丝雀 vs 渐进式交付,该怎么选?
1. 引言:发布是 DevOps 的“最后一公里”
代码写好了,镜像构建了,测试通过了,但发布才是真正的考验。
传统的滚动更新(Rolling Update)虽然简单,但风险高:
- 新版本有 Bug,所有用户都会受影响
- 回滚慢,需要等待所有 Pod 重启
- 无法控制流量比例
高级发布策略可以解决这些问题,实现:
- 零停机发布:用户无感知
- 快速回滚:秒级回滚
- 风险控制:逐步放量,降低影响范围
2. 滚动更新(Rolling Update)
2.1 工作原理
K8s 默认的更新策略,逐步替换 Pod。
流程:
旧版本 Pod (v1): 5 个 ↓ 创建新版本 Pod (v2): 1 个 ↓ 删除旧版本 Pod (v1): 1 个 ↓ 重复直到所有 Pod 都是 v22.2 优缺点
优点:
- 简单,无需额外工具
- 资源占用少(不需要双倍资源)
缺点:
- 新版本有 Bug,所有用户受影响
- 回滚慢(需要重新创建 Pod)
- 无法控制流量比例
3. 蓝绿发布(Blue-Green Deployment)
3.1 工作原理
同时运行两套完全相同的环境:
- 蓝环境(Blue):当前生产版本
- 绿环境(Green):新版本
发布时,切换流量从蓝到绿。
3.2 实现方式
方式一:Service 切换
# 蓝环境apiVersion:apps/v1kind:Deploymentmetadata:name:payment-bluespec:replicas:5template:metadata:labels:version:blueapp:paymentspec:containers:-name:paymentimage:payment:v1.0.0---# 绿环境apiVersion:apps/v1kind:Deploymentmetadata:name:payment-greenspec:replicas:5template: