php网站开发实训总结,Wordpress做物联网,网络查控系统设计方案,网站制作公司报价作者#xff1a;周静、吴宇奇、泮圣伟
在应用开发测试验证通过后、进行生产发布前#xff0c;为了降低新版本发布带来的风险#xff0c;期望能够先部署到灰度环境#xff0c;用小部分业务流量进行全链路灰度验证#xff0c;验证通过后再全量发布生产。本文主要介绍如何通…作者周静、吴宇奇、泮圣伟
在应用开发测试验证通过后、进行生产发布前为了降低新版本发布带来的风险期望能够先部署到灰度环境用小部分业务流量进行全链路灰度验证验证通过后再全量发布生产。本文主要介绍如何通过阿里云 MSE 微服务引擎和云效应用交付平台AppStack 实现灰度发布。
读完本文你将了解到
以 SpringCloud 应用为例了解全链路灰度场景及其工作原理如何基于云效 Appstack 完成应用基线环境的部署实时观测环境部署进度如何平滑为存量应用添加灰度环境、灰度发布流程不影响已有发布流程如何基于 MSE 实现自定义多种灰度路由规则条件精准测试灰度流量如何实现应用灰度环境下线及时清理无用资源。
场景描述
本文将以 A、B、C 三个 SpringCloud 应用为例展示如何通过阿里云云效 AppStack 来整合 MSE 全链路灰度的功能实现将应用一键部署到灰度环境并进行全链路灰度的测试。
假设已有 A、B、C 三个应用的基线版本正在运行。整体上应用的调用链路是客户端入口流量首先到达网关应用而后按顺序经过 A、B、C 三个应用 一次需求发布窗口中应用 A 和 C 进行了迭代需要对 A 和 C 的新版本进行全链路灰度测试调用链路如下 整体方案
通过云效 AppStack在应用发布流程上增加一个灰度流程。每个应用走到生产环境部署前都会先发布到灰度环境。通过灰度标识对灰度环境进行验证等到开发/测试人员对灰度环境的应用测试没有问题时再手工放行流水线走到真正的线上发布部署阶段。 操作实践
前提条件
1开通云效高级版可免费试用 1 个月确保在云效应用交付 AppStack 内打开研发流程功能 [ 1] 了。
2开通 MSE 微服务治理 [ 2] 。
3.1 开启 MSE 微服务治理
1将 ACK 微服务应用接入 MSE 治理中心。具体操作请参见 ACK 微服务应用接入 MSE 治理中心 [ 3] 。
2创建 MSE nacos并复制其内网域名。具体操作请参见创建 Nacos 引擎 [ 4] 。
3创建 MSE 云原生网关并关联第一步创建的 Nacos。具体操作请参见创建 MSE 云原生网关 [ 5] 和新建服务来源 [ 6] 。
3.2 在云效 AppStack 创建三个应用部署应用基线版本 在云效 AppStack 创建三个应用部署应用基线版本。
我们以 spring-cloud-a 应用为例详细介绍一个应用的配置流程
第 1 步应用关联代码仓库可以在云效 Codeup 中导入示例代码https://github.com/aliyun/alibabacloud-microservice-demo.git 第 2 步应用环境配置一个应用通常可以划分为测试环境test、预发环境pre、灰度环境gray、生产环境prod环境关联不同的部署资源如 K8s 集群部署服务分别用于不同阶段进行测试验证并最终提供线上服务。 第 3 步应用 Kubernetes 部署编排 YAML 配置。 将容器镜像定义成占位符 {{ .AppStack.image.backend }}由流水线运行时传入构建好的镜像。在应用配置的 spec.template.metadata.labels 下加入 MSE 基本配置及灰度相关。 说明
msePilotCreateAppName 为 MSE 服务治理接入的应用名msePilotAutoEnable 为是否接入 MSE 服务治理的开关 on 表示开启off 表示关闭alicloud.service.tag 则是 MSE 用于灰度发布的节点标签。您可以在 MSE 服务治理控制台节点详情页面看到节点的标签情况。更多信息请参见 ACK 微服务应用接入 MSE 治理中心微服务治理 [ 7] 、节点详情 [ 8] 。{{if eq .AppStack.envName “gray” }} 是基于 GO template 的方式识别当前云效发布的应用环境。如果环境名称为 gray则为灰度服务。更多信息请参见 Kubernetes 部署编排 [ 9] 。nacos-server 需要替换成上述创建的 Nacos 内网域名。 apiVersion:apps/v1
kind:Deployment
metadata:
name:spring-cloud-a-{{.AppStack.envName}}
labels:
run:spring-cloud-a-{{.AppStack.envName}}
namespace: {{ .Values.namespace }}
spec:
selector:
matchLabels:
app:spring-cloud-a-{{.AppStack.envName}}
template:
metadata:
labels:
app:spring-cloud-a-{{.AppStack.envName}}
# MSE 灰度相关配置
msePilotCreateAppName:spring-cloud-a
msePilotAutoEnable:on
{{ ifeq.AppStack.envNamegray }}
alicloud.service.tag:gray
{{ end }}
spec:
containers:
-name:spring-cloud-a
image: {{ .AppStack.image.backend }} # 应用镜像占位符由流水线运行时传入
imagePullPolicy:Always
ports:
-containerPort:20001
livenessProbe:
tcpSocket:
port:20001
initialDelaySeconds:30
periodSeconds:60
env:
-name:spring.cloud.nacos.discovery.server-addr
value:nacos-server# nacos-server 替换为上述创建的 Nacos 内网域名
-name:dubbo.registry.address
value:nacos://nacos-server:8848# nacos-server 替换为上述创建的 Nacos 内网域名第 4 步应用研发流程配置通常一个应用的研发流程可以分为测试阶段、预发阶段、生产阶段。
生产阶段通常包括镜像构建也可以选择已有镜像发布、发布审核、生产发布多个任务。 镜像构建选择「镜像构建」组件配置需要推送到的镜像仓库、标签默认 ${DATETIME}、用于构建的 Dockerfile 路径本示例为 mse-simple-demo/A/Dockerfile。人工卡点配置生产发布的审批人。生产环境部署选择「AppStack 部署」组件应用自动填充当前应用、环境选择「生产环境-prod」制品选择构建的镜像。 第 5 步点击「运行」生产发布流程触发应用镜像构建镜像构建成功后推送到目标镜像仓库。 人工审批通过后触发部署正式环境。点击查看「部署单详情」查看部署进度。部署单成功后即完成了正式基线环境的部署。 进入环境详情可以查看 Deployment 资源状态和详细信息。 以上即完成了应用 spring-cloud-a 的代码、环境、编排 YAML、研发流程等配置完成了 spring-cloud-a 基线环境的部署。spring-cloud-b、 spring-cloud-c 应用配置和上线流程相同。 注 当应用较多时推荐使用应用模板来完成应用的批量初始化详见应用模板 [ 10] 。
3.3 配置灰度流程
3.3.1 创建 MSE 全链路灰度泳道
创建全链路灰度泳道组进入 MSE 治理中心 全链路灰度单击创建泳道组及泳道如果您已经创建过泳道组则单击创建泳道组。入口类型选择「MSE 云原生网关」泳道组流量入口选择目标云原生网关泳道组涉及应用选择 spring-cloud-a、spring-cloud-b、spring-cloud-c。 创建分流泳道泳道标签设置为 gray路由规则条件列表添加 Parameter groupgray则请求参数中携带 groupgray 的去往灰度泳道。 3.3.2 AppStack 应用增加灰度流程
进入云效 AppStack 应用-设置-研发流程编辑「生产阶段」流程
在人工卡点任务后添加「灰度环境部署」任务选择「AppStack 部署」组件应用自动填充当前应用环境选择「灰度环境-gray」制品选择构建的镜像。 在生产发布任务后添加「灰度环境清理」任务选择「AppStack 清理环境」组件应用自动填充当前应用环境选择「灰度环境-gray」选择「仅清理资源保留环境元数据」下次发布时可以重新部署拉起灰度服务资源。 配置完成后保存生产阶段流程即可进入下一步。
3.4 新需求发布部署灰度环境灰度验证
3.4.1 灰度环境部署
当接收到一个新的业务需求涉及 spring-cloud-a 和 spring-cloud-c 两个应用的改动。A、C 两个应用各自完成代码开发、测试预发验证后进入生产发布阶段。分别点击「运行」A、C 生产阶段研发流程触发 A、C 灰度环境部署点击查看「部署单详情」部署单成功后即完成 A、C 灰度环境的部署。 3.4.2 开始灰度验证
发起带灰度标识的请求则结果如下A 和 C 进行了灰度发布B 没有进行灰度发布所以请求去往了 B 的基线环境
curl -X GET http://47.96.XX.XXX/A/a?groupgray
Agray[192.168.110.161][configbase] - B[192.168.110.14] - Cgray[192.168.110.160]如果请求不带灰度标识则去往 A、B、C 的基线环境
curl -X GET http://47.96.XX.XXX/A/a?groupgray
Agray[192.168.110.161][configbase] - B[192.168.110.14] - Cgray[192.168.110.160]可以在 MSE 控制台上看到刚刚发起的灰度请求 3.5 灰度验证通过发布生产环境
上述灰度验证通过后即可继续发布生产环境。点击手动触发生产环境发布查看生产发布批次观测新老版本号部署完成后观测生产监控日志。 3.6 生产发布成功后销毁灰度环境
生产发布成功后销毁灰度环境资源所有流量都进入生产环境。 至此即完成了应用基线环境的准备、灰度流程配置、灰度发布验证、生产发布、灰度销毁完整流程。
相关链接
[1] 确保在云效应用交付 AppStack 内打开研发流程功能
https://help.aliyun.com/document_detail/2399732.html
[2] 开通 MSE 微服务治理
https://help.aliyun.com/zh/mse/getting-started/activate-microservices-governance#task-2140253
[3] ACK 微服务应用接入 MSE 治理中心
https://help.aliyun.com/zh/mse/getting-started/enable-microservices-governance-for-microservice-applications-in-an-ack-cluster
[4] 创建 Nacos 引擎
https://help.aliyun.com/zh/mse/getting-started/create-a-nacos-engine#task-2261346
[5] 创建 MSE 云原生网关
https://help.aliyun.com/zh/mse/getting-started/create-a-cloud-native-gateway#task-2140895
[6] 新建服务来源
https://help.aliyun.com/zh/mse/user-guide/add-a-service-source#task-2081169
[7] ACK 微服务应用接入 MSE 治理中心微服务治理
https://help.aliyun.com/zh/mse/user-guide/enable-microservices-governance-for-microservice-applications-in-an-ack-cluster-1
[8] 节点详情
https://help.aliyun.com/zh/mse/user-guide/node-details
[9] Kubernetes 部署编排
https://help.aliyun.com/document_detail/461384.html
[10] 应用模板
https://help.aliyun.com/document_detail/2674996.html