蓝绿发布核心是自动化控制环境生命周期、流量与验证闭环。用iac(如terraform)声明蓝绿环境,共享网络仅计算层差异;k8s中通过service selector秒级切流;ci/cd固化健康检查、冒烟测试与业务校验;脚本或argo rollouts封装流程并全程留痕。

实现服务器集群的平滑蓝绿发布,核心不在于“堆资源”,而在于用自动化控制环境生命周期、流量入口和验证闭环。关键是要把“部署新版本→验证→切流→清理”这一整条链路变成可重复、可审计、失败可中断的操作,而不是靠人工敲命令或改配置。
用基础设施即代码(IaC)定义蓝绿环境
避免手动建服务器、配负载均衡器。用Terraform或Pulumi统一描述蓝、绿两套环境的共性与差异:
- 蓝环境和绿环境共享同一套网络、安全组、子网等基础资源,仅计算层(如ASG、Deployment)和应用镜像/配置不同
- 通过变量(如 env_name = "blue" 或 app_version = "v2.1")驱动差异,一次模板,两次部署
- 每次发布时,Terraform只创建/更新绿色资源,蓝色资源保持不动;切换完成后,再用 terraform destroy -target=module.green_env 清理旧环境
用声明式服务路由控制流量开关
流量切换必须秒级、无状态、可逆。推荐在Kubernetes中采用Service selector切换,而非修改Ingress或Nginx配置:
- 始终只维护一个生产Service(如 prod-service),它的 spec.selector 是唯一流量入口开关
- 蓝环境Pod打标签 version: v1.0, env: blue;绿环境打 version: v2.1, env: green
- 切流只需一条命令:kubectl patch service prod-service -p '{"spec":{"selector":{"env":"green"}}}'
- 回滚同理,改回 "env":"blue" 即可,无需等待重建或重载
把验证环节嵌入流水线,不通过就卡住切流
自动化不能跳过验证。建议在CI/CD流程中固化三类检查:
- 健康就绪检查:等待绿环境所有Pod进入 Ready=True 状态,并通过Readiness Probe
- 接口冒烟测试:调用关键API(如 /health、/api/v1/status)确认响应码、字段结构、延迟达标
- 业务一致性校验(可选):比如比对蓝绿环境对同一请求返回的订单金额、用户权限结果是否一致
这些步骤全部由流水线自动执行,任一失败则中止发布,通知负责人,不人工干预就不继续。
用轻量脚本或Operator封装发布动作
避免让每个发布都依赖运维手写patch命令。可以:
- 写一个Python或Shell脚本,接收 --target green 参数,自动完成:部署绿Deployment → 创建绿Service → 运行验证 → 切换主Service selector → 清理旧蓝资源
- 更进一步,用Argo Rollouts或Flux CD这类工具,把整个蓝绿策略写进CRD(如 Rollout 资源),由控制器监听并执行,支持暂停、自动回滚、指标驱动升级
- 所有操作留痕:脚本输出日志、Terraform plan存档、kubectl audit日志开启,确保每次发布行为可追溯











