一、Clone項目
git clone https://github.com/nacos-group/nacos-k8s.git
二、自定義部署
- 在高級使用中,Nacos在K8S擁有自動擴容縮容和數據持久特性
- 請注意如果需要使用這部分功能請使用PVC持久卷,Nacos的自動擴容縮容需要依賴持久卷,以及數據持久化也是一樣
- 本例中使用的是NFS來使用PVC
2.1、創建角色
[root@master01 ~]# cd nacos-k8s/
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/rbac.yaml
2.2、如果的K8S命名空間不是default,請在部署RBAC之前執行以下腳本:
# 將RBAC對象的主題設置為部署provisioner的當前命名空間
[root@master01 nacos-k8s]# NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')
[root@master01 nacos-k8s]# NAMESPACE=${NS:-default} ## default 改成你要部署的ns的name
[root@master01 nacos-k8s]# sed -i "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml
# 然后再創建角色
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/rbac.yaml
2.3、創建 ServiceAccount
和部署 NFS-Client Provisioner
- 更改deployment.yaml的NFS的IP
- 提前部署好NFS環境
- yum install nfs-utils rpcbind -y
https://www.cnblogs.com/hsyw/p/13610960.html
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/deployment.yaml
2.4、創建 NFS StorageClass
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/class.yaml
2.5、驗證NFS部署成功
[root@master01 nacos-k8s]# kubectl get pod -l app=nfs-client-provisioner
三、部署數據庫
3.1、部署MySQL
- 同樣要改NFS
- mysql -u nacos -pnacos
[root@master01 ~]# cd nacos-k8s
[root@master01 nacos-k8s]# kubectl create -f deploy/mysql/mysql-nfs.yaml
3.2、初始化數據庫
數據庫初始化語句位置 https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql
四、部署Nacos
4.1、修改 deploy/nacos/nacos-pvc-nfs.yaml
data:
mysql.db.name: "數據庫名稱"
mysql.port: "端口"
mysql.user: "用戶名"
mysql.password: "密碼"
4.2、創建 Nacos
kubectl create -f deploy/nacos/nacos-pvc-nfs.yaml
4.3、驗證Nacos節點啟動成功
[root@master01 nacos-k8s]# kubectl get pod -l app=nacos
NAME READY STATUS RESTARTS AGE
nacos-0 1/1 Running 0 19h
nacos-1 1/1 Running 0 19h
nacos-2 1/1 Running 0 19h
訪問后台管理ui 界面
nacos 部署方式中支持部署ingress,瀏覽器訪問 http://nacos-web.nacos-demo.com/nacos/index.html ,默認用戶名密碼nacos\nacos進行管理后台的訪問
注:訪問ingress 需要對 nacos-web.nacos-demo.com 進行dns解析,解析ip 為 slave 節點ip,您的集群需要提前安裝ingress controller
擴容測試
- 在擴容前,使用
kubectl exec
獲取在pod中的Nacos集群配置文件信息
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
StatefulSet控制器根據其序數索引為每個Pod提供唯一的主機名。 主機名采用
- 使用kubectl scale 對Nacos動態擴容
kubectl scale sts nacos --replicas=3
- 在擴容后,使用
kubectl exec
獲取在pod中的Nacos集群配置文件信息
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
- 使用
kubectl exec
執行Nacos API 在每台節點上獲取當前Leader是否一致
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i curl GET "http://localhost:8848/nacos/v1/ns/raft/state"; done
到這里你可以發現新節點已經正常加入Nacos集群當中
例子部署環境
- 機器配置
內網IP | 主機名 | 配置 |
---|---|---|
172.17.79.3 | k8s-master | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.4 | node01 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.5 | node02 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
- Kubernetes 版本:1.12.2 (如果你和我一樣只使用了三台機器,那么記得開啟master節點的部署功能)
- NFS 版本:4.1 在k8s-master進行安裝Server端,並且指定共享目錄,本項目指定的/data/nfs-share
- Git
限制
- 必須要使用持久卷,否則會出現數據丟失的情況
項目目錄
目錄 | 描述 |
---|---|
plugin | 幫助Nacos集群進行動態擴容的插件Docker鏡像源碼 |
deploy | K8s 部署文件 |
配置屬性
- nacos-pvc-nfs.yaml or nacos-quick-start.yaml or nacos-no-pvc.yaml
名稱 | 必要 | 描述 |
---|---|---|
mysql.host | N | 自建數據庫地址 issue #124 |
mysql.db.name | Y | 數據庫名稱 |
mysql.port | N | 端口 |
mysql.user | Y | 用戶名 |
mysql.password | Y | 密碼 |
NACOS_REPLICAS | N | 確定執行Nacos啟動節點數量,如果不適用動態擴容插件,就必須配置這個屬性,否則使用擴容插件后不會生效 |
NACOS_SERVER_PORT | N | Nacos 端口 為peer_finder插件提供端口 |
NACOS_APPLICATION_PORT | N | Nacos 端口 |
PREFER_HOST_MODE | Y | 啟動Nacos集群按域名解析 |
- nfs deployment.yaml
名稱 | 必要 | 描述 |
---|---|---|
NFS_SERVER | Y | NFS 服務端地址 |
NFS_PATH | Y | NFS 共享目錄 |
server | Y | NFS 服務端地址 |
path | Y | NFS 共享目錄 |
- mysql
名稱 | 必要 | 描述 |
---|---|---|
MYSQL_ROOT_PASSWORD | N | ROOT 密碼 |
MYSQL_DATABASE | Y | 數據庫名稱 |
MYSQL_USER | Y | 數據庫用戶名 |
MYSQL_PASSWORD | Y | 數據庫密碼 |
Nfs:server | N | NFS 服務端地址,如果使用本地部署不需要配置 |
Nfs:path | N | NFS 共享目錄,如果使用本地部署不需要配置 |
官網:https://github.com/nacos-group/nacos-k8s/blob/master/README-CN.md