KubeSphere实现金丝雀发布(Canary Release)

0 前言

KubeSphere 基于 [Istio] 向用户提供金丝雀发布功能,即:

  • 引入服务的新版本,并向其发送一小部分流量来进行测试
  • 同时,旧版本负责处理其余的流量
  • 如果一切顺利,就可逐渐增加向新版本发送的流量,同时逐步停用旧版本
  • 如出现任何问题,可用 KubeSphere 更改流量比例来回滚至先前版本

该方法能高效测试服务性能和可靠性,有助在实际环境发现潜在问题,又不影响系统整体稳定性。canary-release-0

环境前提

1 创建金丝雀发布任务

登录 KubeSphere 控制台:

转到灰度发布页面,点击创建灰度发布任务:

发布模式选项卡,点击金丝雀发布右侧的创建

设置任务名称,点击下一步

服务设置选项卡,从下拉列表中选择你的应用和要实现金丝雀发布的服务。如Bookinfo系统的 reviews服务 并点击下一步

新版本设置选项卡,添加另一个版本(例如 kubesphere/examples-bookinfo-reviews-v2:1.16.2;将 v1 改为 v2)并点击下一步

可用具体比例或使用请求内容(如Http HeaderCookie 和 URI)分别向这两个版本(v1 和 v2)发送流量。选择指定流量分配,并拖动中间滑块来更改向这两个版本分别发送的流量比例(如设置为各 50%)。操作完成后,点击创建

结果:

点击进去查看,v2的资源已被创建:

到工作负载下观察:

2 验证金丝雀发布

现在有两个可用的应用版本了,访问该应用以验证金丝雀发布。

访问 Bookinfo 网站,持续刷新浏览器。会看到 Book Reviews 板块以 50% 比例在 v1 版本和 v2 版本之间切换:

相信大家一眼就看出区别了:

金丝雀发布任务创建后会显示在任务状态选项卡下:

点击该任务查看详情可看到每个版本分别收到一半流量,新的部署也已创建:

可执行以下命令直接获取虚拟服务来识别权重:

 

arduino

复制代码

kubectl -n demo-project get virtualservice -o yaml

  • 当您执行上述命令时,请将 demo-project 替换为您自己项目(即命名空间)的名称。
  • 如想在 KubeSphere 控制台使用 Web kubectl 执行命令,则需要使用 admin 帐户登录。

预期输出:

 

yaml

复制代码

... spec: hosts: - reviews http: - route: - destination: host: reviews port: number: 9080 subset: v1 weight: 50 - destination: host: reviews port: number: 9080 subset: v2 weight: 50 ...

3 查看网络拓扑

在运行 KubeSphere 的机器执行以下命令引入真实流量,每 0.5 秒模拟访问一次 Bookinfo。

 

bash

复制代码

watch -n 0.5 "curl http://productpage.demo-project.192.168.0.2.nip.io:32277/productpage?u=normal"

将命令中的主机名和端口号替换成自己环境的。

  1. 流量监控中,可看到不同服务之间的通信、依赖关系、运行状态及性能

  2. 点击组件(例如 reviews),在右侧可以看到流量监控信息,显示流量成功率持续时间的实时数据:

4 查看链路追踪详情

KubeSphere 提供基于 Jaeger 的分布式追踪功能,用来对基于微服务的分布式应用程序进行监控及故障排查。

  1. 链路追踪选项卡中,可以清楚地看到请求的所有阶段及内部调用,以及每个阶段的调用耗时。
  2. 点击任意条目,可以深入查看请求的详细信息及该请求被处理的位置(在哪个机器或者容器)。

5 接管所有流量

若一切运行顺利,则可以将所有流量引入新版本:

  1. 任务状态中,点击金丝雀发布任务

  2. 在弹出的对话框中,点击 reviews v2 右侧的 

    icon

    ,选择接管。这代表 100% 的流量将会被发送到新版本 (v2)

    如果新版本出现任何问题,可以随时回滚到之前的 v1 版本

  3. 再次访问 Bookinfo,多刷新几次浏览器,您会发现页面只会显示 reviews v2 的结果(即带有黑色星标的评级)

关注我,紧跟本系列专栏文章,咱们下篇再续!

灰度发布、蓝绿发布金丝雀发布都是软件发布中常用的策略,用于控制新版本的上线范围和风险。 1. 灰度发布(Gray Release): 灰度发布是指将新版本的功能或者代码逐步地、部分地发布给一部分用户或者服务器,以验证新版本的稳定性和可靠性。通过逐步扩大发布范围,可以及时发现和解决问题,减少对用户的影响。在灰度发布中,可以根据不同的条件(如用户ID、地域、设备类型等)来选择参与灰度发布的用户。 2. 蓝绿发布(Blue-Green Deployment): 蓝绿发布是指在生产环境中同时部署两个完全相同的环境,一个环境为蓝色环境(Blue),另一个环境为绿色环境(Green)。初始状态下,蓝色环境对外提供服务,而绿色环境处于闲置状态。当新版本准备就绪时,先将新版本部署到绿色环境中进行测试和验证。当验证通过后,将流量切换到绿色环境,使其成为主要的生产环境,而蓝色环境则成为备份环境。这样可以实现快速回滚,降低发布风险。 3. 金丝雀发布(Canary Release): 金丝雀发布是指将新版本的功能或者代码逐步地、部分地发布给一部分用户或者服务器,以验证新版本的性能和用户体验。与灰度发布不同的是,金丝雀发布更关注新版本的性能指标和用户反馈。通过逐步增加流量,可以及时监测新版本的性能表现,并根据反馈结果决定是否继续全面发布。如果出现问题,可以快速回滚或者停止发布
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值