通过云效 CI/CD 实现微服务全链路灰度
创始人
2024-04-03 13:08:43
0

作者:卜比

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

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

整体架构

我们以如下 Demo 为例:

在这里插入图片描述

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

在这里插入图片描述

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

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

部署应用&创建泳道

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

部署文档:

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

配置云效流水线

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

流水线源

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

在这里插入图片描述

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

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

构建阶段配置

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

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

在这里插入图片描述
在这里插入图片描述

配置参数如下:

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

配置好后,添加即可。

部署 gray 阶段配置

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

在这里插入图片描述

配置参数如下:

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

部署线上阶段配置

在这里插入图片描述

类似上一阶段的配置:

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

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

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

在这里插入图片描述

流水线运行

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

在这里插入图片描述

打包构建

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

运行成功效果如下:

在这里插入图片描述

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

在这里插入图片描述

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

部署 gray 并验证

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

部署线上

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

总结

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

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

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...