部署的流程圖
部署的詳細(xì)過(guò)程
編譯Docker鏡像
Sentinel源碼下載
https://gitee.com/pingfanrenbiji/Sentinel.git
Sentinel-dashboard編譯打包
編寫Dockerfile文件
FROM?openjdk:8-jdk
#?環(huán)境變量
ENV?LC_ALL=zh_CN.utf8
ENV?LANG=zh_CN.utf8
ENV?LANGUAGE=zh_CN.utf8
#?開放端口
EXPOSE?8080
#?指定工作目錄
WORKDIR?/app
#?將當(dāng)前目錄下的jar包復(fù)制道鏡像中的/app目錄下
COPY?sentinel-dashboard.jar?.
#?時(shí)間同步設(shè)置
#?設(shè)置權(quán)限?chown?用戶:所在組?文件目錄?0表示root用戶所在的組標(biāo)識(shí)盐捷;1001是指定了一個(gè)用戶標(biāo)識(shí)
#?chmod?讀取權(quán)限?r?=?4,寫入權(quán)限?w?=?2,執(zhí)行權(quán)限?x?=?1
#?3個(gè)數(shù)字分別代表?擁有者,組用戶养晋,其他用戶的權(quán)限
#?775中的第一個(gè)7表示4+2+1?表示擁有者擁有讀寫執(zhí)行權(quán)限
#?第二個(gè)7當(dāng)前用戶所在組中的用戶擁有者擁有讀寫執(zhí)行權(quán)限
#?第三個(gè)5表示其他用戶有讀和執(zhí)行的權(quán)限?沒(méi)有寫的權(quán)限
RUN?/bin/cp?/usr/share/zoneinfo/Asia/Shanghai?/etc/localtime?&&echo'Asia/Shanghai'>/etc/timezone?\
&&?chown?1001:0?-R?/app?\
&&?chmod?775?-R?/app
#?java啟動(dòng)jar包
ENTRYPOINT?["java","-Dfile.encoding=UTF8","-Dsun.jnu.encoding=UTF8","-jar","sentinel-dashboard.jar"]
編譯docker鏡像
docker?build?-t?sentinel-dashboard:1.8.2?.
啟動(dòng)下確認(rèn)Dockerfile沒(méi)問(wèn)題
docker?run?-p?8080:8080?-d?sentinel-dashboard:1.8.2?sentinel
http://localhost:8080/#/login
說(shuō)明Dockerfile沒(méi)有問(wèn)題
K8S部署
pod.yml
apiVersion:?apps/v1
kind:?StatefulSet
metadata:
name:?sentinel
labels:
app:?sentinel
spec:
serviceName:?sentinel
replicas:?1
selector:
matchLabels:
app:?sentinel
template:
metadata:
labels:
app:?sentinel
spec:
containers:
-?name:?sentinel
image:?sentinel-dashboard:1.8.2
imagePullPolicy:?IfNotPresent
resources:
limits:
cpu:?450m
memory:?1024Mi
requests:
cpu:?400m
memory:?1024Mi
env:
-?name:?TZ
value:?Asia/Shanghai
-?name:?JAVA_OPT_EXT
value:?-Dserver.servlet.session.timeout=7200
-?name:?SERVER_HOST
valueFrom:
configMapKeyRef:
name:?sentinel-cm
key:?sentinel.server.host
-?name:?SERVER_PORT
valueFrom:
configMapKeyRef:
name:?sentinel-cm
key:?sentinel.server.port
-?name:?USERNAME
valueFrom:
configMapKeyRef:
name:?sentinel-cm
key:?sentinel.auth.username
-?name:?PASSWORD
valueFrom:
configMapKeyRef:
name:?sentinel-cm
key:?sentinel.auth.password
ports:
-?containerPort:?8280#Dashboard服務(wù)的端口?客戶端向控制臺(tái)發(fā)送心跳包的控制臺(tái)地址,指定控制臺(tái)后客戶端會(huì)自動(dòng)向該地址發(fā)送心跳包
-?containerPort:?8719#客戶端的端口?提供給Dashboard訪問(wèn)
volumeMounts:
-?name:?vol-log
mountPath:?/opt/logs
volumes:
-?name:?vol-log
hostPath:
path:?/opt/docker/k8s/sentinel/logs
type:?Directory
service.yml
apiVersion:?v1
kind:?Service
metadata:
name:?sentinel
labels:
app:?sentinel
spec:
type:?NodePort
ports:
-?port:?8280
targetPort:?8280
nodePort:?30280
name:?web
-?port:?8719
targetPort:?8719
nodePort:?30719
name:?api
selector:
app:?sentinel
cm.yml
apiVersion:?v1
kind:?ConfigMap
metadata:
name:?sentinel-cm
data:
sentinel.server.host:"192.168.43.22"#服務(wù)器IP地址
sentinel.server.port:"8280"
sentinel.auth.username:"sentinel"
sentinel.auth.password:"sentinel"
create.s.sentinel.start.sh
#!/usr/bin/env?bash
DIR=$(cd$(dirname$0);pwd)
mkdir?-p${DIR}/sentinel/logs
chmod?-R?777${DIR}/sentinel/logs
kubectl?create?-f${DIR}/sentinel/cm.yml
kubectl?create?-f${DIR}/sentinel/service.yml
kubectl?create?-f${DIR}/sentinel/pod.yml
kubectl?get?pod
echo-e"\n\n\n"
echo"?success"
k8s部署
啟動(dòng)成功
kubectl?logs?-f?sentinel-0
可以看到sentinel-dashboard默認(rèn)的日志目錄是${user.home}/logs/csp/目錄下
用戶標(biāo)識(shí)是1001?和?chown配置的一致
k8s部署sentinel-dashboard成功
http://localhost:30280/#/login
在網(wǎng)關(guān)應(yīng)用中配置限流規(guī)則
引入依賴
com.alibaba.csp
sentinel-spring-cloud-gateway-adapter
1.8.2
com.alibaba.csp
sentinel-transport-simple-http
在配置文件中配置
spring:
cloud:
sentinel:
transport:
dashboard:?192.168.43.22:30280
port:?192.168.43.22:30719
定一個(gè)資源
服務(wù)起來(lái)之后就可以在控制臺(tái)看到
在sentinel中給指定資源配置限流規(guī)則
為了測(cè)試設(shè)置1秒只允許1個(gè)QPS?1秒內(nèi)超過(guò)1個(gè)的請(qǐng)求被攔截
訪問(wèn)測(cè)試接口即可以看到限流的情況
該docker鏡像沒(méi)有問(wèn)題 生成tar包上傳鏡像庫(kù)或到其他地方部署
docker?image?save?sentinel-dashboard:1.8.2?-o?sentinel-dashboard.1.8.2.tar