通过云效 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实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
8月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
945 2
|
弹性计算 监控 JavaScript
云效Flow:打造高效、稳定的CI/CD流程实战指南
【10月更文挑战第7天】本文介绍了“云效Flow”这一CI/CD工具,通过实际案例展示了其在Node.js项目中的应用,包括自动化构建、测试及部署流程。云效Flow支持多种开发语言与框架,集成第三方服务,提供详尽的新手引导,简化了CI/CD流程的搭建,提升了开发效率与软件质量,特别适合初创团队和大型企业使用。
743 4
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
33892 19
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
监控 数据可视化 Devops
DevOps的心脏:持续集成与持续部署(CI/CD)的实践之道
在软件开发的快节奏竞赛中,DevOps作为提升交付速度和软件质量的关键战略,其核心组成部分——持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)——已经成为现代企业追求敏捷性和竞争力的标配。本篇文章将深入探讨如何有效实施CI/CD,通过实际案例分析、统计数据支持以及最佳实践指南,为读者呈现一个全景式的CI/CD实践路径。
608 57
|
Devops jenkins 测试技术
DevOps实践:持续集成与持续部署(CI/CD)的实现之路
【9月更文挑战第33天】在软件开发的海洋中,DevOps是一艘能够加速航行、提升航程质量的巨轮。本文将作为你的航海图,指引你理解并实现DevOps文化中的核心环节——持续集成(CI)与持续部署(CD)。我们将从基础概念出发,逐步深入到实际操作,带你领略代码到部署的全过程。准备好扬帆起航,让我们共同探索如何通过自动化工具和流程优化,让软件交付变得既高效又可靠。
|
监控 Devops 测试技术
DevOps实践: 持续集成和持续部署(CI/CD)的入门指南
【9月更文挑战第10天】在快速迭代的软件开发世界中,DevOps已经成为加速产品交付、提升软件质量和团队协作的关键策略。本文将深入浅出地介绍DevOps的核心组成部分——持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)的基本概念、实施步骤以及它们如何革新传统的软件开发流程。你将学习到如何通过自动化工具简化开发流程,并理解为什么CI/CD是现代软件开发不可或缺的一环。
|
弹性计算 缓存 Linux
私网环境下使用云效流水线进行 CI/CD的方法
云效流水线可以托管用户的私网环境内的机器,并将构建任务调度到这些机器上,从而确保整个构建过程,和代码库和制品库的交互在私网环境下进行。
47169 18
|
Devops jenkins Shell
DevOps实践:持续集成与持续部署(CI/CD)的探索之旅
【9月更文挑战第3天】在软件开发的世界里,DevOps已经成为了提升效率、加速产品迭代的关键。本文将深入浅出地探讨DevOps文化中的核心实践——持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD),并展示如何通过实际操作来优化开发流程。我们将一起踏上这段旅程,解锁自动化的魅力,让代码更流畅地转化为价值。
|
监控 Devops jenkins
DevOps实践:持续集成与持续部署(CI/CD)的实现
【8月更文挑战第28天】本文将深入探讨DevOps文化的核心组成部分——持续集成(CI)和持续部署(CD)。通过实际案例,我们将学习如何利用工具和策略来自动化软件开发流程,提高效率,确保代码质量和快速迭代。你将了解从零开始构建CI/CD流程的具体步骤,以及如何克服常见障碍。