Nacos-K8s部署全过程

 更新时间:2026年02月07日 10:52:22   作者:CarlowZJ  
Nacos-K8s项目提供了多种在Kubernetes环境中部署Nacos的方案,包括快速启动、NFS持久化、Ceph持久化、Helm和Operator部署,每种方式都有其适用的场景和特点,如快速启动适用于测试,NFS和Ceph持久化支持数据持久化,Helm和Operator提供更高级的运维功能

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 提供持久化存储,适合生产环境。

部署步骤

1.部署 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

2.部署 MySQL:

kubectl create -f deploy/mysql/mysql-nfs.yaml

3.初始化数据库:

Nacos GitHub 仓库 获取数据库初始化脚本并执行。

4.配置并部署 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 提供持久化存储,也是一种适合生产环境的选择。

部署步骤

  1. 下载 external-storage:
git clone https://github.com/kubernetes-incubator/external-storage.git
  1. 安装 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
  1. 安装 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
  1. 创建 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
  1. 创建 StorageClass 和 PVC:
kubectl -n nacos apply -f deploy/ceph/sc.yaml
kubectl -n nacos apply -f deploy/ceph/pvc.yaml
  1. 安装 MySQL:
kubectl -n nacos apply -f deploy/mysql/mysql-ceph.yaml
  1. 安装 Nacos:
kubectl -n nacos apply -f deploy/nacos/nacos-pvc-ceph.yaml

已知问题

  • 启动后需要重启 pod nacos-0 集群才能正常使用

Helm 部署

Helm 部署方式通过 Helm Chart 简化了 Nacos 的部署过程。

部署步骤

  1. 使用默认配置安装:
helm install nacos ./helm --set nacos.authToken="{base64 string}",nacos.identityKey={key},nacos.identityValue={value}
  1. 如需自定义配置,可以修改 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_REPLICASNacos 启动节点数量
NACOS_SERVER_PORTNacos 端口,为 peer_finder 插件提供端口
NACOS_APPLICATION_PORTNacos 应用端口
PREFER_HOST_MODE启动 Nacos 集群按域名解析

NFS 配置参数

参数名必须描述
NFS_SERVERNFS 服务端地址
NFS_PATHNFS 共享目录
serverNFS 服务端地址
pathNFS 共享目录

MySQL 配置参数

参数名必须描述
MYSQL_ROOT_PASSWORDROOT 密码
MYSQL_DATABASE数据库名称
MYSQL_USER数据库用户名
MYSQL_PASSWORD数据库密码
Nfs:serverNFS 服务端地址(使用本地部署不需要配置)
Nfs:pathNFS 共享目录(使用本地部署不需要配置)

注意事项

  • 生产环境推荐使用持久化存储(NFS 或 Ceph)而不是快速启动模式
  • 如果使用自定义数据库,需要先初始化数据库脚本
  • 使用 NFS 或 Ceph 时需要确保存储类正确配置
  • 扩容时需要配置 NACOS_REPLICAS 参数或使用动态扩容插件
  • 推荐使用 Nacos Operator 以获得更好的运维体验

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 举例详解k8s是如何实现自动扩缩的

    举例详解k8s是如何实现自动扩缩的

    Kubernetes(简称k8s)是一个开源的,用于自动部署、扩展和管理容器化应用程序的系统,这篇文章主要介绍了k8s是如何实现自动扩缩的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • 在K8S中使用ArgoCD做持续部署的方案

    在K8S中使用ArgoCD做持续部署的方案

    ArgoCD是一个基于Kubernetes的GitOps持续交付工具,应用的部署和更新都可以在Git仓库上同步实现,并自带一个可视化界面,本文介绍如何使用Git+Argocd方式来实现在k8s中部署和更新应用服务,感兴趣的朋友一起看看吧
    2025-03-03
  • K8s集群中的DNS服务CoreDNS实战案例详解

    K8s集群中的DNS服务CoreDNS实战案例详解

    在 Kubernetes(K8s)中,DNS 服务是实现服务发现和 Pod 通信的核心组件之一,用于解决集群内资源通过域名而非 IP 地址进行访问的需求,本文将详细解析 K8s DNS 服务的原理、组件、配置及应用场景,感兴趣的朋友一起看看吧
    2025-06-06
  • k8s中如何实现pod自动扩缩容详解

    k8s中如何实现pod自动扩缩容详解

    在实际生产系统中,经常会遇到某个服务需要扩容的场景,可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景,下面这篇文章主要给大家介绍了关于k8s中如何实现pod自动扩缩容的相关资料,需要的朋友可以参考下
    2022-08-08
  • k8s部署并测试ingress-nginx的详细过程

    k8s部署并测试ingress-nginx的详细过程

    这篇文章主要介绍了k8s部署并测试ingress-nginx的详细过程,本文通过一个demo示例给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • k8s常用命令大全(最新推荐)

    k8s常用命令大全(最新推荐)

    这篇文章主要介绍了k8s常用命令大全,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • K8S中Pod重启策略及重启可能原因详细讲解

    K8S中Pod重启策略及重启可能原因详细讲解

    在k8s集群中当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建,下面这篇文章主要给大家介绍了关于K8S中Pod重启策略及重启可能原因的相关资料,需要的朋友可以参考下
    2023-05-05
  • ragflow k8s部署过程图文详解

    ragflow k8s部署过程图文详解

    这篇文章主要介绍了ragflow k8s部署详细过程,本文将使用ragflow-0.18.0,来进行演示详细部署过程,需要的朋友可以参考下
    2025-04-04
  • k8s中kubeconfig的配置以及使用详解

    k8s中kubeconfig的配置以及使用详解

    每当与集群交互的时候少不了的是身份认证,使用kubeconfig(即证书)和token两种认证方式是最简单也最通用的认证方式,下面这篇文章主要给大家介绍了关于k8s中kubeconfig的配置以及使用的相关资料,需要的朋友可以参考下
    2022-01-01
  • K8S Operator部署及自定义详解

    K8S Operator部署及自定义详解

    这篇文章主要为大家介绍了K8S Operator部署及自定义详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论