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

简介: 在发布过程中,为了产品整体稳定性,我们总是希望能够用小部分特定流量来验证下新版本应用是否能正常工作。即使新版本有问题,也能及时发现,控制影响面,保障了整体的稳定性。

整体架构

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



相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
5月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
624 1
|
弹性计算 监控 JavaScript
云效Flow:打造高效、稳定的CI/CD流程实战指南
【10月更文挑战第7天】本文介绍了“云效Flow”这一CI/CD工具,通过实际案例展示了其在Node.js项目中的应用,包括自动化构建、测试及部署流程。云效Flow支持多种开发语言与框架,集成第三方服务,提供详尽的新手引导,简化了CI/CD流程的搭建,提升了开发效率与软件质量,特别适合初创团队和大型企业使用。
562 4
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
监控 数据可视化 Devops
DevOps的心脏:持续集成与持续部署(CI/CD)的实践之道
在软件开发的快节奏竞赛中,DevOps作为提升交付速度和软件质量的关键战略,其核心组成部分——持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)——已经成为现代企业追求敏捷性和竞争力的标配。本篇文章将深入探讨如何有效实施CI/CD,通过实际案例分析、统计数据支持以及最佳实践指南,为读者呈现一个全景式的CI/CD实践路径。
548 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是现代软件开发不可或缺的一环。
|
Devops jenkins Shell
DevOps实践:持续集成与持续部署(CI/CD)的探索之旅
【9月更文挑战第3天】在软件开发的世界里,DevOps已经成为了提升效率、加速产品迭代的关键。本文将深入浅出地探讨DevOps文化中的核心实践——持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD),并展示如何通过实际操作来优化开发流程。我们将一起踏上这段旅程,解锁自动化的魅力,让代码更流畅地转化为价值。
|
弹性计算 缓存 Linux
私网环境下使用云效流水线进行 CI/CD的方法
云效流水线可以托管用户的私网环境内的机器,并将构建任务调度到这些机器上,从而确保整个构建过程,和代码库和制品库的交互在私网环境下进行。
47059 18
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
监控 Devops jenkins
DevOps实践:持续集成与持续部署(CI/CD)的实现
【8月更文挑战第28天】本文将深入探讨DevOps文化的核心组成部分——持续集成(CI)和持续部署(CD)。通过实际案例,我们将学习如何利用工具和策略来自动化软件开发流程,提高效率,确保代码质量和快速迭代。你将了解从零开始构建CI/CD流程的具体步骤,以及如何克服常见障碍。