27. 云原生流量治理之kubesphere灰度发布

云原生专栏大纲

文章目录

  • 灰度发布介绍
  • 灰度发布策略
  • KubeSphere中恢复发布策略
      • 蓝绿部署
      • 金丝雀发布
      • 流量镜像
  • 灰度发布实战
    • 部署自制应用
    • 金丝雀发布
      • 创建金丝雀发布任务
      • 测试金丝雀发布情况
    • 蓝绿部署
      • 创建蓝绿部署
      • 测试蓝绿部署情况
    • 流量镜像
      • 创建流量进行任务
      • 测试流量镜像情况
  • 灰度发布真实案例分析

灰度发布介绍

灰度发布(Gray Release)是一种软件发布策略,用于逐步将新版本的软件或功能引入到生产环境中,以减少潜在的风险和影响范围。与传统的全量发布方式相比,灰度发布可以在一小部分用户或服务器上进行测试和验证,然后逐步扩大范围,直到全部用户或服务器都使用新版本。
灰度发布的核心思想是控制发布的范围和比例,以确保新版本在生产环境中的稳定性和可靠性。它可以帮助开发团队在实际用户环境中验证新功能、修复潜在问题,并收集反馈,从而更好地掌握软件的运行情况。
以下是灰度发布的一般流程:

  1. 划分发布群体:将用户或服务器划分为不同的群体,例如按照地理位置、用户类型、用户行为等进行划分。这些群体可以是随机选择的一小部分用户,也可以是特定的服务器集群。
  2. 发布新版本:将新版本的软件或功能部署到选定的发布群体中。这可以通过部署到特定的服务器或将新功能在应用程序中启用来实现。
  3. 验证和监控:在发布群体中验证新版本的稳定性和性能。监控关键指标,包括错误率、性能指标、用户反馈等,以确保新版本的质量。
  4. 逐步扩大范围:如果新版本通过了验证,可以逐步扩大发布范围,将其应用于更多的用户或服务器。可以根据实际情况调整扩大范围的速度。
  5. 回滚和修复:如果在灰度发布过程中发现问题或负面影响,可以快速回滚到之前的版本,并修复问题。这需要有一个可靠的回滚机制和紧急修复计划。

通过灰度发布,可以降低新版本引入的风险,并在生产环境中逐步验证和改进软件。它可以提供更好的用户体验、更高的可靠性,并减少对整个系统的冲击。灰度发布通常与持续集成和持续交付(CI/CD)流程结合使用,以实现快速、可靠的软件发布和迭代。

灰度发布策略

灰度发布策略可以根据实际需求和环境来制定,以下是几种常见的灰度发布策略:

  1. 用户划分策略:将用户根据一定的规则或条件划分为不同的群体,然后逐步将新版本发布给这些群体。例如,可以按照用户ID的哈希值或随机选择一小部分用户进行初始发布,然后逐渐扩大发布范围。
  2. 地理位置策略:根据用户的地理位置将其划分为不同的群体。这对于全球性应用程序或服务特别有用。可以从一个或多个地理位置开始发布新版本,然后逐渐扩大到其他地理区域。
  3. 时间窗口策略:将发布限制在特定的时间窗口内,例如在非高峰期或低流量时间进行发布。这可以减少对系统性能的影响,并提供更好的控制和监控能力。
  4. 百分比策略:将新版本逐步引入到一小部分用户中,并逐渐增加比例。例如,开始时只发布给1%的用户,然后逐渐增加到10%,20%等,直到全部用户都在使用新版本。
  5. 功能开关策略:在代码中引入功能开关或配置项,通过控制开关或配置的状态来控制新功能的开启或关闭。这样可以在生产环境中逐渐开启新功能,以便进行测试和验证。
  6. 回滚策略:在灰度发布过程中,如果发现问题或负面影响,需要有一个可靠的回滚策略。可以快速回滚到之前的版本,并修复问题,以确保系统的稳定性。

在实施灰度发布策略时,需要结合实际情况和系统需求,选择适合的策略,并确保有足够的监控和反馈机制,以便及时发现和解决问题。灰度发布通常需要与持续集成和持续交付(CI/CD)流程结合使用,以实现自动化的发布和验证过程。

KubeSphere中恢复发布策略

蓝绿部署

蓝绿部署(Blue-Green Deployment)是一种在生产环境中进行软件发布和切换的策略,旨在实现无缝的部署和回滚过程。它通过在两个独立的环境(蓝色环境和绿色环境)中部署不同版本的应用程序来实现。
在蓝绿部署中,蓝色环境是当前正在运行的稳定版本,而绿色环境是新版本的部署目标。整个过程可以分为以下步骤:

  1. 部署蓝色环境:首先,将当前稳定版本的应用程序部署到蓝色环境中,使其对外提供服务。此时,所有的流量都会被蓝色环境处理。
  2. 部署绿色环境:在蓝色环境运行期间,将新版本的应用程序部署到绿色环境中,但不将其暴露给外部流量。这样可以在绿色环境中进行测试、验证和准备。
  3. 切换流量:当绿色环境中的新版本经过验证并准备就绪时,可以将流量逐步切换到绿色环境。这可以通过负载均衡器或代理服务器来实现,将一部分流量导向绿色环境,而将剩余的流量仍然发送到蓝色环境。
  4. 验证和监控:在切换流量后,需要仔细监控新版本在绿色环境中的性能、稳定性和用户反馈。这可以帮助发现潜在问题,并及时进行回滚或修复。
  5. 回滚和清理:如果在绿色环境中发现问题或不满意的情况,可以快速回滚到蓝色环境,恢复到之前的稳定版本。同时,还需要清理绿色环境中的部署和资源,以便下一次部署。

蓝绿部署的优势在于它提供了一种无缝切换和回滚的机制,减少了对生产环境的影响和风险。它还提供了更好的可用性和可靠性,因为在切换过程中,至少有一个环境是稳定运行的。同时,蓝绿部署也为持续交付和持续集成流程提供了支持,使团队能够更快地交付新功能和修复。
需要注意的是,蓝绿部署可能需要额外的资源和成本来维护两个独立的环境,并需要谨慎规划和管理切换过程,以确保顺利和可靠的发布。

金丝雀发布

金丝雀发布(Canary Release)是一种用于软件部署和测试的策略,旨在逐步引入新版本的功能和变化,以减少潜在的风险。金丝雀发布通过将新版本的应用程序或功能逐步引入到一小部分用户或流量中,以便测试和验证其性能、稳定性和用户反馈。
以下是金丝雀发布的一般步骤:

  1. 确定目标:首先,需要明确金丝雀发布的目标和指标。例如,可以选择一小部分用户、特定地理区域或特定的功能使用者作为目标。
  2. 创建金丝雀环境:在金丝雀发布中,需要创建一个独立的环境来承载新版本的应用程序或功能。这个环境可以是一个独立的服务器、容器或命名空间。
  3. 部署新版本:将新版本的应用程序或功能部署到金丝雀环境中。这个版本可能包含一些新的功能、修复或其他变化。
  4. 引入流量:逐步将一小部分流量或用户导向金丝雀环境。可以使用负载均衡器、代理服务器或路由规则来控制流量的分发。
  5. 监控和验证:在金丝雀环境中,需要仔细监控新版本的性能、稳定性和用户反馈。这可以通过日志、指标、异常报告等方式进行。
  6. 逐步增加流量:如果新版本在金丝雀环境中表现良好,可以逐步增加流量或用户比例,将更多的流量导向金丝雀环境。
  7. 回滚或推进:根据监控和验证的结果,可以选择回滚到之前的版本或继续推进新版本的发布。如果发现问题或不满意的情况,及时回滚可以减少对用户的影响。

金丝雀发布的优势在于它提供了一种渐进式的发布和验证机制,可以在较小的范围内测试新版本,减少潜在的风险和影响。它还可以帮助团队更快地获取用户反馈,并根据反馈进行调整和改进。
需要注意的是,金丝雀发布需要有良好的监控和反馈机制,以便及时发现问题并采取相应的措施。同时,也需要考虑金丝雀环境的资源和成本,以及逐步增加流量的策略和时间表。

流量镜像

流量镜像(Traffic Mirroring)是一种网络流量管理技术,它允许将网络流量从一个网络设备镜像到另一个设备或系统进行监控、分析或其他目的。通过流量镜像,可以实时复制网络流量并将其传送到指定的目标位置,而不会中断原始流量的正常传输。
流量镜像通常在网络设备(如交换机、路由器、防火墙)上进行配置。以下是流量镜像的一般工作流程:

  1. 选择源和目标:首先,需要选择要镜像的源设备和要将镜像流量发送到的目标设备或系统。源设备通常是网络中的某个交换机或路由器,而目标设备可以是监控系统、网络分析工具或其他需要分析流量的系统。
  2. 配置镜像策略:在源设备上配置镜像策略,以指定要镜像的流量类型和目标设备。可以选择镜像特定的端口、协议、IP地址范围或其他标识符来过滤要镜像的流量。
  3. 镜像流量传输:源设备根据配置的镜像策略,将匹配的流量复制到指定的目标设备或系统。这通常通过将镜像流量封装在专用的镜像数据包中,并通过网络传输到目标设备。
  4. 流量分析和监控:在目标设备或系统上,可以对镜像流量进行分析、监控或其他操作。这可以包括网络流量分析、安全审计、故障排除或性能优化等。

流量镜像的优势在于它提供了一种非侵入性的方式来监控和分析网络流量,而不会影响原始流量的传输和性能。它可以帮助网络管理员和安全团队实时监控网络流量,检测异常活动、网络攻击或其他问题。同时,流量镜像也对网络故障排除和性能优化提供了有价值的数据。
需要注意的是,流量镜像可能会对网络设备和系统的性能产生一定的影响,因此在配置和使用时需要谨慎考虑。此外,合规性和隐私问题也需要在使用流量镜像时加以注意,并确保符合适用的法律和规定。

常见用例包括:

  • 测试新的应用版本。您可以对比镜像流量和生产流量的实时输出。
  • 测试集群。您可以将实例的生产流量用于集群测试。
  • 测试数据库。您可以使用空数据库来存储和加载数据。

灰度发布实战

需安安装servicemesh组件,参考《16.云原生之kubesphere组件安装卸载》

部署自制应用

  1. 部署示例项目

image.png

  1. 开启服务治理

image.png

  1. 服务暴露配置

image.png
image.png
配置hostimage.png


image.png

  1. 查看部署情况

image.png

  1. 访问页面测试

image.png

金丝雀发布

创建金丝雀发布任务

  1. 创建灰度发布任务入口

image.png
image.png

  1. 创建任务review-v2版本任务

image.png

  1. 选择review下一步

image.png

  1. 选择review灰度发布使用的镜像版本

image.png

  1. 调整流量

image.png
调整请求参数可以更精确匹配
image.png

  1. 查看创建情况

image.png

测试金丝雀发布情况

  1. 浏览器中访问测试

image.png
image.png

  1. 模拟请求不断访问,测试流量比例
watch -n 1 curl http://productpage.base.192.168.31.11.nip.io/productpage?u=normal

image.png
点击进入查看详情
image.png

注意:这儿这个流量比例不一定完全精确,可以通过折线图看基本一致

  1. 新版本接管

当新版没有问题,能接管老版本时,需设置新版本接管(或流量调到100%),如下
image.png

  1. 删除发布任务

新版本 接管后,删除金丝雀发布任务,即可删除老版本
image.png

蓝绿部署

创建蓝绿部署

创建步骤跟金丝雀发布类似,下述截关键的图

  1. 选择服务

image.png

  1. 将版本修改回v1

image.png

image.png

  1. 查看创建情况

image.png

测试蓝绿部署情况

image.png
v1接管v2,查看下图转折点
image.png

流量镜像

创建流量进行任务

创建步骤跟金丝雀发布类似,下述截关键的图

  1. 选择服务

image.png

  1. 流量镜像一般需要和正式环境版本保持一致,最大还原生产环境

注意:这儿测试选v2版本,访问测试看是否会返回v2版本页面

image.png
image.png

测试流量镜像情况

watch -n 1 curl http://productpage.base.192.168.31.11.nip.io/productpage?u=normal

测试无v2版本页面数据返回
image.png

灰度发布真实案例分析

l 背景描述:xx公司充电桩系统,接入三方公司充电桩,用户充电三方公司会将相关数据回调传输到xx公司充电桩系统。充电桩系统升级存在问题:

  1. 三方公司回调只接入到了xx公司生产环境
  2. 升级后路测需去现场,并需三方充电桩IOT公司接入
  3. 升级后代码,需发布到生产环境,影响较大

为减小对线上的影响,需采用蓝灰度发布。

l 传统做法:使用openresty、lua,对请求进行拦截判断,判断请求是否携带目标充电桩id和用户id,若满足打到目标环境。

l 传统做法和kubesphere中金丝雀发布对比:

  1. 传统做法将修改代码还是发布到了生产环境,只是通过判断,判断是否走修改逻辑
  2. kubesphere中金丝雀发布,将新版本代码另外发布了一个服务,不会影响原来服务,通过服务治理组件(边车)istio来判断请求中的参数,进行流量控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS ARKit】3D 人体姿态估计

与基于屏幕空间的 2D人体姿态估计不同,3D人体姿态估计是尝试还原人体在三维世界中的形状与姿态,包括深度信息。绝大多数的现有3D人体姿态估计方法依赖2D人体姿态估计,通过获取 2D人体姿态后再构建神经网络算法,实现从 2D 到 3D人体…

APK签名 v1、 v2、v3、v3.1、v4 解析

在 Android 应用签名中,V1 V2 V3 V4签名是不同的签名方案,具体描述如下: V1 签名(JAR 签名):早期 Android 应用签名的基本形式,基于 Java 签名(JAR 签名)规范。它将应用…

<Linux> 进程信号

目录 一、信号概念 二、信号的作用 三、信号的特性 四、信号捕捉初识 五、信号产生 (一)通过终端按键产生信号 (二)硬件中断 (三)系统调用产生信号 1. kill 函数 2. raise 函数 3. abort 函数 …

Redis核心技术与实战【学习笔记】 - 22.浅谈Redis的ACID相关知识

概述 事务是数据库的一个重要功能。所谓的事务,就是指对数据进行读写的一系列操作。事务在执行时,会提供专门的属性保证,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isol…

sentinel的Context创建流程分析

sentinel入门 功能 限流:通过限制请求速率、并发数或者用户数量来控制系统的流量,防止系统因为流量过大而崩溃或无响应的情况发生。 熔断:在系统出现故障或异常时将故障节点从系统中断开,从而保证系统的可用性。 降级&#xf…

性能测试工具架构

背景 性能测试工具(LoadRunner为例) 性能测试工具通常是指那些用来支持压力、负载测试,能够录制和生成脚本、设置和部署场景、产生并发用户和向系统施加持续压力的工具。 性能测试工具录制的是服务端与应用之间的通信数据,而不是…

【Spring】自定义注解 + AOP 记录用户的使用日志

目录 ​编辑 自定义注解 AOP 记录用户的使用日志 使用背景 落地实践 一:自定义注解 二:切面配置 三:Api层使用 使用效果 自定义注解 AOP 记录用户的使用日志 使用背景 (1)在学校项目中,安防平台…

【RT-DETR有效改进】 DySample一种超级轻量的动态上采样算子(上采样中的No.1)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、 本文介绍 本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具…

整理:汉诺塔简析

大体上,要解决一个汉诺塔问题,就需要解决两个更简单的汉诺塔问题 以盘子数量 3 的汉诺塔问题为例 要将 3 个盘子从 A 移动到 C,就要: 将两个盘子从 A 移动到 B(子问题 1) 为了解决子问题 1,就…

clickhouse在MES中的应用-跟踪扫描

开发的MES,往往都要做生产执行跟踪扫描,这样会产生大量的扫描数据,用关系型数据库,很容易造成查询冲突的问题。 生产跟踪扫描就发生的密度是非常高的,每个零部件的加工过程,都要被记录下来,特别…

鲲鹏--垂直生态领导者

这是ren_dong的第24篇原创 1、概述 华为鲲鹏920:性能最高的ARM架构服务器芯片 鲲鹏是华为在芯片领域布局的重要一环 ,是垂直生态的领导者,鲲鹏芯片诞生于2020年 ,已获得ARMv8架构的永久授权,主要聚焦通用计算领域华为针…

typecho 在文章中添加 bilibili 视频

一、获取视频来源: 可以有2种方式来定位一个 bilibili 视频: 第一种是使用 bvid 参数定位第二种是使用 aid 参数定位 如何获取这两个参数? 首先我们可以看看 bilibili 网站中的视频页面链接其实可以分为两种: 第一种是类似&a…

建材智能工厂数字孪生可视化管控平台,推进建材行业数字化转型

建材智能工厂数字孪生可视化管控平台,推进建材行业数字化转型。随着科技的不断发展,数字化转型已经成为各行各业发展的重要趋势。在建材行业中,智能工厂和数字孪生技术的应用正在改变传统的生产模式和管理方式,为行业的数字化转型…

clr的执行模型-笔记

学习来源:《CLR via C by Jeffrey Richter 》第四版,第1章 clr的执行模型 1.C#编译生成执行程序集文件 编译文件的组成:pe32/pe32头,clr头,元数据,IL pe32/pe32头:windows标准执行文件头 cl…

DelayQueue的使用

具体思路: 在容器初始化的时候就创建出一个 延迟队列 然后项目启动后随即启动一个线程一直监听这个队列 手动调用接口往队列中添加任务 依赖 一个最简单的web的应用即可项目文件结构 第一步:在项目启动的时候就创建出一个延迟队列 Configuration publ…

小程序定制开发前,应该考虑些什么?

引言 在移动互联网时代,小程序已经成为许多企业和个人推广业务、提供服务的理想平台。然而,在进行小程序定制开发之前,开发者和业务方需要细致入微地考虑一系列关键因素,以确保最终的小程序既能满足用户需求,又能够顺…

PHP入门指南:起步篇

PHP入门指南:起步篇 PHP入门指南:起步篇什么是PHP?PHP 的优点PHP 开发环境搭建选择本地服务器软件包安装PHP环境配置Web服务器和PHP测试PHP安装 第一个PHP脚本PHP基础语法标记注释变量数据类型常量条件语句循环函数 PHP入门指南:起…

Oracle Server一台价值百万的服务器内存更换过程

数据库代码敲多了,看乏了吧! 带各位DBA看看你们的数据库运行在什么样的硬件上。 1、故障现象 事发时2号位置报警 登录ILO发现内存报警 查看详细信息 查看详细报警 2、关于ORACLE 服务器DIMM 备用 默认情况下在 Oracle ILOM 中启用 DIMM 备用。由 DIMM 提…

[linux] kolla-ansible 部署的openstack 修改mariadb默认端口号

kolla-ansible 部署前修改global.yml #freezer_database_backend: "mariadb" database_port: 9306 mariadb_port: 9306如果已经部署成功,直接修改配置文件里的端口号重启是没有用的,怀疑内部做了缓存,查看openstack 使用的memcach…

yarn/npm certificate has expired

目录 报错 原因:HTTPS 证书验证失败 方法 a.检查网络安全软件:可能会拦截或修改 HTTPS 流量 b.strict-ssl:false关闭验证【临时方法】 报错 info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLS…