ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 一、概述 基于Istio,我们可以实现部署新版本服务时,但现有流量还是请求到现有版本服务 * 金丝雀部署:大部分用户请求到旧服务,部分白名单用户请求到新版本服务,白名单验收通过后,其他非白名单用户慢慢路由到新版本服务,开始灰度,最后全量 * 蓝绿部署:用户被分为蓝、绿版本,分别对应服务的新老版本,基于百分比来划分用户进行灰度放量,比如一开始20%用户去到新版本服务,如果有问题,则调整百分比 本次演示假定现有的服务是v1版本,新服务为v2版本 先发布v2版本 进行白名单验收功能 开始调整流量到v2版本服务 # 二、整体思路 总体思路就是把Deployment分为v1、v2版本,VirtualService里通过调整权重做分流 配置文件见`kubernetes/services/overlays/prod` ![](https://img.kancloud.cn/d3/ae/d3aecc24fbeb6e99eb7407d9ea8a72be_1144x364.png) 运行:`./kubernetes/scripts/deploy-prod.bash`,自动部署v1版本的服务, 打开kiali的dashboard,可以看到服务的调用关系: ![](https://img.kancloud.cn/42/4a/424a4188f6ded6bc3d60a4df843fe334_2616x1456.png) # 三、同时部署v1、v2版本服务 下面演示放开注释的代码,同时部署v1和v2版本服务 `kubernetes/scripts/deploy-prod.bash`脚本默认不部署v2版本服务,需要部署则把注释的脚步放开: ![](https://img.kancloud.cn/ce/ae/ceae2b7b2a0a1b65cc60502c489f14be_2130x904.png) 放开后运行`./kubernetes/scripts/deploy-prod.bash`,运行成功后,同时部署了v1、v2版本的服务 ![](https://img.kancloud.cn/5c/f8/5cf89367a38b14261724975f7205a52e_2574x1426.png) ![](https://img.kancloud.cn/04/b3/04b3cf176b207a8cfdd222fe47a79c1d_2244x1358.png) 其中redis、MySQL服务是共用的,只有一个版本 # 四、灰度测试 以user-service为例,默认v1权重100,v2为0,即流量全部去到v1版本,具体见`kubernetes/services/overlays/prod/istio/user-service-routing-virtual-service.yml` 1. 修改配置 现在调整权重为各50,实际情况应该从小比例开始灰度,如1 ![](https://img.kancloud.cn/eb/a7/eba7ee61547bd393818bf628d6fdb61a_1886x1052.png) 2. 应用配置生效 可以使用`kubectl apply`或者`kubectl patch`命令让配置生效 本次演示patch命令,具体命令如下: ``` kubectl patch virtualservice user-service-vs --type=json -p='[ {"op": "add", "path": "/spec/http/0/route/0/weight", "value": 50}, {"op": "add", "path": "/spec/http/0/route/1/weight", "value": 50} ]' ``` ![](https://img.kancloud.cn/95/d4/95d44c2b88975431cccc9de6d260e8f0_2106x236.png) 3. 打开kiali dashboard 选择Traffic Distribution,可以看到50%的流量去到了v1版本、另外50%流量去到v2版本 ![](https://img.kancloud.cn/fa/0c/fa0c31b7eb7f7d6d847bf237ea8a40f7_1770x1258.png)