作者:卜比

在发布过程中,为了产品整体稳定性,我们总是希望能够用小部分特定流量来验证下新版本应用是否能正常工作。

即使新版本有问题,也能及时发现,控制影响面,保障了整体的稳定性。

整体架构

我们以如下 Demo 为例:

1.png

为了保证稳定,我们约定如下上线流程:

2.png

其中,在灰度验证中,有几种不同的策略:

  • 直接使用线上小部分流量来测试(按照百分比放量)
  • 从线上按照特定规则选择流量(比如特定的 header、特定的 cookie 等)
  • 在客户端或浏览器上标识出流量是否灰度(比如通过 header 传递)

部署应用&创建泳道

按照参考文档在 Kubernetes 集群中部署应用后,我们首先要区分线上流量和灰度流量。

部署文档:

https://github.com/aliyun/alibabacloud-microservice-demo/blob/master/mse-simple-demo/helm/mse-simple-demo/README.md

创建泳道组,选择入口应用以及整个链路涉及到的应用:

3.png

然后创建泳道,将符合规则的流量划入 gray 泳道:

4.png

注:没有匹配的流量,会走到基线环境,也就是没有打标的应用节点上。

配置完成后,访问网关,如果不符合灰度规则,走基线环境:

5.png

如何符合灰度规则,走灰度环境:

6.png

配置云效流水线

在本例中,使用“其他 · 空模板”创建云效流水线,创建后,需要进行四部分配置:

流水线源

配置好流水线的来源,比如代码仓库等。

7.png

  • 代码仓库:https://gitee.com/mse-group/alibabacloud-microservice-demo.git(为了避免网络延迟,所以采用 gitee 仓库)
  • 默认分支:master
  • 服务连接:可以通过添加服务连接按钮添加,由于本例中代码仓库为公开代码仓库,所以只需要按照默认值创建即可。

配置完成后,添加到流水线中。

构建阶段配置

此阶段配置云效如何构建 docker 镜像。

删除原有的阶段和空任务,手动添加新任务“镜像构建”:

8.png

9.png

配置参数如下:

  • 构建集群:就近选择,国内可以选择“北京构建集群”
  • 服务连接:您可以按照提示添加 ACR 的服务连接,通过 RAM 授权的方式,让云效可以推送镜像到 ACR 中
  • 仓库:选择您需要推送、部署的镜像仓库
  • 标签:保留默认${DATETIME}即可。
  • Dockerfile 路径:mse-simple-demo/A/Dockerfile

配置好后,添加即可。

部署 gray 阶段配置

本步骤指示云效如何部署 gray 节点。由于云效可以直接替换 Kubernetes 中的 workload 镜像,我们可以直接使用此机制来发布。

10.png

配置参数如下:

  • 集群连接:用来授权云效修改 ACK 集群中 workload 配置。按照授权添加对应 ACK 集群连接即可
  • Kubectl 版本:选择相近版本即可
  • 命名空间:按照实际情况选择
  • Workloads 类型:本例中是 Deployment
  • Workloads 名称:本例中是 spring-cloud-a-gray
  • 容器名称:本例中是 spring-cloud-a-gray
  • 镜像:选择上一步构建的结果,可以选择“镜像公网地址”

部署线上阶段配置

11.png

类似上一阶段的配置:

  • Workloads 名称:和上一步不同,这儿是基线环境的 workloads,值为 spring-cloud-a
  • 容器名称:spring-cloud-a

最后,将部署 gray 阶段和部署线上阶段的的触发模式改为“手动触发”。

完整配置好后的效果如图:

12.png

流水线运行

配置好流水线后,我们可以按照发布流程来一步步运行流水线:

13.png

打包构建

我们手动运行刚刚的创建好的流水线,观察构建状态。

运行成功效果如下:

14.png

您也可以查看日志来确定运行状态、排查问题等:

15.png

完成镜像构建后,接着就开始开始部署 gray 了。

部署 gray 并验证

点击部署 gray 阶段的手动触发按钮,开始部署 gray:

16.png

部署结束后,可以在 Kubernetes 控制台确认下部署后容器镜像是不是符合预期:

17.png

如上图,可以看到对应镜像已经部署到 gray 了。

我们可以尝试用小流量进行验证,按照之前在 MSE 全链路灰度上的配置,访问只需要带上参数 name=xiaoming 即可访问到 gray 节点:

18.png

可以看到请求到达了 Agray 节点,同时新的代码也生效了。

我们不妨观察下此时线上的流量:

19.png

没有带灰度参数的流量,走基线环境,同时新版本的修改也还未生效。

在验证完 gray 环境后,我们就可以开始发布线上了。

如果此时验证不通过,我们可以中止流水线运行,排查问题后重新运行流水线。

部署线上

点击部署线上阶段的手动触发按钮,开始部署线上:

20.png

线上部署成功后,也可以在容器控制台查看,看下是否符合预期:

21.png

此时我们开始观察线上流量,看下修改是否生效:

22.png

可以看到,新版本的修改此时就完全发布到线上了。

总结

在微服务治理架构中,MSE 全链路灰度提供了虚拟泳道能力,极大的方便了测试、发布时的快速验证,能够帮助 Devops 同学减少保障半径、提升线上稳定性。

同时,阿里云微服务引擎(MSE)也能给您带来全生命周期的、全方位的微服务治理、流量防护能力,保障您的线上稳定性,提升开发、运维效率。

原文地址:http://www.cnblogs.com/alisystemsoftware/p/16854589.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性