本文介绍如何快速完成服务治理核心能力的体验。
前提条件
- 说明
Kubernetes集群要求最低配置:12 Core 24 GiB。
对于Kubernetes集群网络要求有公网访问权限,用于下载GitHub中的Demo。
开放EIP暴露API Server,用于CloudShell访问。
ACK集群安装ack-kubernetes-cronhpa-controller组件,可参见管理组件。
部署Demo
Demo介绍
该Demo使用Nacos作为注册中心,存有两个网关,分别为SpringCloudGateway和Zuul(两者可选择是否开启),Demo的默认调用配置为A->B->C,其中A、C均有灰度版本。您可以在代码仓库获取应用代码。
应用名称 | 服务框架版本 | 涉及组件 | Demo |
Zuul | Spring Cloud Greenwich | zuul | |
SpringCloudGateway | spring-cloud-starter-gateway 2.1.3 | spring-cloud-starter-gateway | |
A | Spring Cloud Edgware Dubbo 2.7.18 | openfeign/httpclient/rocketmq/nacos/loadbalancer | |
B | Spring Cloud Hoxton Dubbo 2.7.18 | httpclient/mybatis/druid/nacos | |
C | Spring Cloud 2021 Dubbo 2.7.18 | openfeign/httpclient/nacos |
Helm包下载
下载Demo的Helm包,官方会定期更新该Helm包和镜像。
部署方式
使用ACK的CloudShell部署mse-simple-demo
将mse-simple-demo文件打包。
登录容器服务管理控制台。选择目标集群,在集群信息页面,单击通过 CloudShell 管理集群。
上传Helm包。
使用命令
unzip mse-simple-demo.zip
解压Demo。使用命令
kubectl create namespace mse-demo
创建命名空间(对应--namespace)。
Helm方式部署mse-simple-demo
使用如下Helm命令部署mse-simple-demo。
helm install mse-simple-demo mse-simple-demo \
--set autoscaling=true \
--set images.version=3.0.2 \
--set gateway.zuul=true \
--set registry=registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/ \
--namespace=mse-demo
使用如下Helm命令修改mse-simple-demo参数。
helm upgrade mse-simple-demo mse-simple-demo \
--namespace=mse-demo --create-namespace \
--set mse.namespace=prod \
--set gateway.zuul=true \
--install \
--values mse-simple-demo/values.yaml
其中可以修改的参数如下:
namespace
: 要安装到的K8s命名空间。可选,一般为default。registry
: 容器镜像地址前缀。images.version
:镜像版本。mse.namespace
: 接入MSE微服务治理的微服务命名空间,可以用来区分环境。默认值为mse-demo。autoscaling
:是否开启自动伸缩。默认值为false。resources.enable
:是否设置resources的requests配置。默认值为false。
基础功能验证
全链路灰度
使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心>全链路灰度。
创建泳道组
在全链路灰度页面:
单击创建泳道组及泳道。如果您选择的微服务空间内已经创建过泳道组,则单击+创建泳道组。
在创建泳道组页面,设置如下相关配置,然后单击确定。
创建泳道
在全链路灰度页面底部:
单击点击创建第一个分流泳道。如果您选择的微服务空间内已经创建过泳道,则单击创建泳道。
在创建泳道面板,设置流控泳道相关配置,然后单击确定。
普通请求走基础版本
Web页面的地址为网关SLB的地址,可以在ACK控制台对应创建的集群详情页面找到工作负载>无状态,在无状态页面单击对应的spring-cloud-zuul网关进入详情页,单击访问方式,在访问方式的服务 (Service)栏下的外部端点列可以看到IP地址和端口。
在浏览器中访问网关的SLB地址,进行如下请求。
灰度请求走灰度版本
无损上下线
使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心 > 应用治理 。在应用列表页面单击需要治理的应用,进入应用概览页面。
配置无损上下线
在应用概览页面的左侧导航栏选择流量治理。默认具备一部分无损上下线能力,需要完整能力可在控制台开启并配置无损上下线相关配置。
查看事件以及流程
更多内容,请参见无损上下线。
流控规则
使用路径:登录MSE治理中心控制台,在左侧栏选择治理中心 > 应用治理。在应用列表页面单击需要治理的应用,进入应用概览页面。
配置流控规则
在应用概览页面的左侧导航栏选择流量治理。在流量治理页面选择流量防护 > 接口流控,然后单击新增流控规则。
限流效果
在浏览器中访问网关的SLB地址,进行如下请求。
A有三个节点,单机限流5,通过QPS稳定15。
更多内容,请参见什么是流量防护。
请求示例
localhost需要换成网关SLB的地址,可以进入到网关的Pod中发起请求。
# 普通请求
http://localhost:20000/A/a
A[10.0.0.47][config=base] -> B[10.0.0.39] -> C[10.0.0.48]
# 灰度请求
http://localhost:20000/A/a?name=xiaoming
Agray[10.0.0.41][config=base] -> B[10.0.0.55] -> Cgray[10.0.0.30]
# 普通请求(Feign)
http://localhost:20000/A/aByFeign
A[10.0.0.47][config=base] -> B[10.0.0.55]
# 普通请求(a先后请求b和c)
http://localhost:20000/A/a2bc
A[10.0.0.47][config=base] -> C[10.0.0.48]
A[10.0.0.47][config=base] -> B[10.0.0.55] -> C[10.0.0.49]
# Dubbo请求
http://localhost:20000/A/dubbo
A[10.0.0.44] -> B[10.0.0.39]name:A -> C[10.0.0.49] params:A
# Dubbo灰度请求
http://localhost:20000/A/dubbo?name=xiaoming
Agray[10.0.0.41] -> B[10.0.0.39]name:A -> Cgray[10.0.0.30] params:A
# 限流测试用请求
http://localhost:20000/A/flow
A[10.0.0.17][config=base] -> B[10.0.0.39] sleepTime:9 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-flow
A[10.0.0.17] -> B[10.0.0.55]name:A -> C[10.0.0.48] params:A
http://localhost:20000/A/isolate
A[10.0.0.42][config=base] -> B[10.0.0.55] sleepTime:504 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-isolate
A[10.0.0.17] -> B[10.0.0.55]name:isolate -> C[10.0.0.49] params:isolate
http://localhost:20000/A/params/hot
A[10.0.0.17][config=base] params:hot -> B[10.0.0.55] sleepTime:5 params:hot -> C[10.0.0.49] sleepTime:6 params:hot code:200
http://localhost:20000/A/dubbo-params/hot
A[10.0.0.17] params:hot -> B[10.0.0.55]name:hot -> C[10.0.0.49] params:hot
# 数据库请求
http://localhost:20000/A/sql?command=query&id=1
A[10.0.0.44][config=base] -> B[10.0.0.39] result:{"age":1,"email":"emailUpdate%40demo.com","id":1,"name":"name1Update"}
http://localhost:20000/A/sql?command=update&name=name1Update&email=emailUpd***@demo.com&age=1&id=1
A[10.0.0.44][config=base] -> B[10.0.0.55] result:true
# spring boot 请求
http://localhost:20000/spring_boot
更多说明
应用接入
目前使用的方式是为每个需要接入的应用都显式地在Deployment的Label中配置了msePilotAutoEnable: "on"
进行接入。实际使用中,您可以通过MSE的运维中心给K8s集群的命名空间开启微服务治理,进行批量接入。
更多内容,请参见ACK微服务应用接入MSE治理中心。
无损上下线
如果刚开始部署的时候没有开启无损上下线,但是后续的过程中想观察,可以通过如下方式开启。
如果您需要使用详细的无损上下线功能,可以登录ACK控制台的集群信息页面,选择左侧导航栏的运维管理 > 组件管理,在搜索框中搜索
cronhpa
然后单击安装。使用如下YAML创建定时伸缩任务,其中Namespace字段要和安装Helm时选择的K8s Namespace一致。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-deployment-spring-cloud-b
namespace: mse-demo # 注意 namespace 字段要和 helm install 时选择的 k8s namespace 一致
spec:
jobs:
- name: 扩容
schedule: 0 0/6 * * * *
targetSize: 6
- name: 缩容
schedule: 0 5/6 * * * *
targetSize: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: spring-cloud-b
网关自动请求配置
默认开启各种请求的自动发送,可以登录ACK控制台的集群信息页面,单击导航栏工作负载>无状态,进入无状态页面之后单击spring-cloud-gateway/spring-cloud-zuul应用。进入详情页之后,单击页面右上角编辑,可以配置如下环境变量来做到各种请求的自动发起配置。
环境变量key | 含义 | 默认值 |
enable.auto | 自动流量总开关 | true |
enable.rpc.invoke | Dubbo请求开关 | true |
enable.sql | 数据库请求开关 | true |
enable.sentinel.demo.flow | sentinel规则相关请求开关,其中
| true |
enable.gray | 打标方式灰度请求开关 | false |
demo.qps | 请求速率qps(控制/a的请求速率,其他请求相对速率) | 20 |