灰度发布,是指在黑与白之间,可以平滑过渡的一种发布方式。通俗来讲,即让产品的迭代可以按照不一样的灰度策略对新版本进行线上环境的测试,灰度发布能够保证总体系统的稳定,在初始灰度的时候就能够对新版本进行测试、发现和调整问题,以保证其影响度。KubeSphere 基于 Istio 提供了蓝绿部署、金丝雀发布、流量镜像等三种灰度策略,无需修改应用的服务代码,便可实现灰度、流量治理、Tracing、流量监控、调用链等服务治理功能。git
本示例在 KubeSphere 容器平台中使用 Istio 官方提供的 Bookinfo 示例,建立一个微服务应用并对其中的服务组件进行灰度发布,演示 KubeSphere 服务治理的能力。github
Bookinfo 应用分为四个单独的微服务:shell
reviews 微服务有 3 个版本:浏览器
下图展现了这个应用的端到端架构。安全
约 20 ~ 30 分钟。网络
project-regular
帐号,且已邀请 project-regular
加入项目并授予 operator
角色project-regular
帐号进入项目 demo-project 后,选择 应用负载
→ 应用
,点击 「部署示例应用」。在弹窗中,点击 「肯定」 部署 bookinfo 示例应用。架构
确认应用工做负载的全部部署状态显示 运行中
,则说明 bookinfo 微服务建立成功(约 2 分钟)。运维
因为外网访问启用的是 NodePort 的方式,NodePort 会在主机上开放 http 端口,要访问 bookinfo 应用须要将该端口进行转发并在防火墙添加下行规则,确保流量可以经过该端口。curl
在本地打开 /etc/hosts
文件,为 hostname 添加一条记录,例如:微服务
#{公网 IP} {hostname} 139.198.111.111 productpage.demo-project.192.168.0.8.nip.io
在弹窗中,填写发布任务名称为 bookinfo-carary
,点击 「下一步」。
点击 reviews
一栏的 「选择」,即选择对应用组件 reviews
进行灰度发布,点击 「下一步」。
参考以下填写灰度版本信息,完成后点击 「下一步」。
再次访问 Bookinfo 网站,重复刷新浏览器后,能够看到 bookinfo 的 reviews 模块在 v1 和 v2 模块按 50% 几率随机切换。
打开命令行窗口输入如下命令,引入真实的访问流量,模拟对 bookinfo 应用每 0.5 秒访问一次。注意如下命令是模拟 Normal user
访问,须要输入完整的命令访问到具体的服务在链路图中才有流量数据。
$ watch -n 0.5 "curl http://productpage.demo-project.139.198.111.111.nip.io:31680/productpage?u=normal"
从流量治理的链路图中,能够看到各个微服务之间的服务调用和依赖、健康情况、性能等状况。
提示:点击其中一个应用组件,还能够为该服务组件设置流量治理策略,如链接池管理、熔断器等。
点击 reviews 服务,查看该服务的实时流量监测,包括每秒请求的流量 (RPS)、成功率、持续时间等指标,这类指标均可以分析该服务的健康情况和请求成功率。
若是在链路图中发现了服务的流量监测异常,还能够在 Tracing 中追踪一个端到端调用通过了哪些服务,以及各个服务花费的时间等详细信息,支持进一步查看相关的 Header 信息,每一个调用链由多个 Span 组成。
界面上能够清晰的看到某个请求的全部阶段和内部调用,以及每一个阶段所耗费的时间。
展开某个阶段,还能下钻看到这个阶段是在哪台机器(或容器)上执行的。
当新版本 v2 灰度发布后,发布者能够对线上的新版本进行测试和收集用户反馈。若是测试后肯定新版本没有问题,但愿将流量彻底切换到新版本,则进入灰度发布页面进行流量接管。
提示:此时 v1 也将保持在线,若 v2 上线后发现问题,容许发布者随时将新版本 v2 的流量切回 v1。
当新版本 v2 上线接管全部流量后,而且测试和线上用户反馈都确认无误,便可下线旧版本,释放资源 v1 的资源。下线应用组件的特定版本,会同时将关联的工做负载和 istio 相关配置资源等所有删除。
至此,Bookinfo 微服务以金丝雀发布做为发布策略,演示了灰度发布的基本功能。
KubeSphere (https://github.com/kubesphere/kubesphere) 是一个开源的以应用为中心的容器管理平台,支持部署在任何基础设施之上,并提供简单易用的 UI,极大减轻平常开发、测试、运维的复杂度,旨在解决 Kubernetes 自己存在的存储、网络、安全和易用性等痛点,帮助企业轻松应对敏捷开发与自动化监控运维、端到端应用交付、微服务治理、多租户管理、多集群管理、服务与网络管理、镜像仓库、AI 平台、边缘计算等业务场景。