写点什么

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:032797

评论

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

Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)

共饮一杯无

Java 线程 线程状态 三周年连更

行云管家堡垒机有免费的吗?谁能告诉一下!

行云管家

高新企业 堡垒机 行云管家

最佳云转码,腾讯云MPS夺得MSU编码器大赛21项第一

科技热闻

Scrum敏捷研发和项目管理

顿顿顿

Scrum 敏捷开发 敏捷开发流程 leangoo 敏捷开发管理工具

Python本地SQL文件对比工具

YUKI0506

Python 文件对比 对比工具 difflib

Kurator v0.3.0版本发布!助力企业实现多云异构管理

华为云开发者联盟

开源 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

从零学习SDK(7)如何打包SDK

MobTech袤博科技

阅读完synchronized和ReentrantLock的源码后,竟发现其完全相似

Java你猿哥

并发编程 并发 synchronized SSM框架 ReentrantLock

Linux:管道命令与文本处理三剑客(grep、sed、awk)

会踢球的程序源

Java Linux

前端沙箱利用这些特性实现代码的隔离与限制

没有用户名丶

火山引擎DataTester:让企业“无代码”也能用起来的A/B实验平台

字节跳动数据平台

AB testing实战 无代码 A/B 测试 企业号 4 月 PK 榜 企业增长

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0 (Ⅲ)

字节跳动数据平台

数据仓库 云原生 白皮书 数据仓库服务 企业号 4 月 PK 榜

火山引擎 DataLeap下Notebook系列文章一:技术选型之路

字节跳动数据平台

notebook 数据研发 企业号 4 月 PK 榜

如何用scrum敏捷工具做迭代规划及迭代执行。

顿顿顿

Scrum Sprint 敏捷开发管理工具 敏捷工具 迭代规划

集简云开放平台是什么?

集简云开放平台

什么是企业数智化的创新加速器?

用友BIP

技术大会 用友iuap 用友BIP 用友技术大会

安装Zookeeper和Kafka集群

Java你猿哥

Java kafka zookeeper SSM框架 Java工程师

BT!GitHub开源阿里Java性能调优百宝书仅3小时,标星竟超过30k

Java你猿哥

Java JVM 性能调优 SSM框架 Java工程师

硬核!万字神文精解高并发高可用系统实战,分布式系统一致性文档

做梦都在改BUG

Java 高可用 高并发 分布式一致性

华为云新一代iPaaS全域融合集成平台全新升级

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

女朋友要我讲解@Controller注解的原理,真是难为我了

Java你猿哥

Java spring Spring 配置解析

GitHub和 Gitee联合编写最新版20w字Java全栈面试手册,简直无敌!

Java你猿哥

Java java面试 SSM框架 Java面经

简单的视频格式转换器:MacX Video Converter Pro中文版

真大的脸盆

Mac Mac 软件 视频格式转换 格式转换器

全量通过,华为云GaussDB首批完成信通院全密态数据库评测

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

挑战 30 天学完 Python:Day9 条件语句

MegaQi

Python 挑战30天学完Python 三周年连更

热榜!Alibaba最新发布「10亿级并发系统设计文档」Git狂揽9000星

Java你猿哥

数据库 架构 分布式 架构设计 并发系统

GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽

Java你猿哥

架构 分布式 分布式架构

【堡垒机小知识】堡垒机能记录操作时间、操作数据等等吗?

行云管家

网络安全 堡垒机

阿里大神整理的Java核心知识点和面试官常问到的知识点,压压惊

会踢球的程序源

Java 面试 求职 java面试 Java构架

ChatGPT无需API开发连接第三方系统,让舆情自动监控

集简云开放平台

数据集成 数据集成平台 Chat

Gradio:快速构建你的webApp

AIWeker

Python 三周年连更 Gradio

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