写点什么

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

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

    阅读完需:约 8 分钟

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

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


相关文章推荐:


前言

在新版本上线时,无论是从产品稳定性还是用户对新版本的接受程度上考虑,直接将老应用升级到新版本应用都有很大风险的。我们一般的做法是,保证新老版本同时在线,并且先将少部分流量切换到新版本应用上,同时在此期间对新版本的应用请求进行观察。在确认新版本没有问题后,再逐步将更大比例的流量切换到新版本上。这个过程的核心是可以对流量的流入转发规则进行配置,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:032896

评论

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

数字货币视域下的金融安全实现路径

CECBC

区块链 数字货币

致谢!华为全联接2020精彩回顾

华为云开发者联盟

华为 华为云 智能 hdc

jdk 源码系列之StringBuilder、StringBuffer

sinsy

Java jdk 源码解析

持续引领大数据行业发展,腾讯云发布全链路数据开发平台WeData

腾讯云大数据

大数据

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

区块链带来的技术创新和变革

CECBC

区块链技术 经济

揭开500亿“区块链”骗局

CECBC

法律 传销

架构师训练营第三周作业

文智

极客大学架构师训练营

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】

编程道与术

Java 编程 架构 软件开发 软件架构

原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA

编程道与术

Java hibernate Spring C Data jpa

原创 | 正确区分属性和字段

编程道与术

Java hibernate 编程 软件开发 jpa

手把手教你:将 ClickHouse 集群迁至云上

腾讯云大数据

大数据 Clickhouse

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

架构师第一期作业(第三周)

Cheer

作业

第二周-学习总结-框架设计原则

莫森

极客大学架构师训练营

第二周-命题作业

莫森

极客大学架构师训练营

LeetCode题解:641. 设计循环双端队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

一次注定失败的裸面

escray

ruby 程序员 面试 面经

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者联盟

数据库 数据 gauss db

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者联盟

git 华为 管理 代码

原创 | 使用JPA实现DDD持久化-JPA vs MyBatis

编程道与术

Java hibernate 编程 mybatis jpa

用go语言实现快排

Sean

算法 快速排序 Go 语言

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

打造一个全功能的浏览器

Daniel

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

邓昀垚

极客大学架构师训练营

腾讯云大数据发布最新产品矩阵,助力企业整合打通海量数据

腾讯云大数据

大数据

Greenplum 性能优化之路 --(一)分区表

腾讯云大数据

大数据

原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)

编程道与术

Java hibernate DDD JDBC jpa

腾讯云副总裁刘煜宏:大数据平台算力弹性资源池达500万核,国内最强

腾讯云大数据

大数据

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