SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
性能测试 PTS,5000VUM额度
简介: 前三篇我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。

前言

前三篇我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。

第一篇:《SpringCloud 应用在 Kubernetes 上的最佳实践 — 开发篇》
第二篇:《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》
第三篇:《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)》

在新版本上线时,无论是从产品稳定性还是用户对新版本的接收程度上考虑,直接将老应用升级到新版本应用都有很大风险的。我们一般的做法是,保证新老版本同时在线,并且先将少部分流量切换到新版本应用上,同时在此期间对新版本的应用请求进行观察。在确认新版本没有问题后,再逐步将更大比例的流量切换到新版本上。这个过程的核心是可以对流量的流入转发规则进行配置,EDAS的金丝雀发布能力,提供了多个版本同时在线的能力,并且能提供了灵活的配置规则来给不同的版本进行流量分配。

部署在EDAS Kubernetes 集群中的 Spring Cloud 微服务应用,在新版本发布的时候可以使用金丝雀发布进行小规模验证,验证通过后再全量升级。

金丝雀发布配置

首先,进入EDAS的应用部署页面,对我们要进行部署升级的应用进行发布,在这里我们选择金丝雀(灰度)发布。需要注意的是,对灰度发布的流量控制,当前只对非入口应用的Dubbo和Spring Cloud应用生效。所谓入口应用,即承接外部流量的第一个应用节点。并且若您的应用使用了HPA、Rancher、Istio、或者依赖Deployment.Metadata.Name或 Deployment.Metadata.Uid的功能与配置等K8s原生功能或配置时,请勿使用灰度发布或分批发布。否则,应用部署之后,这些K8s原生功能或配置将出现异常。
1.png

在发布页面,可以选择通过上传JAR包或者填入JAR包地址的方式选择要进行发布的新版本应用部署包。
2.png

在选择好要进行发布的新版本应用部署包后,接下来进行发布策略的配置。这里分为两个部分,第一部分可以对发布批次进行设置,例如设置发布灰度批次,首批进行灰度的pod实例个数,分批间处理方式等。第二部分可以对流量灰度规则进行配置,我们可以选择按流量内容进行灰度或者简单地按照流量比例进行灰度。下面详细介绍这两种发布策略配置。

设置发布策略

在批次发布这里我们可以进行的配置有:

  • 首批灰度数量:在点击发布后,会首先将首批灰度数量个数的实例进行新版本的发布。为了保证应用的稳定性,首批灰度的实例数不能超过应用实例总数的50%。比如当前实例数是7台,那么最多只能选择3台作为首批灰度的实例;
  • 剩余批次:首批灰度发布完成后,剩余的应用实例将按照此处指定的批次发布完成;
  • 分批间处理方式:剩余批次间的处理方式可选择手动或者自动,若选择自动,则剩余的几个批次将在前一批发布完成后进行自动发布,自动发布的批次间隔也可进行配置,例如配置每批次在发布完成后,30分钟后自动进行下一批次的发布;
  • 批次内部署间隔:每一批次内,如果此批次内要发布的应用实例数大于 1,则要进行此配置指定批次内实例部署间隔。


在下面的例子中,我们现在有7个pod应用实例,选择首批对2个实例进行灰度升级。在首批2个实例的灰度发布完成后,将剩下的5个实例分3个批次进行发布。这3个批次的批次间处理方式选择自动发布,在当前批次发布完成后30分钟后自动进行下一批次的发布。同时,由于第2批次和第2批次内实例个数为两台,因此选择批次内两台实例部署间隔为60秒。在发布页面右侧可以对我们的发布策略配置信息进行预览。

3.png

设置灰度规则

目前支持按内容灰度按比例灰度两种方式设置灰度规则。按请求内容进行灰度支持将请求内容符合指定灰度规则条件的流量作为灰度流量,进入到灰度实例中,例如,选择用户ID模100小于等于40的流量作为灰度流量进入灰度实例进行处理,而用户ID模100大于40的仍然进入非灰度实例进行处理,如图1所示。而按流量比例进行灰度是指,将制定比例的请求流量作为灰度流量进入灰度实例进行处理,例如指定40%的流量作为灰度流量,如图2所示。

4.png5.png

按请求内容进行灰度

按请求内容进行灰度可以进行下面指定参数的配置,来决定有哪些请求内容特征的流量将作为灰度流量进入灰度实例中。

  • 协议类型:可选择Spring Cloud和Dubbo,这里我们主要介绍Spring Cloud协议。在Spring Cloud协议下需要对HTTP请求路径进行配置;
  • 条件模式:针对下面配置的的条件列表,可配置条件模式为:同时满足下列条件满足下列任一条件。符合条件模式的请求将作为灰度流量;
  • 条件列表:Spring Cloud协议下可分别对 Cookie、Header 和 Parameter 3 种请求内容进行条件配置;

6.png

按比例进行灰度

按比例灰度即设置流量比例,然后请求流量会按配置的比例被转发到当前的灰度分组中进行处理。7.png

灰度发布并验证新版本应用是否符合预期

配置好发布配置后,即可开始进行灰度发布,EDAS 将先在指定的灰度分组中部署新版本应用,可在进入变更详情页面查看部署进度和状态。如果在灰度发布时,发现新版本有问题,还可以终止变更并对应用进行回滚。
在灰度的发布过程中,可对应用进行监控,以监控灰度流量是否符合预期,同时可以对应用状态进行新老版本的对比。在当前批次的灰度流量验证完成后,在变更详情页面单击开始下一批,完成后续分批发布。如果在验证过程中,发现新版本应用有问题,可以在变更详情页面右上角单击立即回滚。在弹出的立即回滚对话框确认回滚的影响,然后单击回滚。
关于如何监控灰度流量,可以参考EDAS文档《监控灰度流量》
8.png

灰度发布后,在基本信息页面查看部署包是否为新部署的应用版本。在实例部署信息页面查看应用实例的运行状态是否为运行正常。

9.png

结语及其后续

本章我们介绍了如何对EDAS Kubernetes集群上的Spring Cloud应用进行灰度发布,在灰度发布过程中,我们可以灵活地配置发布策略、灰度规则以及在发布过程中对流量及应用状态进行监控,并且提供了终止回滚等操作,最大程度地保证应用能够平滑地进行版本升级。接下来的文章中,我们将详细介绍在发布过程中如何对应用进行监控。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
48 3
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
43 2
|
18天前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
2月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
3月前
|
Kubernetes 安全 数据安全/隐私保护
Kubernetes 安全性最佳实践
【8月更文第29天】随着容器化和微服务架构的普及,Kubernetes 已成为管理容器化应用的标准平台。然而,随着 Kubernetes 的广泛采用,其安全性问题也日益受到关注。本文将深入探讨 Kubernetes 的安全最佳实践,并通过具体的代码示例来展示如何保护 Kubernetes 集群免受攻击。
127 2
|
3月前
|
Kubernetes jenkins 持续交付
Kubernetes CI/CD 集成:持续交付的最佳实践
【8月更文第29天】随着微服务架构和容器化的普及,Kubernetes 成为了运行容器化应用的事实标准。为了确保应用能够快速迭代并稳定发布,持续集成/持续部署(CI/CD)流程变得至关重要。本文将介绍如何将 Kubernetes 集成到 CI/CD 流程中,并提供一些最佳实践。
198 1
|
3月前
|
Kubernetes 持续交付 Docker
SpringCloud + K8S:容器化持续交付的强大组合
【8月更文挑战第22天】在当今快速迭代的软件开发环境中,如何高效、可靠地部署和管理微服务架构应用成为了技术团队面临的重大挑战。SpringCloud与Kubernetes(K8S)的结合,为微服务架构的容器化持续交付提供了强大的解决方案,极大地提升了应用的可扩展性、灵活性和可维护性。本文将从技术角度深入探讨这一组合的优势及其在工作学习中的实践应用。
111 3
|
3月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
3月前
|
Java Spring
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动

推荐镜像

更多