文章目录
用Istio实现蓝绿部署和金丝雀部署
前言
本文描述了用Istio对Spring Boot应用实现蓝绿部署和金丝雀部署。
环境:
- OpenShift 4.6
- Service Mesh 2.x (Istio 1.6.5)
- Spring Boot 2.2.11.RELEASE
- Java 8
本例的项目已纳入Istio管理,并注入了sidecar,并配置了原来版本(v1)的Istio config。
参见:
本例调用链:
customer -> preference -> recommendation (v1/v2)
蓝绿部署
目的:
- 如果发布失败,只影响部分用户,且不需要重新部署程序,可以快速回滚。
过程:
- 线上原版本为v1。
- 部署新版本v2,线上同时存在两个版本(蓝和绿版本)。
- 切换50%路由到v2。
- 验证通过后,切换100%路由到v2。如果验证失败,切换100%路由回v1(回滚)。
注意:先配置DestinationRule,后配置VirtualService,避免出现503错误。参见:
金丝雀部署
目的:
- 和蓝绿部署类似,更加谨慎地逐步切换到新版本。
过程:
- 线上原版本为v1。
- 部署新版本v2,线上同时存在两个版本(蓝和绿版本)。
- 切换10%路由到v2。
- 验证通过后,把更多的流量(比如20%),切换到v2。
- 逐步增加分发给v2的流量,直到把100%的流量都分发给v2。
- 如果验证失败,切换100%路由回v1(回滚)。
Istio路由分发
下图列出了recommendation服务的路由分发架构。
简单起见,没有画出服务调用链上的其他服务。
部署新版本
创建一个新的Deployment来部署新版本v2。
该Deployment中的labels
和selector.matchLabels
需要包含 version: v2
标签。
以服务recommendation
的Deploy