当新版本发布的时候,我们希望能够控制一部分用户来使用新的版本,待验证通过后再发布给所有的用户进行使用。其中部分用户使用新版本的过程我们叫做“金丝雀发布”。
在微服务体系中如果一次只有部分应用发布,需要保证有且仅有目标用户访问新版本。下面我们介容器人绍基于MSE的全链路金丝雀发布。
前提条件
- 创建 ACK 集群,请参见创建Kuber微服务架构系统实例netes托管版集群。
操作步骤
步骤一: 接入 MSE 微服务治理
-
安装 mse-ack-pilot
安装MSE微服务治java理组件大约需要2分钟,请耐心等待。
创kubernetes集群建成功后,会自动跳转到目标集群的Helmspringmvc的工作原理页面,检查安装结果。如果出现以下页面,展示相关资源,则说明安Nacos装成功。
-
为ACK命名空间中的应用开启MSE微服务治理
步骤二:还原线上场景
首先,我们nacos集群部署将分别部署 spring-cloud-zuul、spring-cloud-a、spring-cloud-b、spring-cloud-c 这四个业务应用,以及注册中心 Nacos Server,模拟出一个真javascript实的调用链路。
Demo 应用的结构图下图,应用之间的调用,既包kubernetes翻译含容器人了 Spring Cloud 的调用,也包含了 Dutomcat是中间件还是服务器bbo 的调用,覆盖了当前市面上最常用的两种微服应用服务器中间件功能务框架。这些应用都是最简单的 Spring Cloud 和 Dubbo 的标准用法,您也可以直接在 https:/容器技术/github.com/aliyun/alibabacloud-microservice-spring框架demo/tree/master/mse-simple-demo 项目上查看源码。
您可以使用 kubectl 或者直接使用 ACK 控制台来部署应用。部署所使用的 yaml 文件如下,您同样可以直接在 https://github.com/aliyun/anacos怎么读libabacloud-microservice-demo/tree/master/mse-simple-demo 上获取对应的微服务架构和soa的区别源码。
部署 Nacos Sspringcloud五大组件erver
apiVersion: apps/v1
kind: Deployment
metadata:
name: nacos-server
spec:
selector:
matchLabels:
app: nacos-server
template:
metadata:
annotations:
labels:
app: nacos-server
spec:
containers:
- env:
- name: MODE
value: "standalone"
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/nacos-server:latest
imagePullPolicy: IfNotPresent
name: nacos-server
ports:
- containerPort: 8848
---
apiVersion: v1
kind: Service
metadata:
name: nacos-server
spec:
type: ClusterIP
selector:
app: nacos-server
ports:
- name: http
port: 8848
targetPort: 8848
部署业务应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-zuul
spec:
selector:
matchLabels:
app: spring-cloud-zuul
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-zuul
labels:
app: spring-cloud-zuul
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-zuul:1.0.0
imagePullPolicy: Always
name: spring-cloud-zuul
ports:
- containerPort: 20000
---
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
name: zuul-slb
spec:
ports:
- port: 80
protocol: TCP
targetPort: 20000
selector:
app: spring-cloud-zuul
type: LoadBalancer
status:
loadBalancer: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-a
spec:
selector:
matchLabels:
app: spring-cloud-a
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-a
labels:
app: spring-cloud-a
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:1.0.0
imagePullPolicy: Always
name: spring-cloud-a
ports:
- containerPort: 20001
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-b
spec:
selector:
matchLabels:
app: spring-cloud-b
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-b
labels:
app: spring-cloud-b
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:1.0.0
imagePullPolicy: Always
name: spring-cloud-b
ports:
- containerPort: 20002
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-c
spec:
selector:
matchLabels:
app: spring-cloud-c
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-c
labels:
app: spring-cloud-c
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:1.0.0
imagePullPolicy: Always
name: spring-cloud-c
ports:
- containerPort: 20003
安微服务架构的优缺点装成功后容器英文,示例如下:
~ kubectl get svc,deploy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 4h40m
service/nacos-server ClusterIP 192.168.152.138 <none> 8848/TCP 99m
service/zuul-slb LoadBalancer 192.168.75.144 47.100.193.91 80:30767/TCP 25m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nacos-server 1/1 1 1 99m
deployment.apps/spring-cloud-a 1/1 1 1 26m
deployment.apps/spring-cloud-b 1/1 1 1 25m
deployment.apps/spring-cloud-c 1/1 1 1 25m
deployment.apps/spring-cloud-zuul 1/1 1 1 25m
步骤三数据处理的基本单位是:部署新版本的 spri数据处理的特点ng-cloud-a 应用容器中的溶剂发生燃烧应如何处理
- 现在我们部署一个新版本的 spring-cloud-a 应用,对应的应用服务中间件 yaml 文件如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-a-gray
spec:
selector:
matchLabels:
app: spring-cloud-a-gray
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud-a
labels:
app: spring-cloud-a-gray
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:1.0.0
imagePullPolicy: Always
name: spring-cloud-a-gray
ports:
- containerPort: 20001
- 部署完成之后,登录MSE治理中心控制台,选择应用列表。
- 单击应kubernetes怎么读用 spring-cloud-a 应用详情 菜单,此时可以看到,所有的流量请求都是去往 spring-cloud-a 应用未打标的版本,容器中的溶剂发生燃烧应如何处理即稳定版本。
步骤四:中间件技术原理与应用配置应用 spring-cloud-a 的灰度规则并验证
- 点击页面下方的 标签路由 中的 添加 按钮,为 spring-cloud-a 应用的 gray 版本设消息中间件应用场景置灰度规则。
参数 | 描述 |
---|---|
框架类型 | 即springcloud还是dubbspringo |
服务方法 | 具体的接口类和方法名 |
条件模中间件为上层应用提供式 | 下面条java模拟器件列表里多个条件间是“与”还是“或”的关系 |
条件列表 | 具体的条件,该例子中为参数 name 等于 xiaoming 字符串 |
是否链路微服务平台传递 | 是否把当前应用里识别出的灰度流量的标签传递中间件技术原理与应用下去,本例中选择继续传递下去完成全链路的springboot金丝雀能力的验证 |
更多信息请参见标签路由。
- 验容器证规则生效:访问 zuul-slb 对应的 ip 和 port,并在 Demo 的地址栏中输入 /A/a?name=xiaomnacos是什么ing 并点击 开始调用。服务器中间件是什么意思
步骤五:部署新版微服务架构和soa的区别本 的 spring-c数据处理的最小单位是loud-b ,验证nacos注册中心原理全链路金丝雀发布
- 现在我们部署一个容器中的溶剂或易燃化学品新版本的 sp容器人ring-cloud-b 应用,对应的 yaml 文件如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-b-gray
spec:
selector:
matchLabels:
app: spring-cloud-b-gray
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud-b
labels:
app: spring-cloud-b-gray
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry-vpc.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:1.0.0
imagePullPolicy: Always
name: spring-cloud-b-gray
ports:
- containerPort: 20002
- 单容器中有某种酒精含量的酒精溶液击应用 spring-cloud-b 应用详情 菜单,此时可以看到,所有的流量请求都是去往 spring-cloud-b 的未打标版本,即稳定版本。
- 为了让 name=xiaoming 的灰度流量能kubernetes怎么读在全链路里进springboot常用注解行透传,且无需重复地配置规则,需在修改一下之前配置的应用 A微服务架构和soa的区别 的灰度规则,打开链路透传的开关。
- 观察发现,全链路金丝雀发布已经生效。
步骤六:验证通过后,完成发布
- 新版本的镜像验证通过之后,将 spring-cloud微服务架构系统实例-a 和 spring-cloud-b 这两个 deployment 的dubbo是什么镜像版本更新成最新的镜像版本。
- 将 spring-clspringboot面试题oud-a-gray 和 spr数据处理包括数据的ing-cloud-b-gray 这两个 deployment 的副本数量改成 0 ,灰度规则可以保留下来,这样就不用反复地配置spring框架规则。因为当找不到对应的 tag 节点时,兜底的逻辑会请求到未打标的版本,即稳定版本。
操作总结
- 整个过程是不需要修改应用服务器中间件功能任何代码和配置的。
- 只需要在入口应用设置规则,该流量的标签是可以“传递”下去。
- 在每个应用的调用java环境变量配置过程中,符合springmvc的工作原理金丝雀条件的流量会优先调nacos和zookeeper区别用对应的“金丝雀”版本,如果没有“金丝雀”版本则会自动dubbo配置切换回“生产”版本。
发表评论