KubeSphere灰度发布实战(下)
  T5Bv8I9TIFQW 2023年11月02日 33 0

前言

在上一篇文章中,带大家认识了在日常生产环境基于ingress Canary策略实现业务的灰度发布,本篇文章将会介绍KubeSphere的灰度发布机制,这才是我们的重头戏

KubeSphere灰度发布原理

KubeSphere基于lstio向用户提供部署灰度服务所需要的控制功能,在灰度发布中,可以引入服务的新版本,并向其发送一部分流量来进行测试,同时,旧版本负责处理剩余的流量请求,如果一切顺利,则可以逐渐增加新版本流量比例,同事逐步停用旧版本,如果出现任何问题,可直接基于KubeSphere更改流量比例来回滚至先前版本

灰度发布实现

启用相关依赖组件服务

开启lstio服务网格、logging日志系统等组件

KubeSphere灰度发布实战(下)_灰度发布

KubeSphere灰度发布实战(下)_KubeSphere_02

开启服务网格插件

servicemesh:
    enabled: true

KubeSphere灰度发布实战(下)_灰度发布_03

开启logging日志记录插件

logging:
    enabled: true

KubeSphere灰度发布实战(下)_灰度发布_04

创建一个企业空间(WorkSpace)以及对应项目(NameSpace),并将该NameSpace关联至WorkSpace中

KubeSphere灰度发布实战(下)_灰度发布_05

KubeSphere灰度发布实战(下)_KubeSphere_06

应用实例创建流程

在企业空间下面的NameSpace下,直接选择自制应用,创建属于自己的应用(应用--->自制应用-->创建)

KubeSphere灰度发布实战(下)_KubeSphere_07

自定义应用名称,选择下一步

KubeSphere灰度发布实战(下)_灰度发布_08

这里选择新建立一个服务,注意这里的服务不是Service,而是Deployment或者Statefulset这样的服务类型

KubeSphere灰度发布实战(下)_灰度发布_09

这里选择Deployment 无状态服务即可

KubeSphere灰度发布实战(下)_灰度发布_10

定义Deployment名称

KubeSphere灰度发布实战(下)_KubeSphere_11

这里我给出一个封装好的镜像地址(registry.cn-beijing.aliyuncs.com/devops-op/nginx-damo:v1)作为本次演示的v1版本微服务,服务端口为80

KubeSphere灰度发布实战(下)_灰度发布_12

KubeSphere灰度发布实战(下)_灰度发布_13

KubeSphere灰度发布实战(下)_KubeSphere_14

此时demov1 无状态服务已创建完毕, 下一步即可

KubeSphere灰度发布实战(下)_灰度发布_15

这里创建一个路由规则,所谓的路由规则就是我们的Ingres配置,在KubeSphere中称之为应用路由,主要用于域名解析使用

KubeSphere灰度发布实战(下)_KubeSphere_16

指定一个测试域名,后续演示本地直接做一个host解析即可访问

KubeSphere灰度发布实战(下)_KubeSphere_17

KubeSphere灰度发布实战(下)_灰度发布_18

截至目前为止,整个应用实例已创建完毕。

KubeSphere灰度发布实战(下)_灰度发布_19

KubeSphere灰度发布实战(下)_灰度发布_20

这里我自定义了shell脚本,执行该脚本就会每隔2s访问一次kube.test.com域名,从而模拟用户请求,便于验证。

#vim test.sh
#!/bin/bash
while true
do
    curl http://kube.test.com:31871;echo
    sleep 2
done

模拟访问请求,可以在流量监控部分查看到拓扑

KubeSphere灰度发布实战(下)_KubeSphere_21

模拟新版本上线灰度发布

此时我们线上提交了新功能v2版本准备上线,但是呢,又不想直接替换新版本,想让20%的流量请求由demov2版本,待v2版本反馈无误后之后,再将全部流量打入到最新版v2中,由此完成更新。

选择灰度发布功能,选择金丝雀发布(灰度发布)

KubeSphere灰度发布实战(下)_KubeSphere_22

定义金丝雀发布名称

KubeSphere灰度发布实战(下)_KubeSphere_23

这里选择的是,旧版本的应用所关联的负载均衡(无状态应用)

KubeSphere灰度发布实战(下)_灰度发布_24

指定版本为v2,作为新功能资源副本

KubeSphere灰度发布实战(下)_KubeSphere_25

选择"指定流量分配",然后将v2版本流量比例调整为20%,剩余80%流量仍然打到v1旧版本中

KubeSphere灰度发布实战(下)_KubeSphere_26

验证

通过流量展示,可以明显的发现两种版本的流量比例,符合我们的流量分配策略,左边通过脚本之行的输出结果来看,大部分的请求反馈结果都是由v1版本响应,少部分流量由v2响应

KubeSphere灰度发布实战(下)_灰度发布_27

KubeSphere灰度发布实战(下)_灰度发布_28

KubeSphere灰度发布实战(下)_灰度发布_29

待用户反馈无误稳定之后,我们可直接让v2接管全部用户流量,如下图所示

KubeSphere灰度发布实战(下)_KubeSphere_30

此时可以看到v2流量为100%,表示所有流量请求都由最新版本v2响应

KubeSphere灰度发布实战(下)_KubeSphere_31

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

T5Bv8I9TIFQW