部署過(guò)程
數(shù)據(jù)庫(kù)
- 在RDS上創(chuàng)建名為nacos的庫(kù)以及用戶(hù),記錄密碼缕允。
- 為nacos用戶(hù)授權(quán)nacos庫(kù)的讀寫(xiě)權(quán)限。
- 記錄RDS的內(nèi)網(wǎng)連接地址及端口。
- 通過(guò)Navicat連接RDS狞悲,對(duì)nacos庫(kù)導(dǎo)入數(shù)據(jù)結(jié)構(gòu)。
.sql 文件可以從官方 clone 出來(lái)的目錄中找到妇斤。
git clone https://github.com/nacos-group/nacos-k8s.git
NAS
在NAS上創(chuàng)建一個(gè)掛載點(diǎn)摇锋,選擇和ACK集群同VPC即可。
PVC
- 進(jìn)入ACK集群站超。
- 菜單欄選擇存儲(chǔ)>存儲(chǔ)聲明荸恕。
- 切換到目標(biāo)命名空間。如果還未創(chuàng)建命名空間死相,先創(chuàng)建融求。
- 點(diǎn)擊創(chuàng)建存儲(chǔ)聲明,參考下面的截圖進(jìn)行配置算撮。
image.png - 創(chuàng)建完成后生宛,記錄存儲(chǔ)聲明的名稱(chēng)nacos-data-pvc,后續(xù)使用肮柜。
ConfigMap
- 在ACK控制臺(tái)菜單欄中選擇配置管理>配置項(xiàng)陷舅。
- 單擊使用YAML創(chuàng)建資源。
- 輸入以下內(nèi)容审洞,單擊創(chuàng)建蔑赘,創(chuàng)建名為nacos-cm的ConfigMap,用于傳遞RDS的信息。
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
data:
mysql.host: "*****.mysql.rds.aliyuncs.com"
mysql.db.name: "nacos"
mysql.port: "3306"
mysql.user: "nacos"
mysql.password: "*******"
Secret
為了開(kāi)啟 Nacos 的 https 訪(fǎng)問(wèn)缩赛,所以需要參考下面的步驟耙箍,創(chuàng)建 Secret。
- 在ACK控制臺(tái)菜單欄中選擇配置管理>保密字典酥馍。
- 單擊創(chuàng)建辩昆,將SSL證書(shū)的公私鑰配置進(jìn)去,保存并記錄字典名稱(chēng)旨袒。
image
SSL 證書(shū)請(qǐng)自行申請(qǐng)獲取汁针,不開(kāi)啟 https 訪(fǎng)問(wèn)的話(huà),這里可以省略砚尽,ingress 里也省略 tls 的部分即可施无。
Service
- 在ACK控制臺(tái)菜單欄中選擇網(wǎng)絡(luò)>服務(wù)。
- 單擊使用YAML創(chuàng)建資源必孤。
- 輸入以下內(nèi)容猾骡,單擊創(chuàng)建,創(chuàng)建名為nacos-svc的服務(wù)敷搪。
apiVersion: v1
kind: Service
metadata:
name: nacos-svc
labels:
app: nacos
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
## 兼容1.4.x版本的選舉端口
- port: 7848
name: old-raft-rpc
targetPort: 7848
clusterIP: None
selector:
app: nacos
端口均和官網(wǎng)文檔保持一致兴想。
StatefulSet
- 在ACK控制臺(tái)菜單欄中選擇工作負(fù)載>有狀態(tài)。
- 單擊使用YAML創(chuàng)建資源赡勘。
- 輸入以下內(nèi)容嫂便,單擊創(chuàng)建,創(chuàng)建名為nacos-sfs的有狀態(tài)負(fù)載闸与。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos-sfs
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nacos
serviceName: nacos-svc
template:
metadata:
annotations:
pod.alpha.kubernetes.io/initialized: 'true'
labels:
app: nacos
spec:
containers:
- env:
- name: NACOS_REPLICAS
value: '2'
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: SERVICE_NAME
value: nacos-svc
- name: DOMAIN_NAME
value: cluster.local
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
key: mysql.host
name: nacos-cm
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
key: mysql.db.name
name: nacos-cm
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
key: mysql.port
name: nacos-cm
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
key: mysql.user
name: nacos-cm
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
configMapKeyRef:
key: mysql.password
name: nacos-cm
- name: NACOS_SERVER_PORT
value: '8848'
- name: NACOS_APPLICATION_PORT
value: '8848'
- name: PREFER_HOST_MODE
value: hostname
- name: NACOS_AUTH_ENABLE
value: 'true'
image: 'nacos/nacos-server:latest'
imagePullPolicy: Always
name: nacos
ports:
- containerPort: 8848
name: client-port
protocol: TCP
- containerPort: 9848
name: client-rpc
protocol: TCP
- containerPort: 9849
name: raft-rpc
protocol: TCP
- containerPort: 7848
name: old-raft-rpc
protocol: TCP
resources:
requests:
memory: 2Gi
limits:
memory: 2Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /home/nacos/plugins/peer-finder
name: volume-nacos-data
subPath: peer-finder
- mountPath: /home/nacos/data
name: volume-nacos-data
subPathExpr: $(POD_NAME)
- mountPath: /home/nacos/logs
name: volume-nacos-data
subPath: logs
dnsPolicy: ClusterFirst
initContainers:
- image: 'nacos/nacos-peer-finder-plugin:1.1'
imagePullPolicy: Always
name: peer-finder-plugin-install
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /home/nacos/plugins/peer-finder
name: volume-nacos-data
subPath: peer-finder
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: volume-nacos-data
persistentVolumeClaim:
claimName: nacos-data
updateStrategy:
type: RollingUpdate
- 此處的副本數(shù)為2毙替,后續(xù)結(jié)果驗(yàn)證時(shí)將擴(kuò)容到 3 個(gè)。
- mysql相關(guān)的配置從上面創(chuàng)建的ConfigMap中獲取践樱。
- 限制資源使用量為內(nèi)存2G蔚龙。
- 掛載了3個(gè)存儲(chǔ)卷。
- 服務(wù)名稱(chēng)與上面創(chuàng)建的服務(wù)一致映胁。
-
檢查負(fù)載的狀態(tài)木羹,等待幾分鐘后,確認(rèn)狀態(tài)均為running解孙。
image -
查看日志坑填,確認(rèn)最新日志顯示nacos啟動(dòng)成功,并且以集群+外置存儲(chǔ)方式運(yùn)行弛姜。
image
Ingress
- 在ACK控制臺(tái)菜單欄中選擇網(wǎng)絡(luò)>路由脐瑰。
- 單擊使用YAML創(chuàng)建資源。
- 輸入以下內(nèi)容廷臼,單擊創(chuàng)建苍在,創(chuàng)建名為nacos-ingress的路由绝页。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
nginx.ingress.kubernetes.io/service-weight: ''
name: nacos-ingress
namespace: ops-share
spec:
rules:
- host: nacos.xxx.com
http:
paths:
- backend:
serviceName: nacos-svc
servicePort: 8848
path: /
pathType: ImplementationSpecific
tls:
- hosts:
- nacos.xxx.com
secretName: nacos-secret1629271865685
status:
loadBalancer:
ingress:
- ip: x.x.x.x
- 其中8848為Nacos的控制臺(tái)端口。
- nacos-svc為上面創(chuàng)建的服務(wù)名稱(chēng)寂恬。
- nacos.xxx.com為訪(fǎng)問(wèn)域名续誉,根據(jù)實(shí)際情況填寫(xiě)。
- secretName為創(chuàng)建的保密字典名稱(chēng)初肉。
- ip為負(fù)載均衡的外網(wǎng)IP地址酷鸦,以便下面進(jìn)行DNS解析。
DNS
創(chuàng)建一條A記錄牙咏,名稱(chēng)nacosx指向上面負(fù)載均衡的外網(wǎng)地址 臼隔。
結(jié)果驗(yàn)證
- 通過(guò)域名訪(fǎng)問(wèn),確認(rèn)可以正常訪(fǎng)問(wèn)到Nacos的后臺(tái)妄壶。
- 在集群管理>節(jié)點(diǎn)列表里摔握,確認(rèn)可以看到和k8s副本數(shù)一致的節(jié)點(diǎn)數(shù),并且狀態(tài)為UP丁寄。
image.png - 在ACK控制臺(tái)氨淌,調(diào)整nacos-sfs的副本數(shù),增加到3個(gè)副本狡逢,確認(rèn)Nacos后臺(tái)的節(jié)點(diǎn)數(shù)變?yōu)?個(gè),并且狀態(tài)為UP拼卵。即節(jié)點(diǎn)數(shù)與副本數(shù)保持完全一致奢浑。
- 差個(gè)每個(gè) Nacos 節(jié)點(diǎn)的元數(shù)據(jù),確認(rèn)其中不存在報(bào)錯(cuò)腋腮。
參考文檔
更多信息
- 開(kāi)啟鑒權(quán):創(chuàng)建nacos-sfs時(shí)雀彼,添加的環(huán)境變量中
NACOS_AUTH_ENABLE=true
就是用來(lái)開(kāi)啟鑒權(quán)的。如果沒(méi)有添加此環(huán)境變量即寡,默認(rèn)不啟用鑒權(quán)徊哑。 - 鑒權(quán)開(kāi)啟后,給用戶(hù)授權(quán)時(shí)聪富,務(wù)必授予 讀寫(xiě) 權(quán)限莺丑,以免服務(wù)無(wú)法正常注冊(cè)及讀取配置。