15分鐘完成服務(wù)治理能力快速體驗(Java版)
本文介紹如何快速完成服務(wù)治理核心能力的體驗。
前提條件
- 說明
Kubernetes集群要求最低配置:12 Core 24 GiB。
對于Kubernetes集群網(wǎng)絡(luò)要求有公網(wǎng)訪問權(quán)限,用于下載GitHub中的Demo。
開放EIP暴露API Server,用于CloudShell訪問。
ACK集群安裝ack-kubernetes-cronhpa-controller組件,可參見管理組件。
部署Demo
Demo介紹
該Demo使用Nacos作為注冊中心,存有兩個網(wǎng)關(guān),分別為SpringCloudGateway和Zuul(兩者可選擇是否開啟),Demo的默認調(diào)用配置為A->B->C,其中A、C均有灰度版本。您可以在代碼倉庫獲取應(yīng)用代碼。
應(yīng)用名稱 | 服務(wù)框架版本 | 涉及組件 | 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文件打包。
登錄容器服務(wù)管理控制臺。選擇目標集群,在集群信息頁面,單擊通過 CloudShell 管理集群。
上傳Helm包。
使用命令
unzip mse-simple-demo.zip
解壓Demo。使用命令
kubectl create namespace mse-demo
創(chuàng)建命名空間(對應(yīng)--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參數(shù)。
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
其中可以修改的參數(shù)如下:
namespace
: 要安裝到的K8s命名空間??蛇x,一般為default。registry
: 容器鏡像地址前綴。images.version
:鏡像版本。mse.namespace
: 接入MSE微服務(wù)治理的微服務(wù)命名空間,可以用來區(qū)分環(huán)境。默認值為mse-demo。autoscaling
:是否開啟自動伸縮。默認值為false。resources.enable
:是否設(shè)置resources的requests配置。默認值為false。
基礎(chǔ)功能驗證
全鏈路灰度
使用路徑:登錄MSE治理中心控制臺,在左側(cè)欄選擇治理中心>全鏈路灰度。
創(chuàng)建泳道組
在全鏈路灰度頁面:
單擊創(chuàng)建泳道組及泳道。如果您選擇的微服務(wù)空間內(nèi)已經(jīng)創(chuàng)建過泳道組,則單擊+創(chuàng)建泳道組。
在創(chuàng)建泳道組頁面,設(shè)置如下相關(guān)配置,然后單擊確定。
創(chuàng)建泳道
在全鏈路灰度頁面底部:
單擊點擊創(chuàng)建第一個分流泳道。如果您選擇的微服務(wù)空間內(nèi)已經(jīng)創(chuàng)建過泳道,則單擊創(chuàng)建泳道。
在創(chuàng)建泳道面板,設(shè)置流控泳道相關(guān)配置,然后單擊確定。
普通請求走基礎(chǔ)版本
Web頁面的地址為網(wǎng)關(guān)SLB的地址,可以在ACK控制臺對應(yīng)創(chuàng)建的集群詳情頁面找到工作負載>無狀態(tài),在無狀態(tài)頁面單擊對應(yīng)的spring-cloud-zuul網(wǎng)關(guān)進入詳情頁,單擊訪問方式,在訪問方式的服務(wù) (Service)欄下的外部端點列可以看到IP地址和端口。
在瀏覽器中訪問網(wǎng)關(guān)的SLB地址,進行如下請求。
灰度請求走灰度版本
更多內(nèi)容,請參見基于自建Spring Cloud Gateway或Zuul網(wǎng)關(guān)實現(xiàn)全鏈路灰度。
無損上下線
使用路徑:登錄MSE治理中心控制臺,在左側(cè)欄選擇治理中心 > 應(yīng)用治理 。在應(yīng)用列表頁面單擊需要治理的應(yīng)用,進入應(yīng)用概覽頁面。
配置無損上下線
在應(yīng)用概覽頁面的左側(cè)導(dǎo)航欄選擇流量治理。默認具備一部分無損上下線能力,需要完整能力可在控制臺開啟并配置無損上下線相關(guān)配置。
查看事件以及流程
更多內(nèi)容,請參見無損上下線。
流控規(guī)則
使用路徑:登錄MSE治理中心控制臺,在左側(cè)欄選擇治理中心 > 應(yīng)用治理。在應(yīng)用列表頁面單擊需要治理的應(yīng)用,進入應(yīng)用概覽頁面。
配置流控規(guī)則
在應(yīng)用概覽頁面的左側(cè)導(dǎo)航欄選擇流量治理。在流量治理頁面選擇流量防護 > 接口流控,然后單擊新增流控規(guī)則。
限流效果
在瀏覽器中訪問網(wǎng)關(guān)的SLB地址,進行如下請求。
A有三個節(jié)點,單機限流5,通過QPS穩(wěn)定15。
更多內(nèi)容,請參見什么是流量防護。
請求示例
localhost需要換成網(wǎng)關(guān)SLB的地址,可以進入到網(wǎng)關(guān)的Pod中發(fā)起請求。
# 普通請求
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
# 數(shù)據(jù)庫請求
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
更多說明
應(yīng)用接入
目前使用的方式是為每個需要接入的應(yīng)用都顯式地在Deployment的Label中配置了msePilotAutoEnable: "on"
進行接入。實際使用中,您可以通過MSE的運維中心給K8s集群的命名空間開啟微服務(wù)治理,進行批量接入。
更多內(nèi)容,請參見ACK微服務(wù)應(yīng)用接入MSE治理中心。
無損上下線
如果剛開始部署的時候沒有開啟無損上下線,但是后續(xù)的過程中想觀察,可以通過如下方式開啟。
如果您需要使用詳細的無損上下線功能,可以登錄ACK控制臺的集群信息頁面,選擇左側(cè)導(dǎo)航欄的運維管理 > 組件管理,在搜索框中搜索
cronhpa
然后單擊安裝。使用如下YAML創(chuàng)建定時伸縮任務(wù),其中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
網(wǎng)關(guān)自動請求配置
默認開啟各種請求的自動發(fā)送,可以登錄ACK控制臺的集群信息頁面,單擊導(dǎo)航欄工作負載>無狀態(tài),進入無狀態(tài)頁面之后單擊spring-cloud-gateway/spring-cloud-zuul應(yīng)用。進入詳情頁之后,單擊頁面右上角編輯,可以配置如下環(huán)境變量來做到各種請求的自動發(fā)起配置。
環(huán)境變量key | 含義 | 默認值 |
enable.auto | 自動流量總開關(guān) | true |
enable.rpc.invoke | Dubbo請求開關(guān) | true |
enable.sql | 數(shù)據(jù)庫請求開關(guān) | true |
enable.sentinel.demo.flow | sentinel規(guī)則相關(guān)請求開關(guān),其中
| true |
enable.gray | 打標方式灰度請求開關(guān) | false |
demo.qps | 請求速率qps(控制/a的請求速率,其他請求相對速率) | 20 |