玛卡巴卡的卡巴卡玛 发表于 2024-3-30 12:14:55

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

0 前言

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

[*]引入服务的新版本,并向其发送一小部分流量来进行测试
[*]同时,旧版本负责处理其余的流量
[*]如果一切顺利,就可逐渐增加向新版本发送的流量,同时逐步停用旧版本
[*]如出现任何问题,可用 KubeSphere 更改流量比例来回滚至先前版本
该方法能高效测试服务性能和可靠性,有助在实际环境发现潜在问题,又不影响系统整体稳定性。canary-release-0
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163332722-218739836.png
环境前提


[*]启用 KubeSphere 服务网格
[*]启用 KubeSphere 日志系统以使用 Tracing 功能
[*]创建一个企业空间、一个项目和一个用户 (project-regular)。请务必邀请该用户至项目中并赋予 operator 角色。参见创建企业空间、项目、用户和角色
[*]开启应用治理并有一个可用应用,以便实现该应用的金丝雀发布。本教程使用示例应用 Bookinfo。参见部署 Bookinfo 和管理流量。
1 创建金丝雀发布任务

登录 KubeSphere 控制台:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163336727-806447674.png
转到灰度发布页面,点击创建灰度发布任务:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163341581-896112023.png
在发布模式选项卡,点击金丝雀发布右侧的创建:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163346731-1647254255.png
设置任务名称,点击下一步:
https://javaedge.oss-cn-shanghai.aliyuncs.com/image-20240111144012227.png在服务设置选项卡,从下拉列表中选择你的应用和要实现金丝雀发布的服务。如Bookinfo系统的 reviews服务 并点击下一步:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163349238-957426398.png
在新版本设置选项卡,添加另一个版本(例如 kubesphere/examples-bookinfo-reviews-v2:1.16.2;将 v1 改为 v2)并点击下一步:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163352566-29251070.png
可用具体比例或使用请求内容(如Http Header、Cookie 和 URI)分别向这两个版本(v1 和 v2)发送流量。选择指定流量分配,并拖动中间滑块来更改向这两个版本分别发送的流量比例(如设置为各 50%)。操作完成后,点击创建:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163356534-223112356.png
结果:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163401768-134972740.png
点击进去查看,v2的资源已被创建:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163406135-296683790.png
到工作负载下观察:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163410483-1815520928.png
2 验证金丝雀发布

现在有两个可用的应用版本了,访问该应用以验证金丝雀发布。
访问 Bookinfo 网站,持续刷新浏览器。会看到 Book Reviews 板块以 50% 比例在 v1 版本和 v2 版本之间切换:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163417288-691518721.png
相信大家一眼就看出区别了:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163420558-1283286439.png
金丝雀发布任务创建后会显示在任务状态选项卡下:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163422022-1624443729.png
点击该任务查看详情可看到每个版本分别收到一半流量,新的部署也已创建:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163422737-434324564.png
可执行以下命令直接获取虚拟服务来识别权重:
kubectl -n demo-project get virtualservice -o yaml

[*]当您执行上述命令时,请将 demo-project 替换为您自己项目(即命名空间)的名称。
[*]如想在 KubeSphere 控制台使用 Web kubectl 执行命令,则需要使用 admin 帐户登录。
预期输出:
...
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。
watch -n 0.5 "curl http://productpage.demo-project.192.168.0.2.nip.io:32277/productpage?u=normal"将命令中的主机名和端口号替换成自己环境的。

[*]在流量监控中,可看到不同服务之间的通信、依赖关系、运行状态及性能
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163427395-507552898.png
[*]点击组件(例如 reviews),在右侧可以看到流量监控信息,显示流量、成功率和持续时间的实时数据:
https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163428477-1367385711.png
4 查看链路追踪详情

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

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

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

[*]在任务状态中,点击金丝雀发布任务
[*]在弹出的对话框中,点击 reviews v2 右侧的 https://img2024.cnblogs.com/other/1097393/202401/1097393-20240111163428834-1430184467.png,选择接管。这代表 100% 的流量将会被发送到新版本 (v2)
如果新版本出现任何问题,可以随时回滚到之前的 v1 版本
[*]再次访问 Bookinfo,多刷新几次浏览器,您会发现页面只会显示 reviews v2 的结果(即带有黑色星标的评级)
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都国企技术专家兼架构,多家大厂后台研发和架构经验,负责复杂度极高业务系统的模块化、服务化、平台化研发工作。具有丰富带团队经验,深厚人才识别和培养的积累。
参考:

[*]编程严选网
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: KubeSphere实现金丝雀发布(Canary Release)