Kubernetes Nacos集羣

前言

最近幾天完成了 Nacos 在Kubernetes 部署,順便寫篇文章記錄下部署過程,項目地址Nacos-K8s,有興趣的可以去了解下,後續會提交到Nacos-Group 裏面。

Kubernetes Nacos

本項目包含一個可構建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacos

已知限制

  • 暫時不支持動態增量擴容
  • 必須使用持久卷,本項目實現NFS持久卷的例子,如果使用emptyDirs可能會導致數據丟失

Docker 鏡像

build目錄中包含了已經打好包的Nacos(基於develop分支,已提PR,目前的release版本都不支持k8s集羣)項目包,以及鏡像製作文件,鏡像基礎環境Ubuntu 16.04、Open JDK 1.8(JDK 8u111).目前鏡像已經提交到Docker Hub

項目目錄

目錄 描述
build 構建Nacos鏡像的項目包以及Dockerfile
deploy k8s部署yaml文件
Initdb Nacos 集羣數據庫初始化SQL腳本

使用指南

前提要求

  • 本項目的使用,是基於你已經對Kubernetes有一定的認知,所以對如何搭建K8S集羣,請自行google或者百度
  • NFS安裝方面也不是本文的重點,請自行google或者百度

環境準備

  • 機器配置(作者演示使用阿里雲ECS)
機器內網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
  • Kubernetes 版本:1.12.2 (如果你和我一樣只使用了三臺機器,那麼記得開啓master節點的部署功能)
  • NFS 版本:4.1 在k8s-master進行安裝Server端,並且指定共享目錄,本項目指定的/data/nfs-share
  • Git

搭建步驟

Clone項目

在每臺機器上都Clone本工程,演示工程就是導入根目錄,所以部署路徑都是root/nacos-k8s

git clone https://github.com/paderlol/nacos-k8s.git

部署數據庫

數據庫是以指定節點的方式部署,主庫部署在node01節點,從庫部署在node02節點.

  • 部署主庫
#進入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路徑如下所示

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

部署NFS

  • 創建角色 K8S在1.6以後默認開啓了RBAC
kubectl create -f deploy/nfs/rbac.yaml

提示:如果你的K8S命名空間不是默認"default",那麼在創建RBAC之前先執行以下腳本

# 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
  • 創建ServiceAccount 以及部署NFS-Client Provisioner
kubectl create -f deploy/nfs/deployment.yaml
  • 創建NFS StorageClass
kubectl create -f deploy/nfs/class.yaml
  • 查看NFS是否運行正常
kubectl get pod -l app=nfs-client-provisioner

部署Nacos

  • 獲取主庫從庫在K8S的地址
# 查看主庫和從庫的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
  • 修改配置文件depoly/nacos/nacos-pvc-nfs.yaml,找到如下配置,填入上一步查到的主庫和從庫地址
  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"
  • 創建並運行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時,使用一下以下方式創建

kubectl create -f nacos-k8s/deploy/nacos/nacos-quick-start.yaml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章