本文介绍如何快速完成服务治理核心能力的体验。
前提条件
- 说明
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=mse-2.0.1 \
--set mse.application.prefix=demo \
--set registry=registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/ \
--namespace=mse-demo
使用如下Helm命令修改mse-simple-demo参数。
helm upgrade mse-simple-demo mse-simple-demo \
--namespace=mse-demo --create-namespace \
--set mse.namespace=prod \
--install \
--values mse-simple-demo/values.yaml
其中可以修改的参数如下:
namespace
: 要安装到的K8s命名空间。可选,一般为default。registry
: 容器镜像地址前缀。version
:镜像版本。mse.namespace
: 接入MSE微服务治理的微服务命名空间,可以用来区分环境。默认值为mse-demo。autoscaling
:是否开启自动伸缩。默认值为false。resources.enableRequests
:是否设置resources的requests配置。默认值为false。
基础功能验证
全链路灰度
使用路径:治理中心 > 全链路灰度
创建泳道组
创建泳道
普通请求走基础版本
Web页面的地址为网关SLB的地址,可以在ACK的服务界面找到。
灰度请求走灰度版本
无损上下线
使用路径:治理中心 > 应用治理 > 流量治理 > 无损上下线
配置无损上下线
默认具备一部分无损上下线能力,需要完整能力前往控制台开启并配置无损上下线相关配置
查看事件以及流程
更多内容,请参见无损上下线。
流控规则
使用路径:治理中心 > 应用治理 > 流量治理 > 流量防护
配置流控规则
限流效果
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=emailUpdate@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治理中心。
无损上下线
如果刚开始部署的时候没有开启无损上下线,但是后续的过程中想观察,可以通过如下方式开启。
如果需要使用详细的无损上下线功能,首先需要在集群信息页面,选择左侧导航栏的运维管理 > 组件管理,搜索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
网关自动请求配置
默认开启各种请求的自动发送,可以通过在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 |
- 本页导读 (1)