Skip to content
Kubernetes 发布与排障主线 · 第 2 篇 / 共 4 篇
领域运维与部署
专题Kubernetes 专题
当前序列Kubernetes 发布与排障主线
阅读位置第 2 篇 / 共 4 篇当前专题第 2 个序列 / 共 3 个序列

RollingUpdate、Blue Green、Canary 怎么选 ​

先说结论 ​

  • 默认最常用的是 RollingUpdate,适合大多数普通服务
  • 如果回滚速度要求非常高、切换窗口明确,Blue Green 更稳
  • 如果更关注灰度验证、风险收敛和逐步放量,Canary 更合适

一、三种策略分别在解决什么 ​

1. RollingUpdate ​

它解决的是“不中断服务地逐步替换旧版本”。

优点:

  • 原生支持
  • 成本低
  • 运维复杂度小

代价:

  • 新旧版本会并存一段时间
  • 出问题时回滚不是最快
  • 对兼容性要求更高

2. Blue Green ​

它解决的是“新旧版本完全隔离,切流时一次切换”。

优点:

  • 环境边界清晰
  • 回滚快
  • 适合大版本切换

代价:

  • 资源成本高
  • 环境维护复杂
  • 数据和外部依赖兼容要提前考虑

3. Canary ​

它解决的是“先让少量真实流量验证新版本”。

优点:

  • 风险收敛最细
  • 适合核心链路
  • 便于观察真实流量表现

代价:

  • 需要更成熟的流量控制和监控
  • 发布链路更复杂
  • 指标和回滚策略要求更高

二、选的时候最该看哪三个问题 ​

1. 回滚要多快 ​

如果一分钟内就必须切回旧版本,Blue Green 往往更占优。

2. 新旧版本能不能共存 ​

如果新旧版本协议、缓存、数据库结构不完全兼容,RollingUpdate 的风险会更高。

3. 有没有灰度能力 ​

如果你已经有网关、服务网格或流量路由能力,Canary 的价值会更明显;如果没有,直接上 Canary 往往只会把发布链路搞复杂。

三、几类典型场景怎么选 ​

1. 普通内部服务 ​

大多数情况下,RollingUpdate 就够用。

2. 核心交易服务 ​

更适合 Canary,先用少量真实流量验证关键指标。

3. 门户、活动页、大版本切换 ​

如果切换窗口明确且回滚要快,Blue Green 会更稳。

四、最容易踩的坑 ​

1. 只改发布策略,不补监控 ​

没有错误率、RT、实例健康、关键业务指标,灰度和回滚都很难做准。

2. 数据库变更没兼容就做 RollingUpdate ​

新旧版本并存时最容易出问题的,往往不是 Pod,而是 schema 和数据写法。

3. Canary 只有流量切分,没有明确回滚阈值 ​

灰度流量放出去了,但什么情况下回滚、看哪些指标、观察多久都没定义,最后会很被动。

总结 ​

RollingUpdate、Blue Green、Canary 没有绝对最优,核心是看你更在意什么:简单稳定、回滚速度,还是灰度验证。大多数服务先用 RollingUpdate,关键链路逐步补 Canary,明确切换窗口的服务考虑 Blue Green,会更现实。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读StatefulSet、PVC、StorageClass 怎么理解适合把网络、发布策略、持久化和 Pod 故障排查放到一起看。Kubernetes 专题 · Kubernetes 发布与排障主线同一序列 · 顺着当前主线继续读Pod Pending 和 CrashLoopBackOff 怎么排查适合把网络、发布策略、持久化和 Pod 故障排查放到一起看。Kubernetes 专题 · Kubernetes 发布与排障主线同专题其他序列 · 共享标签:选型对比、部署交付ConfigMap、Secret、Volume 和环境变量怎么选适合把 Deployment、Service、ConfigMap、资源限制和探针放在一起看。Kubernetes 专题 · Kubernetes 核心对象与资源治理同专题其他序列 · 共享标签:部署交付节点污点、亲和性和拓扑 spread 怎么组合适合把命名空间、回滚、PDB、HPA、Mesh 和调度约束放在一条 Kubernetes 治理主线上整理。Kubernetes 专题 · Kubernetes 编排约束与交付治理跨专题关联 · 共享标签:选型对比、部署交付灰度、蓝绿、滚动发布到底怎么选:以及上线失败后怎么回滚适合沿着流水线设计、自动部署、发布策略、数据库变更和多环境治理这条线往下读。CI/CD 与发布治理专题 · CI/CD 与发布治理跨专题关联 · 共享标签:选型对比、部署交付cron 和 systemd timer 怎么选适合把进程、负载、I/O 和定时任务放在一起看。Linux 与服务器治理专题 · Linux 性能分析与系统时钟
继续阅读Kubernetes 发布与排障主线当前序列第 2 篇 / 共 4 篇当前专题第 2 个序列 / 共 3 个序列
往前看
上一篇Ingress、Service 和集群网络链路怎么串起来看回到当前序列上一章上一序列Kubernetes 核心对象与资源治理从第 1 篇开始:Pod、Deployment、Service 到底怎么协作
往后看
下一篇StatefulSet、PVC、StorageClass 怎么理解继续当前序列下一章下一序列Kubernetes 编排约束与交付治理从第 1 篇开始:Namespace、Label 和 Annotation 该怎么分工

把零散经验整理成可查、可复用、可持续更新的企业级知识门户