Nacos-K8s 项目提供了在 Kubernetes 环境中部署 Nacos 的解决方案,支持多种部署方式,包括快速启动、基于 NFS 存储的持久化部署、基于 Ceph 存储的部署以及使用 Helm 和 Operator 的部署方式。
目录
部署方式概览
Nacos-K8s 提供了多种部署方式以满足不同的使用场景:
- 快速启动模式 - 使用 emptyDir 存储,适合测试环境,但存在数据丢失风险
- NFS 存储持久化部署 - 使用 NFS 提供持久化存储,适合生产环境
- Ceph 存储持久化部署 - 使用 Ceph 提供持久化存储,适合生产环境
- Helm 部署 - 使用 Helm Chart 简化部署过程
- Operator 部署 - 使用 Nacos Operator 提供更高级的运维能力
前提条件
- Kubernetes 集群 1.12+
- kubectl 命令行工具
- 根据选择的部署方式准备相应的存储系统(NFS、Ceph 等)
部署方式详解
快速启动模式
快速启动模式适用于测试和开发环境,它使用 emptyDir 卷,这意味着当 Pod 被删除时数据会丢失。
部署步骤
- 克隆项目仓库:
git clone https://github.com/nacos-group/nacos-k8s.git
cd nacos-k8s
- 执行快速启动脚本:
chmod +x quick-startup.sh
./quick-startup.sh
或者手动执行:
# 部署 MySQL
kubectl create -f deploy/mysql/mysql-local.yaml
# 部署 Nacos
kubectl create -f deploy/nacos/nacos-quick-start.yaml
特点
- 无需配置外部存储
- 启动速度快
- 数据在 Pod 删除后会丢失
- 适用于测试和开发环境
NFS 存储持久化部署
NFS 模式使用 NFS 提供持久化存储,适合生产环境。
部署步骤
- 部署 NFS Provisioner:
# 创建 RBAC 权限(如果使用非 default 命名空间,请先修改 rbac.yaml)
kubectl create -f deploy/nfs/rbac.yaml
# 部署 NFS Client Provisioner(注意修改 deployment.yaml 中的 NFS 服务器地址和路径)
kubectl create -f deploy/nfs/deployment.yaml
# 创建 StorageClass
kubectl create -f deploy/nfs/class.yaml
- 部署 MySQL:
kubectl create -f deploy/mysql/mysql-nfs.yaml
-
初始化数据库:
从 Nacos GitHub 仓库 获取数据库初始化脚本并执行。 -
配置并部署 Nacos:
修改deploy/nacos/nacos-pvc-nfs.yaml中的数据库配置:
data:
mysql.host: "数据库地址"
mysql.db.name: "数据库名称"
mysql.port: "端口"
mysql.user: "用户名"
mysql.password: "密码"
然后部署 Nacos:
kubectl create -f deploy/nacos/nacos-pvc-nfs.yaml
特点
- 数据持久化存储
- 支持自动扩容
- 需要预先配置好 NFS 服务器
Ceph 存储持久化部署
Ceph 模式使用 Ceph 提供持久化存储,也是一种适合生产环境的选择。
部署步骤
- 下载 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
- 创建 ceph secret:
# 在 ceph 服务器上查看 key
ceph auth list
# 创建 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
- 创建 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参数指定。
特点
- 部署简单
- 支持丰富的配置选项
- 易于升级和管理
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
- 创建 Nacos 实例:
创建一个简单的单实例配置文件:
# 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
- 创建集群模式实例:
# 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
特点
- 提供高级运维能力
- 支持自动状态检查和维护
- 更好的集群管理能力
验证部署结果
无论使用哪种部署方式,都可以通过以下方式验证部署结果:
服务注册
curl -X PUT 'http://cluster-ip:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://cluster-ip:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
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 状态
kubectl get pod -l app=nacos
扩容测试
对于支持动态扩容的部署方式(如 NFS 和 Ceph),可以通过以下方式进行扩容测试:
- 查看扩容前的集群配置:
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
- 执行扩容操作:
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
- 验证各节点 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 配置参数
| 参数名 | 必须 | 描述 |
|---|---|---|
| mysql.host | 否 | 自建数据库地址 |
| mysql.db.name | 是 | 数据库名称 |
| mysql.port | 否 | 数据库端口 |
| mysql.user | 是 | 数据库用户名 |
| mysql.password | 是 | 数据库密码 |
| SPRING_DATASOURCE_PLATFORM | 是 | 数据库类型,默认 embedded,支持 mysql |
| NACOS_REPLICAS | 否 | Nacos 启动节点数量 |
| NACOS_SERVER_PORT | 否 | Nacos 端口,为 peer_finder 插件提供端口 |
| NACOS_APPLICATION_PORT | 否 | Nacos 应用端口 |
| PREFER_HOST_MODE | 是 | 启动 Nacos 集群按域名解析 |
NFS 配置参数
| 参数名 | 必须 | 描述 |
|---|---|---|
| NFS_SERVER | 是 | NFS 服务端地址 |
| NFS_PATH | 是 | NFS 共享目录 |
| server | 是 | NFS 服务端地址 |
| path | 是 | NFS 共享目录 |
MySQL 配置参数
| 参数名 | 必须 | 描述 |
|---|---|---|
| MYSQL_ROOT_PASSWORD | 否 | ROOT 密码 |
| MYSQL_DATABASE | 是 | 数据库名称 |
| MYSQL_USER | 是 | 数据库用户名 |
| MYSQL_PASSWORD | 是 | 数据库密码 |
| Nfs:server | 否 | NFS 服务端地址(使用本地部署不需要配置) |
| Nfs:path | 否 | NFS 共享目录(使用本地部署不需要配置) |
注意事项
- 生产环境推荐使用持久化存储(NFS 或 Ceph)而不是快速启动模式
- 如果使用自定义数据库,需要先初始化数据库脚本
- 使用 NFS 或 Ceph 时需要确保存储类正确配置
- 扩容时需要配置 NACOS_REPLICAS 参数或使用动态扩容插件
- 推荐使用 Nacos Operator 以获得更好的运维体验
1515

被折叠的 条评论
为什么被折叠?



