本文介紹如何快速完成服務治理核心能力的體驗。
前提條件
- 說明
Kubernetes叢集要求最低配置:12 Core 24 GiB。
對於Kubernetes叢集網路要求有公網存取權限,用於下載GitHub中的Demo。
開放EIP暴露API Server,用於CloudShell訪問。
ACK叢集安裝ack-kubernetes-cronhpa-controller組件,可參見安裝組件。
如果使用的是子賬戶,可以聯絡主賬戶臨時授予AliyunMSEFullAccess許可權,完成體驗後再移除,生產實踐中應按需授權許可權,有關服務治理授權請參見微服務治理中心授權。
部署Demo
Demo介紹
該Demo使用Nacos作為註冊中心,存有兩個網關,分別為SpringCloudGateway和Zuul(兩者可選擇是否開啟),Demo的預設調用配置為A->B->C,其中A、C均有灰階版本。您可以在代碼倉庫擷取應用代碼。
應用程式名稱 | 服務架構版本 | 涉及組件 | Demo |
Zuul | Spring Cloud Greenwich | zuul | |
SpringCloudGateway | spring-cloud-starter-gateway 4.1.2 | spring-cloud-starter-gateway | |
A | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/rocketmq/nacos/loadbalancer | |
B | Spring Cloud 2023.0.1 Dubbo 3.3.0 | httpclient/mybatis/druid/nacos | |
C | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/nacos |

Helm包下載
下載Demo的Helm包,官方會定期更新該Helm包和鏡像。

部署方式
使用ACK的CloudShell部署mse-simple-demo
將mse-simple-demo檔案打包。
登入Container Service管理主控台。選擇目的地組群,在叢集資訊頁面,單擊通過 Workbench 管理叢集。

上傳Helm包。

使用命令
unzip mse-simple-demo.zip解壓Demo。使用命令
kubectl create namespace mse-demo建立命名空間(對應--namespace)。
Helm方式部署mse-simple-demo
使用如下Helm命令部署mse-simple-demo。
helm upgrade mse-simple-demo mse-simple-demo \
--set mse.namespace=mse-demo \
--set gateway.springcloud=true \
--install \
--namespace mse-demo \
--values mse-simple-demo/values.yaml其中可以修改的參數如下:
namespace: 要安裝到的K8s命名空間。可選,一般為default。registry: 容器鏡像地址首碼。當您的叢集無法拉取 Demo 鏡像時,可以將 Demo 鏡像同步到您帳號下的鏡像倉庫並修改此地址。images.version:鏡像版本,當前最新版本為 3.1.0。mse.namespace: 接入MSE微服務治理的微服務命名空間,可以用來區分環境。預設值為mse-demo。nacos.host: Nacos 註冊中心的地址。Demo 會自動拉起一個 Nacos Server,若您想將 Demo 應用註冊到其他 Nacos 地址,請配置此參數。autoscaling:是否開啟自動調整。預設值為false,開啟此項前,請確認叢集已安裝 kubernetes-cronhpa-controller 組件。resources.enable:是否設定resources的requests配置。預設值為true。
基礎功能驗證
全鏈路灰階
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心>全鏈路灰階。
建立泳道組
在全鏈路灰階頁面:
單擊建立泳道組及泳道。如果您選擇的微服務空間內已經建立過泳道組,則單擊+建立泳道組。
在建立泳道組頁面,設定如下相關配置,然後單擊確定。

建立泳道
在全鏈路灰階頁面底部:
單擊點擊建立第一個分流泳道。如果您選擇的微服務空間內已經建立過泳道,則單擊建立泳道。
在建立泳道面板,設定流控泳道相關配置,然後單擊確定。


普通請求走基礎版本
Web頁面的地址為網關SLB的地址,可以在Container Service控制台對應建立的叢集詳情頁面找到工作負載>無狀態,在無狀態頁面單擊對應的spring-cloud-gateway網關進入詳情頁,單擊訪問方式,在訪問方式的服務 (Service)欄下的外部端點列可以看到IP地址和連接埠。
在瀏覽器中訪問網關的SLB地址,進行如下請求。


灰階請求走灰階版本


無損上下線
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心 > 應用治理 。在應用列表頁面單擊需要治理的應用,進入應用概覽頁面。
配置無損上下線
在應用概覽頁面的左側導覽列選擇流量治理。預設具備一部分無損上下線能力,需要完整能力可在控制台開啟並配置無損上下線相關配置。

查看事件以及流程

更多內容,請參見無損上下線。
流控規則
使用路徑:登入MSE治理中心控制台,在左側欄選擇治理中心 > 應用治理。在應用列表頁面單擊需要治理的應用,進入應用概覽頁面。
配置流控規則
在應用概覽頁面的左側導覽列選擇流量治理。在流量治理頁面選擇流量防護 > 介面流控,然後單擊新增流控規則。

限流效果
在瀏覽器中訪問網關的SLB地址,進行如下請求。

A有一個節點,單機限流5,通過QPS穩定5。

更多內容,請參見什麼是流量防護。
請求樣本
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和ACS微服務應用接入MSE治理中心(Java版)。
無損上下線
如果剛開始部署的時候沒有開啟無損上下線,但是後續的過程中想觀察,可以通過如下方式開啟。
如果您需要使用詳細的無損上下線功能,可以登入Container Service控制台的叢集資訊頁面,選擇左側導覽列的營運管理 > 組件管理,在搜尋方塊中搜尋
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網關自動請求配置
預設開啟各種請求的自動發送,可以登入Container Service控制台的叢集資訊頁面,單擊導覽列工作負載 > 無狀態,進入無狀態頁面之後單擊spring-cloud-gateway應用。進入詳情頁之後,單擊頁面右上方編輯,可以配置如下環境變數來做到各種請求的自動發起配置。
環境變數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 |
