環(huán)境準(zhǔn)備
Kubernetes準(zhǔn)備
你需要準(zhǔn)備一個(gè)Kubernetes集群,如圖我的集群已經(jīng)準(zhǔn)備完畢:
數(shù)據(jù)庫(kù)準(zhǔn)備
nacos可以將配置文件存儲(chǔ)到數(shù)據(jù)庫(kù)當(dāng)中,所以我們要先準(zhǔn)備一個(gè)擁有nacos數(shù)據(jù)表結(jié)構(gòu)的數(shù)據(jù)庫(kù),這樣的數(shù)據(jù)庫(kù)鏡像我已經(jīng)準(zhǔn)備好了,當(dāng)然你也可以自己制作這個(gè)鏡像:
registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-mysql:2.0.4
我之前寫過一篇Kubernetes上安裝數(shù)據(jù)庫(kù)的文章:https://blog.csdn.net/m0_51510236/article/details/132482351,這里我就直接上yaml文件了,注意鏡像使用的是上面提到的帶有nacos配置表結(jié)構(gòu)的鏡像:
apiVersion: v1
kind: Namespace
metadata:
name: deploy-test
spec: {}
status: {}
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: deploy-mysql-nfs-pv
namespace: deploy-test
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
# 注意修改你的nfs服務(wù)器地址和目錄
server: 192.168.1.160
path: /data/nfs/nacos-mysql
storageClassName: "nfs"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deploy-mysql-nfs-pvc
namespace: deploy-test
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 1Gi
volumeName: deploy-mysql-nfs-pv
---
apiVersion: v1
data:
# 密碼為root,具體密碼設(shè)置可參考我上篇文章
mysql_root_password: cm9vdA==
kind: Secret
metadata:
name: mysql-password
namespace: deploy-test
---
apiVersion: v1
kind: Service
metadata:
name: deploy-mysql-svc
namespace: deploy-test
labels:
app: mysql
spec:
ports:
- port: 3306
name: mysql
targetPort: 3306
nodePort: 30306
selector:
app: mysql
type: NodePort
sessionAffinity: ClientIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deploy-mysql
namespace: deploy-test
spec:
selector:
matchLabels:
app: mysql
serviceName: "deploy-mysql-svc"
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
terminationGracePeriodSeconds: 10
containers:
- args:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --lower_case_table_names=1
- --default-time_zone=+8:00
name: mysql
image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-mysql:2.0.4
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: mysql_root_password
name: mysql-password
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: deploy-mysql-nfs-pvc
查看創(chuàng)建結(jié)果:
kubectl get all -o wide -n deploy-test
發(fā)現(xiàn)容器以及運(yùn)行:
進(jìn)入容器當(dāng)中查看表結(jié)構(gòu):
kubectl exec -itn deploy-test pod/deploy-mysql-0 -- mysql -uroot -p
查看結(jié)果,目前已經(jīng)擁有這樣的表結(jié)構(gòu):
部署nacos集群
我們部署mysql的時(shí)候創(chuàng)建了一個(gè) deploy-test
命名空間,部署nacos的時(shí)候?qū)acos部署到這個(gè)命名空間當(dāng)中。
官方鏡像地址
nacos官方提供的鏡像地址:https://hub.docker.com/r/nacos/nacos-server,在當(dāng)中我們可以看到有那么多環(huán)境變量配置:
創(chuàng)建configmap
上面那張圖片中我們要用到這么幾個(gè)參數(shù):
參數(shù)名 | 描述 |
---|---|
MODE | nacos啟動(dòng)模式,cluster為集群模式,standalone為單節(jié)點(diǎn)模式 |
NACOS_SERVERS | nacos集群的服務(wù)器地址,格式為 ip1:port ip2:port 多個(gè)用空格隔開 |
SPRING_DATASOURCE_PLATFORM | nacos使用的數(shù)據(jù)庫(kù),只支持mysql |
MYSQL_SERVICE_HOST | mysql服務(wù)器地址 |
MYSQL_SERVICE_PORT | mysql的端口,默認(rèn)為3306 |
MYSQL_SERVICE_DB_NAME | nacos配置的數(shù)據(jù)庫(kù)名,我們創(chuàng)建mysql時(shí)配置的數(shù)據(jù)庫(kù)名為nacos_config |
MYSQL_SERVICE_USER | mysql的用戶名 |
MYSQL_SERVICE_PASSWORD | mysql的密碼 |
MYSQL_DATABASE_NUM | mysql數(shù)據(jù)庫(kù)的數(shù)量,默認(rèn)為1 |
MYSQL_SERVICE_DB_PARAM | mysql連接字符串后面的參數(shù),默認(rèn):characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false |
JVM_XMS | jvm永久區(qū)最小大小,默認(rèn):1g |
JVM_XMX | jvm永久區(qū)最大大小,默認(rèn):1g |
JVM_XMN | jvm新生區(qū)大小,默認(rèn):512m |
我們根據(jù)上面參數(shù)創(chuàng)建一個(gè)configmap,執(zhí)行下面代碼獲取創(chuàng)建configmap的k8s資源清單文件yaml:
kubectl create configmap nacos-deploy-config -n deploy-test \
--from-literal=mode=cluster \
--from-literal=nacos-servers='deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848 deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848' \
--from-literal=spring-datasource-platform=mysql \
--from-literal=mysql-service-host='deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local' \
--from-literal=mysql-service-port=3306 \
--from-literal=mysql-service-db-name=nacos_config \
--from-literal=mysql-service-user=root \
--from-literal=mysql-database-num=1 \
--from-literal=mysql-service-db-param='characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false' \
--from-literal=jvm-xms=256m \
--from-literal=jvm-xmx=256m \
--from-literal=jvm-xmn=128m \
--dry-run=client -o yaml
注意下面這一行:
--from-literal=nacos-servers='deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848 deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848'
因?yàn)槲覀冞@次只部署兩個(gè)節(jié)點(diǎn)的集群,如果你打算部署多個(gè)節(jié)點(diǎn),那么你往后面加即可。同時(shí)這行命令我們也沒設(shè)置數(shù)據(jù)庫(kù)的密碼,這是因?yàn)槲覀儎?chuàng)建mysql的時(shí)候就創(chuàng)建了一個(gè)密碼的secret,待會(huì)直接使用即可。我們看這行命令的執(zhí)行結(jié)果:
發(fā)現(xiàn)成功創(chuàng)建了一個(gè)k8s的configmap資源清單文件,文件內(nèi)容:
apiVersion: v1
data:
jvm-xmn: 128m
jvm-xms: 256m
jvm-xmx: 256m
mode: cluster
mysql-database-num: "1"
mysql-service-db-name: nacos_config
mysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
mysql-service-host: deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local
mysql-service-port: "3306"
mysql-service-user: root
nacos-servers: deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848
deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848
spring-datasource-platform: mysql
kind: ConfigMap
metadata:
name: nacos-deploy-config
namespace: deploy-test
先將這個(gè)yaml保存下來以供接下來使用:
創(chuàng)建部署文件
部署文件內(nèi)容:
apiVersion: v1
kind: Service
metadata:
name: deploy-nacos-svc
namespace: deploy-test
labels:
app: nacos
spec:
ports:
- port: 8848
name: nacos
targetPort: 8848
nodePort: 30848
selector:
app: nacos
type: NodePort
sessionAffinity: ClientIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deploy-nacos
namespace: deploy-test
spec:
selector:
matchLabels:
app: nacos
serviceName: "deploy-nacos-svc"
replicas: 2
template:
metadata:
labels:
app: nacos
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nacos
# 如果能拉取到dockerhub上的鏡像就用這個(gè)
# image: docker.io/nacos/nacos-server:v2.0.4
# 拉取不到dockerhub上的鏡像就用我推送到阿里云上的nacos官方鏡像
image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-server:v2.0.4
ports:
- containerPort: 8848
name: nacos
env: # 引用各類環(huán)境變量為nacos做配置,注意大部分引用configmap,只有數(shù)據(jù)庫(kù)密碼引用的創(chuàng)建mysql時(shí)候的secret
- name: JVM_XMN
valueFrom:
configMapKeyRef:
key: jvm-xmn
name: nacos-deploy-config
- name: JVM_XMS
valueFrom:
configMapKeyRef:
key: jvm-xms
name: nacos-deploy-config
- name: JVM_XMX
valueFrom:
configMapKeyRef:
key: jvm-xmx
name: nacos-deploy-config
- name: MODE
valueFrom:
configMapKeyRef:
key: mode
name: nacos-deploy-config
- name: MYSQL_DATABASE_NUM
valueFrom:
configMapKeyRef:
key: mysql-database-num
name: nacos-deploy-config
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
key: mysql-service-db-name
name: nacos-deploy-config
- name: MYSQL_SERVICE_DB_PARAM
valueFrom:
configMapKeyRef:
key: mysql-service-db-param
name: nacos-deploy-config
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
key: mysql-service-host
name: nacos-deploy-config
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
secretKeyRef:
key: mysql_root_password
name: mysql-password
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
key: mysql-service-port
name: nacos-deploy-config
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
key: mysql-service-user
name: nacos-deploy-config
- name: NACOS_SERVERS
valueFrom:
configMapKeyRef:
key: nacos-servers
name: nacos-deploy-config
- name: SPRING_DATASOURCE_PLATFORM
valueFrom:
configMapKeyRef:
key: spring-datasource-platform
name: nacos-deploy-config
根據(jù)yaml資源清單文件部署nacos
根據(jù)上面步驟我們得到了完整的 deploy-nacos.yaml
文件內(nèi)容:
apiVersion: v1
data:
jvm-xmn: 128m
jvm-xms: 256m
jvm-xmx: 256m
mode: cluster
mysql-database-num: "1"
mysql-service-db-name: nacos_config
mysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
mysql-service-host: deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local
mysql-service-port: "3306"
mysql-service-user: root
nacos-servers: deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848
deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848
spring-datasource-platform: mysql
kind: ConfigMap
metadata:
name: nacos-deploy-config
namespace: deploy-test
---
apiVersion: v1
kind: Service
metadata:
name: deploy-nacos-svc
namespace: deploy-test
labels:
app: nacos
spec:
ports:
- port: 8848
name: nacos
targetPort: 8848
nodePort: 30848
selector:
app: nacos
type: NodePort
sessionAffinity: ClientIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deploy-nacos
namespace: deploy-test
spec:
selector:
matchLabels:
app: nacos
serviceName: "deploy-nacos-svc"
replicas: 2
template:
metadata:
labels:
app: nacos
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nacos
image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-server:v2.0.4
ports:
- containerPort: 8848
name: nacos
env:
- name: JVM_XMN
valueFrom:
configMapKeyRef:
key: jvm-xmn
name: nacos-deploy-config
- name: JVM_XMS
valueFrom:
configMapKeyRef:
key: jvm-xms
name: nacos-deploy-config
- name: JVM_XMX
valueFrom:
configMapKeyRef:
key: jvm-xmx
name: nacos-deploy-config
- name: MODE
valueFrom:
configMapKeyRef:
key: mode
name: nacos-deploy-config
- name: MYSQL_DATABASE_NUM
valueFrom:
configMapKeyRef:
key: mysql-database-num
name: nacos-deploy-config
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
key: mysql-service-db-name
name: nacos-deploy-config
- name: MYSQL_SERVICE_DB_PARAM
valueFrom:
configMapKeyRef:
key: mysql-service-db-param
name: nacos-deploy-config
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
key: mysql-service-host
name: nacos-deploy-config
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
secretKeyRef:
key: mysql_root_password
name: mysql-password
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
key: mysql-service-port
name: nacos-deploy-config
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
key: mysql-service-user
name: nacos-deploy-config
- name: NACOS_SERVERS
valueFrom:
configMapKeyRef:
key: nacos-servers
name: nacos-deploy-config
- name: SPRING_DATASOURCE_PLATFORM
valueFrom:
configMapKeyRef:
key: spring-datasource-platform
name: nacos-deploy-config
接下來執(zhí)行這行命令開始部署:
kubectl apply -f deploy-nacos.yaml
查看執(zhí)行結(jié)果:
執(zhí)行這行命令查看部署結(jié)果:
kubectl get pod -o wide -n deploy-test
執(zhí)行后的結(jié)果可以看到兩個(gè)nacos節(jié)點(diǎn)部署成功:
執(zhí)行這行命令查看nacos暴露的nodeport端口:
kubectl get svc -o wide -n deploy-test
可以看到端口為 30848
:
我們可以通過任何一個(gè)Kubernetes節(jié)點(diǎn)的IP地址加上這個(gè)端口訪問nacos:
輸入默認(rèn)的用戶名和密碼 nacos/nacos
即可登陸到首頁(yè):
我們來到 集群管理->節(jié)點(diǎn)管理
可以看到兩個(gè)節(jié)點(diǎn)都為up狀態(tài):
接下來我們來到 配置管理->配置列表
點(diǎn)擊 +
新增一個(gè)配置:
我們先隨便新增一個(gè)yaml配置文件:
點(diǎn)擊下面的發(fā)布之后查看數(shù)據(jù)庫(kù):文章來源:http://www.zghlxwxcb.cn/news/detail-775855.html
數(shù)據(jù)庫(kù)里面已經(jīng)新增了這個(gè)配置的數(shù)據(jù)。Kubernetes集群里面安裝nacos集群就已經(jīng)安裝好了。文章來源地址http://www.zghlxwxcb.cn/news/detail-775855.html
到了這里,關(guān)于Kubernetes(k8s)上搭建nacos集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!