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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 前三篇我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。

前言

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

第一篇:《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应用进行灰度发布,在灰度发布过程中,我们可以灵活地配置发布策略、灰度规则以及在发布过程中对流量及应用状态进行监控,并且提供了终止回滚等操作,最大程度地保证应用能够平滑地进行版本升级。接下来的文章中,我们将详细介绍在发布过程中如何对应用进行监控。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
41 4
|
6天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
17 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
11天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
21天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
25天前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
30天前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
61 0