K8S上部署nacos


一、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提供唯一的主機名。 主機名采用 - 的形式。 因為nacos StatefulSet的副本字段設置為2,所以當前集群文件中只有兩個Nacos節點地址

  • 使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM