
# 使用ASM实现灰度发布和蓝绿发布
应用服务网格（Application Service Mesh，简称ASM）是基于开源Istio推出的服务网格平台，它深度、无缝对接了企业级Kubernetes集群服务云容器引擎（CCE），在易用性、可靠性、可视化等方面进行了一系列增强，可为客户提供开箱即用的上手体验。
为模拟实际业务场景，以服务网格的经典案例Bookinfo应用为例，介绍灰度发布和蓝绿发布的完整流程。
#### Bookinfo应用分析
Bookinfo是一个模仿在线书店的应用，页面上会显示一本书籍的描述，书籍的细节（如页数），以及关于书籍的一些评论。
Bookinfo应用由四个单独的服务构成，几个服务是由不同的语言编写的。这些服务对应用服务网格ASM并无依赖，但是构成了一个有代表性的服务网格的例子，即由多个服务、多个语言构成，且reviews服务具有多个版本。这四个服务的说明如下：
- productpage：会调用details和reviews两个服务，用来生成页面。
- details：包含了书籍的信息。
- reviews：包含了书籍相关的评论，同时会调用ratings服务。
- ratings：包含了由书籍评价组成的评级信息。
其中，reviews服务有3个版本：
- v1（1.5.1）版本会调用ratings服务，并使用1到5个黑色星形图标来显示评分信息。
- v2（1.5.0）版本不会调用ratings服务。
- v3（1.5.2）版本会调用ratings服务，并使用1到5个红色星形图标来显示评分信息。
![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
为了直观的展示灰度版本之间流量切换情况，本教程以reviews服务的v1版本（黑星形）、v3版本（红星形）为例进行说明。
图1Bookinfo应用的端到端架构   
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001145842540.png "点击放大")
在ASM中运行Bookinfo应用，无需对应用自身做出任何改变，只需简单的在ASM环境中对服务进行配置和运行，即把Envoy Sidecar注入到每个服务之中。最终的部署结果如[图2]所示。
图2Envoy Sidecar注入之后的Bookinfo应用   
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001145858276.png "点击放大")
所有的服务都和Envoy Sidecar集成在一起，被集成服务的所有出入流量都被Sidecar所劫持，这样就可以利用ASM为应用提供服务路由、遥测数据收集以及策略实施等功能。
 #### 准备工作
- 创建一个CCE集群。要求节点规格至少为**4核8GB**，此规格为部署Bookinfo应用所需的最小资源。
- 创建一个**公网类型** 的弹性负载均衡实例。该实例作为服务网格对外访问入口，被服务网格管理的应用流量，均从此实例进入并分发到后端服务。
  弹性负载均衡实例必须与CCE集群属于同一VPC和子网。
  
 
#### 步骤1：使能服务网格
使能服务网格是指为集群开启应用服务网格功能，开启后即可实现灰度发布、流量管理、熔断、监控、拓扑、调用链等丰富的服务治理能力。
1. 登录应用服务网格ASM控制台。
2. 在"总览"页面，单击"购买网格"。
3. 设置如下参数，其余参数均采用默认值。 
   - **网格类型**
     此处以专有网格为例进行说明。
     
   
   - **集群**
     选择[准备工作]中创建的集群。
     
   
   - **可用区** \&**节点规格**
     为确保Istio控制面运行稳定，推荐您使用8核16GB或以上规格控制面节点。
     
   
   
   
   
4. 设置完成后，单击"下一步"。确认订单无误后，单击"提交"。 
   启用时间预计需要5分钟，您可以单击请求提交页面的"返回Istio管理"或"前往CCE集群管理"查看网格运行状态。
   
   
 
#### 步骤2：一键创建Bookinfo应用
为集群开启应用服务网格功能后，可以通过"一键体验"创建一个Bookinfo应用Demo，具体操作如下：
1. 登录应用服务网格ASM控制台。
2. 选择左侧导航中的"服务列表"，单击"一键体验"。 
   图3一键体验应用   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001168997468.png "点击放大")
   
   
3. 在"选择集群"中设置Bookinfo应用所在的集群，在"负载均衡"中选择与所选集群处于同一VPC和子网的负载均衡实例，单击"立即体验"。 
   图4选择集群和负载均衡   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214635807.png "点击放大")
   
   
4. 等待Bookinfo应用创建完成。创建完成后状态栏将显示为"运行中"，Bookinfo应用包含productpage、details、reviews、ratings四个服务，如[图5]。
   
   图5服务列表   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169157446.png "点击放大")
   
   
 
#### 步骤3：实现灰度发布
本步骤将为Bookinfo应用的"reviews"服务添加新的灰度版本，并配置相应的灰度策略，将原有生产环境的默认版本的流量引流一部分到新版本中。
下面将以为"reviews"服务添加一个v3新版本，且v3新版本接收Bookinfo应用的20%流量为例进行配置。
**部署灰度版本**
1. 在左侧导航中选择"灰度发布"，在金丝雀发布下，单击"创建"。
2. 配置灰度版本发布基本信息，单击"创建"。 
   - 灰度发布服务：单击"选择服务"，选择reviews，单击"确定"。
   
   - 部署集群：选择网格所在集群。
   
   - 发布任务名称：用户自定义，可直接采用默认值。此处设置为reviews-v3。
   
   - 版本号：配置为v3。
   
   - 版本描述：可不填写。
   
   
   
   
3. 部署灰度版本。 
   - 实例数量：使用默认。
   
   - 实例配置：镜像版本选择1.5.2，其他参数保持默认。
   
   
   
   
4. 单击"部署灰度版本"，待版本启动进度为100%，表明灰度版本部署成功。 
   图6查看灰度版本状态   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214837293.png "点击放大")
   
   
**配置灰度策略**
为灰度版本设置灰度策略，灰度版本会根据配置的流量配比引流老版本中的部分或全部流量。
1. 灰度版本部署成功后，单击"配置灰度策略"。
2. 设置灰度策略。 
   策略类型分为"基于流量比例"和"基于请求内容"，通过页签选择确定。
   - 基于流量比例：根据流量比例配置规则，将从原版本中切分指定比例的流量到灰度版本。例如80%的流量走原版本，20%的流量走灰度版本。
   
   - 基于请求内容：根据请求内容配置规则，只有请求内容中满足特定条件的流量会切分到灰度版本上。例如只有在Windows操作系统上的用户可以访问灰度版本。
   
   
   以"基于流量比例"为例，且v3版本流量配比为20%。更多策略内容请参见[为服务添加灰度版本](https://support.huaweicloud.com/usermanual-asm/asm_01_0009.html)。
   图7灰度策略   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214475867.png "点击放大")
   
   
3. 单击"策略下发"。 
   灰度策略的生效需要几秒的时间，您需要在"监测灰度运行状态"页面开通免费体验APM，或者购买APM套餐包，否则无法观测到原版本和灰度版本的流量监控数据。
   图8开通免费体验APM   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214717333.png "点击放大")
   
   
**监测灰度运行状态**
1. 在"服务列表"页面，单击productpage服务中的"访问地址"。不断刷新页面，页面在v1和v3版本之间来回切换。 
   图9v1版本页面   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169316000.png "点击放大")
   图10v3版本页面   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169475952.png "点击放大")
   
   
2. 您也可以在一台已连接公网的机器上执行如下命令，持续访问productpage服务。 
   **while true;do wget -q -O- http://** *ip:port* **/productpage; done**
   返回控制台的"监测灰度运行状态"页面查看v1和v3版本的实时流量监控情况。
   图11流量监控详情   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001168997470.png "点击放大")
   
   
3. 在"流量监控"页面，您可以查看Bookinfo应用各微服务之间的实时拓扑。ASM提供的流量监控功能，可监控微服务之间的拓扑、会话请求调用链、各环节耗时和RPS、RT等性能状态。 
   图12流量监控拓扑   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214635809.png "点击放大")
   从拓扑图可以看出，reviews-v1和reviews-v3服务的调用次数分别为706和167，比例大致接近4:1，符合设定的流量比例策略。成功实现了灰度发布。
   
   
**灰度版本切换**
确认v3版本能够承接v1的所有流量后，即可将v1流量全部切换到v3。
1. 在"灰度发布"页面，单击灰度任务"reviews-v3"。
2. 单击v3版本后的"接管所有流量"。 
   图13接管所有流量   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169157448.png "点击放大")
   
   
3. 单击"确定"。 
   刷新页面，查看流量切换情况，数据每隔5秒会刷新一次。
   图14v3接收全部流量   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214837295.png)
   在Bookinfo应用页面，不断刷新页面，页面仅显示v3版本信息，即星形图标全部为红色。
   图15v3版本页面   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214475869.png "点击放大")
   
   
**将原版本下线**
v3承接v1版本所有流量后，即可删除v1版本，释放v1版本的资源。
1. 在"灰度发布"页面，单击灰度任务"reviews-v3"。
2. 在"监测灰度运行状态"页面中，当v3版本中的流量占比为100%时，表明v3已承接v1所有流量。单击v1版本后的"版本下线"。
3. 确认无误后，输入"DELETE"，单击"确定"。 
   下线服务版本，会将包含的工作负载和Istio相关配置资源全部删除。
   
   
 
#### 步骤4：实现蓝绿发布
本步骤将为Bookinfo应用的"reviews"服务添加新的版本，将原有生产环境的默认版本的流量切换到新版本中。
**部署新版本**
1. 在左侧导航中选择"灰度发布"，在蓝绿发布下，单击"创建"。
2. 配置基本信息，单击"创建"。 
   - 蓝绿发布服务：单击"选择服务"，选择reviews，单击"确定"。
   
   - 部署集群：选择网格所在集群。
   
   - 发布任务名称：用户自定义，可直接采用默认值。此处设置为reviews-v3。
   
   - 版本号：配置为v3。
   
   - 版本描述：可不填写。
   
   
   
   
3. 部署新版本。 
   - 实例数量：使用默认。
   
   - 实例配置：镜像版本选择1.5.2，其他参数保持默认。
   
   
   
   
4. 单击"部署新版本"，待版本启动进度为100%，表明新版本部署成功。 
   图16查看新版本状态   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214717335.png "点击放大")
   
   
**蓝绿策略配置与监控**
1. 新版本部署成功后，单击"蓝绿策略配置与监控"。
2. 开通免费体验APM，或者购买APM套餐包，否则无法观测到原版本和新版本的流量监控数据。 
   图17开通免费体验APM   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169316004.png "点击放大")
   
   
3. 单击"版本流量切换"，将流量全部切换到v3版本。
4. 访问productpage服务地址，不断刷新页面，仅显示v3版本信息，即星形图标全部为红色。说明流量已全部切换到v3版本，成功实现了蓝绿发布。 
   图18v3版本页面   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169475954.png "点击放大")
   
   
**将原版本下线**
确认v3版本能够承接v1的所有流量后，即可删除v1版本，释放v1版本的资源。
1. 在"灰度发布"页面，单击灰度任务"reviews-v3"。
2. 在"蓝绿策略配置与监控"页面中，单击v1版本后的"版本下线"。
3. 确认无误后，单击"确定"。 
   下线服务版本，会将包含的工作负载和Istio相关配置资源全部删除。
   
   
 
