Nacos-K8s部署全過程
Nacos-K8s 項目提供了在 Kubernetes 環(huán)境中部署 Nacos 的解決方案,支持多種部署方式,包括快速啟動、基于 NFS 存儲的持久化部署、基于 Ceph 存儲的部署以及使用 Helm 和 Operator 的部署方式。
部署方式概覽
Nacos-K8s 提供了多種部署方式以滿足不同的使用場景:
- 快速啟動模式 - 使用 emptyDir 存儲,適合測試環(huán)境,但存在數(shù)據(jù)丟失風險
- NFS 存儲持久化部署 - 使用 NFS 提供持久化存儲,適合生產(chǎn)環(huán)境
- Ceph 存儲持久化部署 - 使用 Ceph 提供持久化存儲,適合生產(chǎn)環(huán)境
- Helm 部署 - 使用 Helm Chart 簡化部署過程
- Operator 部署 - 使用 Nacos Operator 提供更高級的運維能力
前提條件
- Kubernetes 集群 1.12+
- kubectl 命令行工具
- 根據(jù)選擇的部署方式準備相應的存儲系統(tǒng)(NFS、Ceph 等)
部署方式詳解
快速啟動模式
快速啟動模式適用于測試和開發(fā)環(huán)境,它使用 emptyDir 卷,這意味著當 Pod 被刪除時數(shù)據(jù)會丟失。
部署步驟
克隆項目倉庫:
git clone https://github.com/nacos-group/nacos-k8s.git cd nacos-k8s
執(zhí)行快速啟動腳本:
chmod +x quick-startup.sh ./quick-startup.sh
或者手動執(zhí)行:
# 部署 MySQL kubectl create -f deploy/mysql/mysql-local.yaml # 部署 Nacos kubectl create -f deploy/nacos/nacos-quick-start.yaml
特點
- 無需配置外部存儲
- 啟動速度快
- 數(shù)據(jù)在 Pod 刪除后會丟失
- 適用于測試和開發(fā)環(huán)境
NFS 存儲持久化部署
NFS 模式使用 NFS 提供持久化存儲,適合生產(chǎn)環(huán)境。
部署步驟
1.部署 NFS Provisioner:
# 創(chuàng)建 RBAC 權限(如果使用非 default 命名空間,請先修改 rbac.yaml) kubectl create -f deploy/nfs/rbac.yaml # 部署 NFS Client Provisioner(注意修改 deployment.yaml 中的 NFS 服務器地址和路徑) kubectl create -f deploy/nfs/deployment.yaml # 創(chuàng)建 StorageClass kubectl create -f deploy/nfs/class.yaml
2.部署 MySQL:
kubectl create -f deploy/mysql/mysql-nfs.yaml
3.初始化數(shù)據(jù)庫:
從 Nacos GitHub 倉庫 獲取數(shù)據(jù)庫初始化腳本并執(zhí)行。
4.配置并部署 Nacos:
修改 deploy/nacos/nacos-pvc-nfs.yaml 中的數(shù)據(jù)庫配置:
data: mysql.host: "數(shù)據(jù)庫地址" mysql.db.name: "數(shù)據(jù)庫名稱" mysql.port: "端口" mysql.user: "用戶名" mysql.password: "密碼"
然后部署 Nacos:
kubectl create -f deploy/nacos/nacos-pvc-nfs.yaml
特點
- 數(shù)據(jù)持久化存儲
- 支持自動擴容
- 需要預先配置好 NFS 服務器
Ceph 存儲持久化部署
Ceph 模式使用 Ceph 提供持久化存儲,也是一種適合生產(chǎn)環(huán)境的選擇。
部署步驟
- 下載 external-storage:
git clone https://github.com/kubernetes-incubator/external-storage.git
- 安裝 cephfs-provisioner:
cd external-storage/ceph/cephfs/deploy/ NAMESPACE=nacos sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/*.yaml sed -r -i "N;s/(name: PROVISIONER_SECRET_NAMESPACE.*\n[[:space:]]*)value:.*/\1value: $NAMESPACE/" ./rbac/deployment.yaml kubectl -n $NAMESPACE apply -f ./rbac
- 安裝 ceph rbd-provisioner:
cd external-storage/ceph/rbd/deploy/ NAMESPACE=nacos sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/clusterrolebinding.yaml ./rbac/rolebinding.yaml kubectl -n $NAMESPACE apply -f ./rbac
- 創(chuàng)建 ceph secret:
# 在 ceph 服務器上查看 key ceph auth list # 創(chuàng)建 secrets kubectl create secret generic ceph-secret-admin --from-literal=key='AQBTTLRcKesZGxAABYIX6GwiiBooyJ9Jxxxxxx==' --namespace=nacos kubectl create secret generic ceph-secret-mysql --from-literal=key='AQBTTLRcKesZGxAABYIX6GwiiBooyJ9Jyyyyyy==' --type=kubernetes.io/rbd --namespace=nacos kubectl create secret generic ceph-secret-mysql-slave --from-literal=key='AQBTTLRcKesZGxAABYIX6GwiiBooyJ9Jzzzzzz==' --type=kubernetes.io/rbd --namespace=nacos
- 創(chuàng)建 StorageClass 和 PVC:
kubectl -n nacos apply -f deploy/ceph/sc.yaml kubectl -n nacos apply -f deploy/ceph/pvc.yaml
- 安裝 MySQL:
kubectl -n nacos apply -f deploy/mysql/mysql-ceph.yaml
- 安裝 Nacos:
kubectl -n nacos apply -f deploy/nacos/nacos-pvc-ceph.yaml
已知問題
- 啟動后需要重啟 pod nacos-0 集群才能正常使用
Helm 部署
Helm 部署方式通過 Helm Chart 簡化了 Nacos 的部署過程。
部署步驟
- 使用默認配置安裝:
helm install nacos ./helm --set nacos.authToken="{base64 string}",nacos.identityKey={key},nacos.identityValue={value}
- 如需自定義配置,可以修改 values.yaml 文件或通過
--set參數(shù)指定。
特點
- 部署簡單
- 支持豐富的配置選項
- 易于升級和管理
Operator 部署
Nacos Operator 提供了更加智能化的 Nacos 集群管理方式,具備一定的運維能力。
部署步驟
安裝 Operator:
# 使用 Helm 安裝 helm install nacos-operator ./operator/chart/nacos-operator # 或者使用 kubectl 安裝 kubectl apply -f operator/chart/nacos-operator/nacos-operator-all.yaml
創(chuàng)建 Nacos 實例:
創(chuàng)建一個簡單的單實例配置文件:
# nacos.yaml apiVersion: nacos.io/v1alpha1 kind: Nacos metadata: name: nacos spec: type: standalone image: nacos/nacos-server:1.4.1 replicas: 1
然后應用配置:
kubectl apply -f nacos.yaml
創(chuàng)建集群模式實例:
# nacos_cluster.yaml apiVersion: nacos.io/v1alpha1 kind: Nacos metadata: name: nacos spec: type: cluster image: nacos/nacos-server:1.4.1 replicas: 3
然后應用配置:
kubectl apply -f nacos_cluster.yaml
特點
- 提供高級運維能力
- 支持自動狀態(tài)檢查和維護
- 更好的集群管理能力
驗證部署結果
無論使用哪種部署方式,都可以通過以下方式驗證部署結果:
- 服務注冊
curl -X PUT 'http://cluster-ip:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
- 服務發(fā)現(xiàn)
curl -X GET 'http://cluster-ip:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
- 發(fā)布配置
curl -X POST "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
- 獲取配置
curl -X GET "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
- 查看 Pod 狀態(tài)
kubectl get pod -l app=nacos
擴容測試
對于支持動態(tài)擴容的部署方式(如 NFS 和 Ceph),可以通過以下方式進行擴容測試:
查看擴容前的集群配置:
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
執(zhí)行擴容操作:
kubectl scale sts nacos --replicas=3
查看擴容后的集群配置:
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
驗證各節(jié)點 Leader 狀態(tài)一致性:
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
配置參數(shù)說明
Nacos 配置參數(shù)
| 參數(shù)名 | 必須 | 描述 |
|---|---|---|
| mysql.host | 否 | 自建數(shù)據(jù)庫地址 |
| mysql.db.name | 是 | 數(shù)據(jù)庫名稱 |
| mysql.port | 否 | 數(shù)據(jù)庫端口 |
| mysql.user | 是 | 數(shù)據(jù)庫用戶名 |
| mysql.password | 是 | 數(shù)據(jù)庫密碼 |
| SPRING_DATASOURCE_PLATFORM | 是 | 數(shù)據(jù)庫類型,默認 embedded,支持 mysql |
| NACOS_REPLICAS | 否 | Nacos 啟動節(jié)點數(shù)量 |
| NACOS_SERVER_PORT | 否 | Nacos 端口,為 peer_finder 插件提供端口 |
| NACOS_APPLICATION_PORT | 否 | Nacos 應用端口 |
| PREFER_HOST_MODE | 是 | 啟動 Nacos 集群按域名解析 |
NFS 配置參數(shù)
| 參數(shù)名 | 必須 | 描述 |
|---|---|---|
| NFS_SERVER | 是 | NFS 服務端地址 |
| NFS_PATH | 是 | NFS 共享目錄 |
| server | 是 | NFS 服務端地址 |
| path | 是 | NFS 共享目錄 |
MySQL 配置參數(shù)
| 參數(shù)名 | 必須 | 描述 |
|---|---|---|
| MYSQL_ROOT_PASSWORD | 否 | ROOT 密碼 |
| MYSQL_DATABASE | 是 | 數(shù)據(jù)庫名稱 |
| MYSQL_USER | 是 | 數(shù)據(jù)庫用戶名 |
| MYSQL_PASSWORD | 是 | 數(shù)據(jù)庫密碼 |
| Nfs:server | 否 | NFS 服務端地址(使用本地部署不需要配置) |
| Nfs:path | 否 | NFS 共享目錄(使用本地部署不需要配置) |
注意事項
- 生產(chǎn)環(huán)境推薦使用持久化存儲(NFS 或 Ceph)而不是快速啟動模式
- 如果使用自定義數(shù)據(jù)庫,需要先初始化數(shù)據(jù)庫腳本
- 使用 NFS 或 Ceph 時需要確保存儲類正確配置
- 擴容時需要配置 NACOS_REPLICAS 參數(shù)或使用動態(tài)擴容插件
- 推薦使用 Nacos Operator 以獲得更好的運維體驗
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
K8s集群中的DNS服務CoreDNS實戰(zhàn)案例詳解
在 Kubernetes(K8s)中,DNS 服務是實現(xiàn)服務發(fā)現(xiàn)和 Pod 通信的核心組件之一,用于解決集群內(nèi)資源通過域名而非 IP 地址進行訪問的需求,本文將詳細解析 K8s DNS 服務的原理、組件、配置及應用場景,感興趣的朋友一起看看吧2025-06-06

