首页 > 其他分享 >KubeSphere实现金丝雀发布(Canary Release)

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

时间:2024-01-11 16:46:27浏览次数:28  
标签:金丝雀 KubeSphere 点击 流量 v2 Canary 版本

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 版本之间切换:

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

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

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

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

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"

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

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

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

4 查看链路追踪详情

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

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

5 接管所有流量

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

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

  2. 在弹出的对话框中,点击 reviews v2 右侧的 icon,选择接管。这代表 100% 的流量将会被发送到新版本 (v2)

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

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

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

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

参考:

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

标签:金丝雀,KubeSphere,点击,流量,v2,Canary,版本
From: https://www.cnblogs.com/JavaEdge/p/17958859

相关文章

  • 一次生产 KubeSphere 日志无法正常采集事件解决记录
    作者:宇轩辞白,运维研发工程师,目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。前言2023年11月7号下午,研发同事反馈,项目线上日志平台某个服务无法查看近期的日志。我登上KubeSphere平台进行查看,发现日志收集展示停留在10月15号那天,而其它的服务是正常......
  • Argo-rollout使用--蓝绿和金丝雀发布
    1.安装argo-rolloutkubectlcreatenamespaceargo-rolloutskubectlapply-nargo-rollouts-fhttps://github.com/argoproj/argo-rollouts/releases/download/v1.5.0/install.yaml官网:https://argoproj.github.io/argo-rollouts/ 2.蓝绿部署部署applicationapiVersion......
  • 使用KubeSphere轻松部署Bookinfo应用
    Bookinfo应用这个示例部署了一个用于演示多种Istio特性的应用,该应用由四个单独的微服务构成。如安装了Istio,说明已安装Bookinfo。这个应用模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),及书评。Bookinfo应用分为四个单独的......
  • KubeSphere 社区双周报 | 2023.12.21-2024.01.04
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.12.21-2024.01.04。贡献者名单新晋KubeSpherecon......
  • 使用springcloud 实现 蓝绿发布、灰度发布(金丝雀发布)
    介绍工作中经常要涉及到功能发布,这个时候也经常是业务系统最有可能遇到问题的时候,需要要尽量减少发布引起的风险。比如在系统负载比较小的时候使用。还有蓝绿发布、灰度发布等等,今天介绍一下这几种常见的发布,并使用springcloud实现。1.传统发布方式一个系统最初的时候,使用量小,用户......
  • 跨集群流量调度实现 Kubernetes 集群金丝雀升级
    有了多集群服务和跨集群的流量调度之后,使用Kubernetes的方式会发生很大的变化。流量的管理不再限制单一集群内,而是横向跨越了多个集群。最重要的是这一切“静悄悄地”发生,对应用来说毫无感知。就拿Kubernetes版本升级来说吧。记得曾经经历过集群的原地升级:团队的几个人经过多次......
  • k8s 安装kubesphere3.4.1 多次安装报错 Error from server (InternalError): Internal
    failed:[localhost](item={'ns':'kubesphere-system','kind':'users.iam.kubesphere.io','resource':'admin','release':'ks-core'})=>{"ansible_loop_var":"......
  • Argo Rollouts TrafficRouting结合Istio进行Canary流量管理基础
    ArgoRolloutsTrafficRouting概述流量治理技术实现如下:1.按百分比进行流量管理(即5%的流量应流向新版本,其余流量流向稳定版本)2.基于标头的路由(即将带有特定标头的请求发送到新版本)3.镜像流量,其中所有流量都被复制并并行发送到新版本(但响应被忽略)TrafficRouting配置apiVersi......
  • Argo Rollouts Canary结合Istio进行流量迁移实例
    环境说明用argorollouts金丝雀发布策略更新nginx服务。发布过程结合Isito和analysis。创建nsargo-demo#kubectlcreatensargo-demonamespace/argo-democreated启用Istio自动注入功能#kubectllabelnamespaceargo-demoistio-injection=enablednamespace/argo-demolabe......
  • 在 Linux 上以 All-in-One 模式安装 KubeSphere
    1、什么是KubeSphere KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT自动化运维能力,简化企业的DevOps工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)......