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 HeaderCookieURI)分别向这两个版本(v1v2)发送流量。选择指定流量分配 ,并拖动中间滑块来更改向这两个版本分别发送的流量比例(如设置为各 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 右侧的 ,选择接管。这代表 100% 的流量将会被发送到新版本 (v2)

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

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

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

作者简介:魔都国企技术专家兼架构,多家大厂后台研发和架构经验,负责复杂度极高业务系统的模块化、服务化、平台化研发工作。具有丰富带团队经验,深厚人才识别和培养的积累。

参考:

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
10mAh4 分钟前
【Java】HashMap 的 put 到底做了什么?——冲突、扩容与树化实测
java·开发语言·hash
我命由我1234522 分钟前
人脸识别 - 勒克斯(光线照射到物体表面上的明亮程度)
android·java·学习·java-ee·人脸识别·学习方法·android runtime
TechLee1 小时前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法
LINgZone21 小时前
系统架构与分支规范
java·数据库·架构
AC赳赳老秦1 小时前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
吃杠碰小鸡2 小时前
VsCode中开发Java项目
java·vscode
宠友信息2 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
行百里er3 小时前
加个依赖就生效?一行搞定 Spring Boot Starter 自动装配
java·后端·监控
月华路3 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法