前言
在上一篇文章中,带大家认识了在日常生产环境基于ingress Canary策略实现业务的灰度发布,本篇文章将会介绍KubeSphere的灰度发布机制,这才是我们的重头戏
KubeSphere灰度发布原理
KubeSphere基于lstio向用户提供部署灰度服务所需要的控制功能,在灰度发布中,可以引入服务的新版本,并向其发送一部分流量来进行测试,同时,旧版本负责处理剩余的流量请求,如果一切顺利,则可以逐渐增加新版本流量比例,同事逐步停用旧版本,如果出现任何问题,可直接基于KubeSphere更改流量比例来回滚至先前版本
灰度发布实现
启用相关依赖组件服务
开启lstio服务网格、logging日志系统等组件
开启服务网格插件
servicemesh:
enabled: true
开启logging日志记录插件
logging:
enabled: true
创建一个企业空间(WorkSpace)以及对应项目(NameSpace),并将该NameSpace关联至WorkSpace中
应用实例创建流程
在企业空间下面的NameSpace下,直接选择自制应用,创建属于自己的应用(应用--->自制应用-->创建)
自定义应用名称,选择下一步
这里选择新建立一个服务,注意这里的服务不是Service,而是Deployment或者Statefulset这样的服务类型
这里选择Deployment 无状态服务即可
定义Deployment名称
这里我给出一个封装好的镜像地址(registry.cn-beijing.aliyuncs.com/devops-op/nginx-damo:v1)作为本次演示的v1版本微服务,服务端口为80
此时demov1 无状态服务已创建完毕, 下一步即可
这里创建一个路由规则,所谓的路由规则就是我们的Ingres配置,在KubeSphere中称之为应用路由,主要用于域名解析使用
指定一个测试域名,后续演示本地直接做一个host解析即可访问
截至目前为止,整个应用实例已创建完毕。
这里我自定义了shell脚本,执行该脚本就会每隔2s访问一次kube.test.com域名,从而模拟用户请求,便于验证。
#vim test.sh
#!/bin/bash
while true
do
curl http://kube.test.com:31871;echo
sleep 2
done
模拟访问请求,可以在流量监控部分查看到拓扑
模拟新版本上线灰度发布
此时我们线上提交了新功能v2版本准备上线,但是呢,又不想直接替换新版本,想让20%的流量请求由demov2版本,待v2版本反馈无误后之后,再将全部流量打入到最新版v2中,由此完成更新。
选择灰度发布功能,选择金丝雀发布(灰度发布)
定义金丝雀发布名称
这里选择的是,旧版本的应用所关联的负载均衡(无状态应用)
指定版本为v2,作为新功能资源副本
选择"指定流量分配",然后将v2版本流量比例调整为20%,剩余80%流量仍然打到v1旧版本中
验证
通过流量展示,可以明显的发现两种版本的流量比例,符合我们的流量分配策略,左边通过脚本之行的输出结果来看,大部分的请求反馈结果都是由v1版本响应,少部分流量由v2响应
待用户反馈无误稳定之后,我们可直接让v2接管全部用户流量,如下图所示
此时可以看到v2流量为100%,表示所有流量请求都由最新版本v2响应