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 发布!

相关推荐
霸道流氓气质8 分钟前
Spring 事务传播机制与 REQUIRES_NEW
java·数据库·spring
BerryS3N20 分钟前
Java 后端转型大模型:Demo 能跑不等于能上线
java·人工智能·python·java后端·spring ai·langchain4j·大模型转型
心机之蛙qee24 分钟前
Docker Compose 多容器编排
java·docker·容器
秋田君1 小时前
QT_QColorDialog颜色对话框
java·数据库·qt
用户91366296220122 小时前
ViewModelScope 简介与使用
java
上海安当技术2 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
青山木2 小时前
Hot 100 --- 组合总和
java·数据结构·算法·leetcode
Zane19942 小时前
Lock 接口与 AQS 核心原理:手写理解一把可重入锁是怎么运作的
java·后端
Full Stack Developme2 小时前
SpringBoot 整合 Druid 并列出参数清单
java·spring boot·后端
caishenzhibiao2 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#