1. 蓝绿发布基础概念

1.1 什么是蓝绿发布

蓝绿发布(Blue-Green Deployment)是一种零停机、流量瞬时切换的发布策略。生产环境同时维护两套完全独立的集群——蓝集群(Blue)与绿集群(Green),任意时刻只有一套集群承载全部生产流量,另一套处于空闲待命状态。

  • 蓝集群(当前生产):运行当前稳定版本,承接所有用户请求。
  • 绿集群(新版本):部署新版本应用,完成内部验证与冒烟测试。
  • 流量切换:验证通过后,通过负载均衡器(如 Nginx、ALB、Istio VirtualService)将流量从蓝集群瞬时全量切至绿集群。
  • 快速回滚:若新版本出现异常,只需将流量切回蓝集群,回滚时间在秒级。
核心特征:两套独立环境 + 瞬时全量切换 + 秒级回滚。蓝绿发布不是“逐步替换”,而是“整体替换”。
蓝绿发布架构示意图 用户请求 负载均衡器 / 网关 蓝集群(当前生产) v1.0.0(稳定版) 100% 流量 Pod 副本数:20 绿集群(新版本) v2.0.0(待验证) 0% 流量 Pod 副本数:20 验证后全量切换

1.2 蓝绿发布的核心目标

蓝绿发布的设计围绕四个关键目标展开,这些目标直接决定了它在生产环境中的适用场景与运维价值:

核心目标 说明 关键指标
零停机发布 用户在整个发布过程中无感知,请求不中断 发布期间错误率 < 0.1%
瞬时回滚 新版本异常时,秒级切回旧版本 MTTR < 30s(回滚时间)
环境隔离 新旧版本完全独立,不共享运行时资源 无共享 Pod / 无共享数据库写连接
全量验证 新版本在真实生产环境中完成全量功能与压力验证 验证通过率 100% 后再切流
实践要点:蓝绿发布的核心价值在于“可预测性”——发布前绿集群已完全就绪,发布动作仅涉及流量调度,不涉及应用启动与注册,因此风险窗口极短。

1.3 蓝绿发布与传统滚动发布的区别

滚动发布(Rolling Update)是 Kubernetes 默认的更新策略,通过逐步替换旧版本 Pod 来发布新版本。两者在资源占用、发布速度、回滚能力、环境隔离等方面存在本质差异:

对比维度 蓝绿发布 滚动发布
环境数量 两套独立集群(蓝 + 绿) 单集群内逐步替换
资源占用 2x 资源(发布期间) 1x + 缓冲区(通常 25% 额外)
发布速度 秒级(流量切换) 分钟级(逐 Pod 替换)
回滚速度 秒级(切回旧集群) 分钟级(反向滚动)
环境隔离 完全隔离(独立网络/存储/配置) 共享集群,仅 Pod 版本不同
流量切换粒度 全量 / 0-100% 瞬时 逐步(如 10% → 50% → 100%)
验证能力 全量生产环境验证后再切流 边发布边验证,部分流量可能异常
适用场景 核心业务、高可用要求、大版本升级 小版本迭代、资源受限、非关键业务
蓝绿发布 vs 滚动发布流程对比 蓝绿发布流程 ① 绿集群部署 v2.0.0 ② 绿集群内部验证(冒烟+回归) ③ 负载均衡切流至绿集群 ④ 蓝集群保留 5-15min 待回滚 ⑤ 确认稳定后释放蓝集群 滚动发布流程 ① 启动滚动更新(maxSurge=25%) ② 创建新 Pod,逐步替换旧 Pod ③ 新 Pod Ready 后,旧 Pod 终止 ④ 重复步骤②③直至全部替换 ⑤ 全部 Pod 更新完成,发布结束
关键决策点:蓝绿发布并非银弹。当数据库 schema 变更不兼容时,蓝绿发布无法解决“两个版本同时操作同一数据库”的问题。此时需要配合数据库迁移策略(如扩展-迁移-收缩模式)或使用金丝雀发布进行灰度验证。

1.4 蓝绿发布的资源争抢风险预告

蓝绿发布在带来零停机与快速回滚优势的同时,也引入了显著的资源争抢风险——这也是本课程后续章节(MTTR 复盘与 HPA 参数配置)的核心背景:

  • 资源翻倍压力:发布期间两套集群同时运行,总资源需求翻倍,可能触发集群资源不足。
  • HPA 误判:新集群启动时 Pod 数量骤增,HPA 可能误判为流量高峰而过度扩缩。
  • MTTR 延长:资源争抢导致新版本启动缓慢、健康检查超时,回滚决策窗口被压缩。
  • 成本爆炸:在云原生环境中,2x 资源意味着 2x 成本,尤其在大规模集群中不可忽视。
课程预告:第 3-5 章将深入分析蓝绿发布资源争抢的 MTTR 复盘口径;第 6-10 章将给出 HPA 参数配置的最佳实践,确保蓝绿发布在资源受限场景下仍能稳定运行。