通过云效CI/CD实现微服务全链路灰度

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 在发布过程中,为了产品整体稳定性,我们总是希望能够用小部分特定流量来验证下新版本应用是否能正常工作。即使新版本有问题,也能及时发现,控制影响面,保障了整体的稳定性。

整体架构

image.png

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

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


部署应用&创建泳道


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

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

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

image.png

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

image.png

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



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

image.png


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

image.png

配置云效流水线

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

流水线源

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

image.png

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

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

构建阶段配置

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

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

image.png

image.png

配置参数如下:

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

配置好后,添加即可。


部署gray阶段配置

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

image.png

配置参数如下:

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


部署线上阶段配置

类似上一阶段的配置:

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

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

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

image.png


流水线运行


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

image.png


打包构建

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

运行成功效果如下:

image.png

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

image.png

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


部署gray并验证

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

image.png

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

image.png

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

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

image.png

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

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

image.png

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

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

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


部署线上

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

image.png

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

image.png

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

image.png

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

总结

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

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



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
5月前
|
项目管理 微服务
云效常见问题之将多个微服务应用集成到一次研发流程中发布上线如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
103 0
|
10天前
|
弹性计算 监控 JavaScript
云效Flow:打造高效、稳定的CI/CD流程实战指南
【10月更文挑战第7天】本文介绍了“云效Flow”这一CI/CD工具,通过实际案例展示了其在Node.js项目中的应用,包括自动化构建、测试及部署流程。云效Flow支持多种开发语言与框架,集成第三方服务,提供详尽的新手引导,简化了CI/CD流程的搭建,提升了开发效率与软件质量,特别适合初创团队和大型企业使用。
41 4
|
3月前
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
30846 18
|
2月前
|
弹性计算 监控 JavaScript
【颠覆传统!】云效Flow——让你的CI/CD流程如虎添翼,轻松驾驭高效稳定的自动化部署之旅!
【8月更文挑战第8天】现代软件开发中,持续集成(CI)与持续部署(CD)至关重要。我最近使用了“云效Flow”,一款专为高效稳定的CI/CD流程设计的工具。它支持多种语言与框架,并易于集成第三方服务。只需注册并创建项目,平台便提供新手引导。以Node.js项目为例,代码托管在GitHub上后,在云效Flow中设置流水线,通过YAML自定义构建与测试步骤。代码提交后,构建自动执行。部署环节可利用内置策略,如一键发布到阿里云ECS,并支持蓝绿部署确保平滑切换。此外,云效Flow还具备监控与告警功能。总之,云效Flow简化了CI/CD流程,提高了开发效率与软件质量,适合各种规模的团队使用。
75 2
|
3月前
|
弹性计算 缓存 Linux
私网环境下使用云效流水线进行 CI/CD的方法
云效流水线可以托管用户的私网环境内的机器,并将构建任务调度到这些机器上,从而确保整个构建过程,和代码库和制品库的交互在私网环境下进行。
46708 18
|
5月前
|
Java jenkins 测试技术
云效Flow:打造高效、稳定的CI/CD流程实战指南
云效流水线Flow评测展示新建流水线步骤,包括选择模板、添加源、Java构建、主机部署及自定义任务。通过图形界面逐项配置,如代码扫描,保存后运行流水线。虽然Flow易于上手,功能丰富,支持多环境部署,但复杂项目管理稍显繁琐,社区支持需加强。对比其他CI/CD工具,Flow在成本、功能和性能上有竞争力,适合作为团队选择。
云效Flow:打造高效、稳定的CI/CD流程实战指南
|
5月前
|
负载均衡 Java 测试技术
面试官:说说微服务灰度发布的底层实现?
面试官:说说微服务灰度发布的底层实现?
126 1
面试官:说说微服务灰度发布的底层实现?
|
5月前
|
Cloud Native 测试技术 Nacos
云效 AppStack + 阿里云 MSE 实现应用服务全链路灰度
本文介绍了如何通过阿里云 MSE 微服务引擎和云效应用交付平台 AppStack 实现灰度发布。
91185 4
|
5月前
|
Cloud Native 测试技术 Nacos
云效AppStack+阿里云MSE实现应用服务全链路灰度
在应用开发测试验证通过后、进行生产发布前,为了降低新版本发布带来的风险,期望能够先部署到灰度环境,用小部分业务流量进行全链路灰度验证,验证通过后再全量发布生产。本文主要介绍如何通过阿里云MSE 微服务引擎和云效应用交付平台AppStack 实现灰度发布。
121579 3
|
Java Devops Serverless
微服务持续交付入门:云效+SAE部署贪吃蛇小游戏
本场景介绍如何使用云效和Serverless应用引擎(SAE)快速部署一个贪吃蛇小游戏。
178 0