作者:卜比
在公布过程中,为了产品整体稳定性,咱们总是心愿可能用小局部特定流量来验证下新版本利用是否能失常工作。
即便新版本有问题,也能及时发现,管制影响面,保障了整体的稳定性。
整体架构
咱们以如下 Demo 为例:
为了保障稳固,咱们约定如下上线流程:
其中,在灰度验证中,有几种不同的策略:
- 间接应用线上小局部流量来测试(依照百分比放量)
- 从线上依照特定规定抉择流量(比方特定的 header、特定的 cookie 等)
- 在客户端或浏览器上标识出流量是否灰度(比方通过 header 传递)
部署利用 & 创立泳道
依照参考文档在 Kubernetes 集群中部署利用后,咱们首先要辨别线上流量和灰度流量。
部署文档:
https://github.com/aliyun/ali…
创立泳道组,抉择入口利用以及整个链路波及到的利用:
而后创立泳道,将合乎规定的流量划入 gray 泳道:
注:没有匹配的流量,会走到基线环境,也就是没有打标的利用节点上。
配置实现后,拜访网关,如果不合乎灰度规定,走基线环境:
如何合乎灰度规定,走灰度环境:
配置云效流水线
在本例中,应用“其余 · 空模板”创立云效流水线,创立后,须要进行四局部配置:
流水线源
配置好流水线的起源,比方代码仓库等。
- 代码仓库:https://gitee.com/mse-group/a…(为了防止网络提早,所以采纳 gitee 仓库)
- 默认分支:master
- 服务连贯:能够通过增加服务连贯按钮增加,因为本例中代码仓库为公开代码仓库,所以只须要依照默认值创立即可。
配置实现后,增加到流水线中。
构建阶段配置
此阶段配置云效如何构建 docker 镜像。
删除原有的阶段和空工作,手动增加新工作“镜像构建”:
配置参数如下:
- 构建集群:就近抉择,国内能够抉择“北京构建集群”
- 服务连贯:您能够依照提醒增加 ACR 的服务连贯,通过 RAM 受权的形式,让云效能够推送镜像到 ACR 中
- 仓库:抉择您须要推送、部署的镜像仓库
- 标签:保留默认 ${DATETIME} 即可。
- Dockerfile 门路:mse-simple-demo/A/Dockerfile
配置好后,增加即可。
部署 gray 阶段配置
本步骤批示云效如何部署 gray 节点。因为云效能够间接替换 Kubernetes 中的 workload 镜像,咱们能够间接应用此机制来公布。
配置参数如下:
- 集群连贯:用来受权云效批改 ACK 集群中 workload 配置。依照受权增加对应 ACK 集群连贯即可
- Kubectl 版本:抉择相近版本即可
- 命名空间:依照理论状况抉择
- Workloads 类型:本例中是 Deployment
- Workloads 名称:本例中是 spring-cloud-a-gray
- 容器名称:本例中是 spring-cloud-a-gray
- 镜像:抉择上一步构建的后果,能够抉择“镜像公网地址”
部署线上阶段配置
相似上一阶段的配置:
- Workloads 名称:和上一步不同,这儿是基线环境的 workloads,值为 spring-cloud-a
- 容器名称:spring-cloud-a
最初,将部署 gray 阶段和部署线上阶段的的触发模式改为“手动触发”。
残缺配置好后的成果如图:
流水线运行
配置好流水线后,咱们能够依照公布流程来一步步运行流水线:
打包构建
咱们手动运行刚刚的创立好的流水线,察看构建状态。
运行胜利成果如下:
您也能够查看日志来确定运行状态、排查问题等:
实现镜像构建后,接着就开始开始部署 gray 了。
部署 gray 并验证
点击部署 gray 阶段的手动触发按钮,开始部署 gray:
部署完结后,能够在 Kubernetes 控制台确认下部署后容器镜像是不是合乎预期:
如上图,能够看到对应镜像曾经部署到 gray 了。
咱们能够尝试用小流量进行验证,依照之前在 MSE 全链路灰度上的配置,拜访只须要带上参数 name=xiaoming 即可拜访到 gray 节点:
能够看到申请达到了 Agray 节点,同时新的代码也失效了。
咱们无妨察看下此时线上的流量:
没有带灰度参数的流量,走基线环境,同时新版本的批改也还未失效。
在验证完 gray 环境后,咱们就能够开始公布线上了。
如果此时验证不通过,咱们能够停止流水线运行,排查问题后从新运行流水线。
部署线上
点击部署线上阶段的手动触发按钮,开始部署线上:
线上部署胜利后,也能够在容器控制台查看,看下是否合乎预期:
此时咱们开始察看线上流量,看下批改是否失效:
能够看到,新版本的批改此时就齐全公布到线上了。
总结
在微服务治理架构中,MSE 全链路灰度提供了虚构泳道能力,极大的不便了测试、公布时的疾速验证,可能帮忙 Devops 同学缩小保障半径、晋升线上稳定性。
同时,阿里云微服务引擎(MSE)也能给您带来全生命周期的、全方位的微服务治理、流量防护能力,保障您的线上稳定性,晋升开发、运维效率。