AIGC 应用、数据分析等企业 10+ 热门专题课,就在极客时间企业版>>> 了解详情
写点什么

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

  • 2020-08-15
  • 本文字数:2510 字

    阅读完需:约 8 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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


相关文章推荐:


前言

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


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

金丝雀发布配置

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



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



在选择好要进行发布的新版本应用部署包后,接下来进行发布策略的配置。这里分为两个部分:


  • 第一部分可以对发布批次进行设置,例如设置发布灰度批次,首批进行灰度的 pod 实例个数,分批间处理方式等;

  • 第二部分可以对流量灰度规则进行配置,我们可以选择按流量内容进行灰度或者简单地按照流量比例进行灰度,下面将详细介绍这两种发布策略配置。

设置发布策略

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


  • 首批灰度数量 :在点击发布后,会首先将首批灰度数量个数的实例进行新版本的发布,为了保证应用的稳定性,首批灰度的实例数不能超过应用实例总数的 50%。比如当前实例数是 7 台,那么最多只能选择 3 台作为首批灰度的实例;

  • 剩余批次 :首批灰度发布完成后,剩余的应用实例将按照此处指定的批次发布完成;

  • 分批间处理方式 :剩余批次间的处理方式可选择手动或者自动,若选择自动,则剩余的几个批次将在前一批发布完成后进行自动发布,自动发布的批次间隔也可进行配置,例如配置每批次在发布完成后,30 分钟后自动进行下一批次的发布;

  • 批次内部署间隔 :每一批次内,如果此批次内要发布的应用实例数大于 1,则要进行此配置指定批次内实例部署间隔。


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


设置灰度规则

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



(图 1)



(图 2)

1)按请求内容进行灰度

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


  • 协议类型 :可选择 Spring Cloud 和 Dubbo,这里我们主要介绍 Spring Cloud 协议。在 Spring Cloud 协议下需要对 HTTP 请求路径进行配置;

  • 条件模式 :针对下面配置的的条件列表,可配置条件模式为: 同时满足下列条件和满足下列任一条件, 符合条件模式的请求将作为灰度流量;

  • 条件列表 :Spring Cloud 协议下可分别对 Cookie、Header 和 Parameter 3 种请求内容进行条件配置。


2)按比例进行灰度

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


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

配置好发布配置后,即可开始进行灰度发布,EDAS 将先在指定的灰度分组中部署新版本应用,可在进入 变更详情页面 查看部署进度和状态。如果在灰度发布时,发现新版本有问题,还可以终止变更并对应用进行回滚。


在灰度的发布过程中,可对应用进行监控,以监控灰度流量是否符合预期,同时可以对应用状态进行新老版本的对比。在当前批次的灰度流量验证完成后,在变更详情页面单击开始下一批,完成后续分批发布。如果在验证过程中,发现新版本应用有问题,可以在变更详情页面右上角单击立即回滚。在弹出的立即回滚对话框确认回滚的影响,然后单击回滚。


关于如何监控灰度流量,可以参考EDAS文档《监控灰度流量》



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


结语及其后续

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


本文转载自公众号阿里巴巴云原生(ID:Alicloudnative)。


原文链接


https://mp.weixin.qq.com/s/cufkSeQRl8bpPFRwYy4xYA


2020-08-15 10:032847

评论

发布
暂无评论
发现更多内容

趣味科普丨一文读懂云服务器的那些事儿

华为云开发者联盟

镜像 服务器 服务

数据湖探索DLI新功能:基于openLooKeng的交互式分析

华为云开发者联盟

数据 处理

Go语言内存管理三部曲(三)图解GC算法和垃圾回收原理

网管

内存管理 垃圾回收 GC GC算法 Go 语言

vivo 商城前端架构升级—前后端分离篇

vivo互联网技术

Java 大前端 前后端分离

AI让远程交流“更清晰”:GAN消除视频通话中的抖动

千万不要往 Shell 里粘贴命令!

大道至简

命令行

机器学习是什么?

马同学

学习

ArCall功能介绍手册

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

学习总结

饺子

Flink窗口算子-6-8

小知识点

scala 大数据 flink

年纪轻轻怎么就卵巢早衰了?试管可帮忙!

Geek_65d32f

试管 三代试管

typora增强-mac

老菜鸟

Typora

自动化测试框架类型,你知道几种?此处介绍5种比较常见的

软测小生

软件测试 自动化测试框架 软件自动化测试

架构师训练营 1 期 -- 第五周作业

曾彪彪

极客大学架构师训练营

解析 CloudQuery 审计分析功能

BinTools图尔兹

数据库 sql 安全 工具软件

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

哈喽沃德先生

数据库 nosql 非关系型数据库

iOS性能优化 — 一、crash监控及防崩溃处理

iOSer

性能优化 ios开发 Crash 监控及防崩溃处理

架构必修:领域边界划分方法--职责驱动设计(RDD)

马迪奥

架构 领域 架构师 RDD

mPaaS x Menxlab | 1024程序员节:Talk is cheap,Show me the AppID

蚂蚁集团移动开发平台 mPaaS

程序员 开发者 mPaaS 1024

攻克金融系统开发难点,借助SpreadJS实现在线导入Excel自定义报表

葡萄城技术团队

SpreadJS 在线导入excel

架构训练营第一周学习小结

李日盛

JavaScript 类型 — 重学 JavaScript

三钻

Java 大前端

架构师训练营第五周学习总结

尹斌

DDIA 读书笔记(2)数据模型的存储与检索

莫黎

读书笔记

GitLab用户切换引发的某程序员“暴动”,怒而开源项目源码

小Q

Java git 学习 开发 代码仓库

甲方日常 35

句子

工作 随笔杂谈 日常

Microsoft Azure机器学习采用NVIDIA AI为Word编辑器提供语法建议

LeetCode题解:98. 验证二叉搜索树,递归中序遍历过程中判断,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

二十、深入Python迭代器和生成器

刘润森

Python

数据结构与算法系列之链表操作全集(一)(GO)

书旅

数据结构 数据结构和算法 Go 语言

吃透阿里大佬整理的Java面试要点手册,成功五面进阿里(二本学历)

Java架构追梦

Java 学习 架构 面试 核心知识点整理

SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)_服务革新_白寂_InfoQ精选文章