1、構(gòu)建鏡像(DockerFile)
2、本地測(cè)試鏡像(docker run)
3、上傳至harbor(192.168.100.204:80)
4、創(chuàng)建StatefulSet和service
StatefulSet
RC、Deployment、DaemonSet都是面向無(wú)狀態(tài)的服務(wù),它們所管理的Pod的IP、名字,啟停順序等都是隨機(jī)的,而StatefulSet是什么?顧名思義,有狀態(tài)的集合,管理所有有狀態(tài)的服務(wù),比如MySQL、MongoDB集群等。
StatefulSet本質(zhì)上是Deployment的一種變體,在v1.9版本中已成為GA版本,它為了解決有狀態(tài)服務(wù)的問(wèn)題,它所管理的Pod擁有固定的Pod名稱,啟停順序,在StatefulSet中,Pod名字稱為網(wǎng)絡(luò)標(biāo)識(shí)(hostname),還必須要用到共享存儲(chǔ)。
在Deployment中,與之對(duì)應(yīng)的服務(wù)是service,而在StatefulSet中與之對(duì)應(yīng)的headless service,headless service,即無(wú)頭服務(wù),與service的區(qū)別就是它沒(méi)有Cluster IP,解析它的名稱時(shí)將返回該Headless Service對(duì)應(yīng)的全部Pod的Endpoint列表。
除此之外,StatefulSet在Headless Service的基礎(chǔ)上又為StatefulSet控制的每個(gè)Pod副本創(chuàng)建了一個(gè)DNS域名,這個(gè)域名的格式為:
$(podname).(headless server name)
FQDN:$(podname).(headless server name).namespace.svc.cluster.local
https://blog.csdn.net/weixin_44729138/article/details/106054025
5、通過(guò)serviceIP訪問(wèn)
1、構(gòu)建鏡像(DockerFile)
# 基礎(chǔ)鏡像
FROM openjdk:8-jdk-alpine
# 作者(可選)
MAINTAINER fh
# 設(shè)置時(shí)區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV LC_ALL "zh_CN.UTF-8"
# copy當(dāng)前工程jar包至容器內(nèi)
COPY sentinel-dashboard-1.8.1.jar /tmp/sentinel-dashboard-1.8.1.jar
# 運(yùn)行jar包,設(shè)置環(huán)境變量 JAVA_OPTS,通過(guò)docker run -e JAVA_OPTS='xxxxx'傳遞參數(shù),不能用 CMD [],讀取不到變量
CMD java ${JAVA_OPTS} -jar /tmp/sentinel-dashboard-1.8.1.jar
構(gòu)建:
docker build -t 192.168.100.204:80/sd/sentinel:v2 .
2、本地測(cè)試鏡像
docker run -d -p 81:8080 -e JAVA_OPTS='-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=sentinel -Dserver.servlet.session.timeout=7200' 192.168.100.204:80/sd/sentinel:v2
瀏覽器訪問(wèn):localhost:81
3、上傳至harbor(192.168.100.204:80)
docker login 192.168.100.204:80
docker push 192.168.100.204:80/sd/sentinel:v2
4、創(chuàng)建StatefulSet和service
新增sentinel.yaml和sentinel-service.yaml
sentinel.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sentinel
spec:
serviceName: sentinel
replicas: 1
template:
metadata:
labels:
app: sentinel
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
containers:
- name: sentinel
imagePullPolicy: IfNotPresent
image: 192.168.100.204:80/sd/sentinel:v2
ports:
- containerPort: 8080
name: client
env:
- name: TZ
value: Asia/Shanghai
- name: JAVA_OPTS
value: "-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=sentinel -Dserver.servlet.session.timeout=7200"
selector:
matchLabels:
app: sentinel
sentinel-service.yaml
apiVersion: v1
kind: Service
metadata:
name: sentinel-svc
labels:
app: sentinel
spec:
ports:
- protocol: TCP
name: http
port: 8080
targetPort: 8080
nodePort: 31808
type: NodePort
selector:
app: sentinel
k8s部署:
kubectl apply -f sentinel.yaml
kubectl apply -f sentinel-service.yaml
4、從外部通過(guò)serviceIP訪問(wèn)
192.168.100.202:31808
賬號(hào)sentinel 密碼sentinel
java 中的對(duì)應(yīng)配置去掉clientIp
sentinel:
ip: 192.168.100.202:31808
spring:
application:
name: 66666666
cloud:
sentinel:
transport:
dashboard: ${sentinel.ip}
port: 33000 #默認(rèn)為8719 ,
heartbeatIntervalMs: 1000
eager: true