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

简介: 在微服务治理架构中,MSE 全链路灰度提供了虚拟泳道能力,极大的方便了测试、发布时的快速验证,能够帮助 Devops 同学减少保障半径、提升线上稳定性。同时,阿里云微服务引擎(MSE)也能给您带来全生命周期的、全方位的微服务治理、流量防护能力,保障您的线上稳定性,提升开发、运维效率。

作者:卜比


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


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


整体架构


我们以如下 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)也能给您带来全生命周期的、全方位的微服务治理、流量防护能力,保障您的线上稳定性,提升开发、运维效率。


相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
项目管理 微服务
云效常见问题之将多个微服务应用集成到一次研发流程中发布上线如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
326 0
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
33725 19
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
Cloud Native 测试技术 Nacos
云效 AppStack + 阿里云 MSE 实现应用服务全链路灰度
本文介绍了如何通过阿里云 MSE 微服务引擎和云效应用交付平台 AppStack 实现灰度发布。
91575 31
|
负载均衡 Java 测试技术
面试官:说说微服务灰度发布的底层实现?
面试官:说说微服务灰度发布的底层实现?
541 1
面试官:说说微服务灰度发布的底层实现?
|
监控 Java 持续交付
构建Java微服务架构的CI/CD流程
构建Java微服务架构的CI/CD流程
|
Java Devops Serverless
微服务持续交付入门:云效+SAE部署贪吃蛇小游戏
本场景介绍如何使用云效和Serverless应用引擎(SAE)快速部署一个贪吃蛇小游戏。
|
Web App开发 Cloud Native 数据安全/隐私保护
基于云原生网关实现微服务的多版本线上灰度
一起体验云原生网关开箱即用的微服务多样灰度能力,支持容器服务、Nacos、ZooKeeper、Edas等多种服务发现方式。
|
Kubernetes Cloud Native Serverless
基于MSE实现微服务的全链路灰度
本场景提供MSE Ingress网关集群和Kubernates集群,部署Demo服务。您将掌握支持Spring Cloud/Dubbo、云原生网关的全链路灰度方案。
|
Kubernetes Cloud Native Dubbo
直播带练丨低门槛体验微服务全链路灰度
直播带练丨低门槛体验微服务全链路灰度
直播带练丨低门槛体验微服务全链路灰度