最近幾天完成了 Nacos 在Kubernetes 部署,順便寫篇文章記錄下部署過程,項目地址Nacos-K8s,有興趣的能夠去了解下,後續會提交到Nacos-Group 裏面。node
本項目包含一個可構建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacosmysql
在build目錄中包含了已經打好包的Nacos(基於develop分支,已提PR,目前的release版本都不支持k8s集羣)項目包,以及鏡像製做文件,鏡像基礎環境Ubuntu 16.0四、Open JDK 1.8(JDK 8u111).目前鏡像已經提交到Docker Hub。git
目錄 | 描述 |
---|---|
build | 構建Nacos鏡像的項目包以及Dockerfile |
deploy | k8s部署yaml文件 |
Initdb | Nacos 集羣數據庫初始化SQL腳本 |
機器內網IP | 主機名 | 機器配置 |
---|---|---|
172.17.79.3 | k8s-master | CentOS Linux release 7.4.1708 (Core) 單核 內存4G 普通雲盤40G |
172.17.79.4 | node01 | CentOS Linux release 7.4.1708 (Core) 單核 內存4G 普通雲盤40G |
172.17.79.5 | node02 | CentOS Linux release 7.4.1708 (Core) 單核 內存4G 普通雲盤40G |
在每臺機器上都Clone本工程,演示工程就是導入根目錄,因此部署路徑都是root/nacos-k8sgithub
git clone https://github.com/paderlol/nacos-k8s.git
數據庫是以指定節點的方式部署,主庫部署在node01節點,從庫部署在node02節點.sql
#進入clone下來的工程根目錄 cd nacos-k8s # 在k8s上建立mysql主庫 kubectl create -f deploy/mysql/mysql.yml
#進入clone下來的工程根目錄 cd nacos-k8s # 在k8s上建立mysql備庫 kubectl create -f deploy/mysql/mysql-bak.yml
注意:若是工程不是導入機器的根目錄,那麼一樣須要修改mysql.yaml和mysql-bak.yaml中掛載路徑,由於數據庫PVC使用的是本地卷,請注意更改配置中的path路徑以下所示docker
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/root/nacos-k8s/mysql" --- ....其餘配置 --- apiVersion: v1 kind: PersistentVolume metadata: name: mysql-init-pv-volume labels: type: local spec: storageClassName: initdb capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/root/nacos-k8s/initdb"
#查看主庫是否正常運行 kubectl get pod -l app=mysql NAME READY STATUS RESTARTS AGE mysql-bak-5c5b5bd479-922zv 1/1 Running 0 2d23h #查看備庫是否正常運行 kubectl get pod -l app=mysql-bak
kubectl create -f deploy/nfs/rbac.yaml
提示:若是你的K8S命名空間不是默認"default",那麼在建立RBAC以前先執行如下腳本shell
# Set the subject of the RBAC objects to the current namespace where the provisioner is being deployed $ NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}') $ NAMESPACE=${NS:-default} $ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml
kubectl create -f deploy/nfs/deployment.yaml
kubectl create -f deploy/nfs/class.yaml
kubectl get pod -l app=nfs-client-provisioner
# 查看主庫和從庫的cluster ip kubectl get svc mysql NodePort 10.105.42.247 <none> 3306:31833/TCP 2d23h mysql-bak NodePort 10.105.35.138 <none> 3306:31522/TCP 2d23h
db.host.zero: "主庫地址" db.name.zero: "nacos_devtest" db.port.zero: "3306" db.host.one: "備庫地址" db.name.one: "nacos_devtest" db.port.one: "3306" db.user: "nacos" db.password: "nacos"
kubectl create -f nacos-k8s/deploy/nacos/nacos-pvc-nfs.yaml
kubectl get pod -l app=nacos AME 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
curl -X PUT 'http://集羣地址:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
curl -X GET 'http://集羣地址:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName'
curl -X POST "http://集羣地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
curl -X GET "http://集羣地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
Q:若是不想搭建NFS,而且想體驗nacos-k8s?數據庫
A:能夠跳過部署nfs的步驟,最後建立運行nfs時,使用一下如下方式建立api
kubectl create -f nacos-k8s/deploy/nacos/nacos-quick-start.yaml