Skip to content

Nacos配置中心部署

**本文引用的文件** - [nacos.yaml](file://lemes-cloud/src/devops/k8s/service/base/nacos.yaml) - [nacos-pgsql.yaml](file://lemes-cloud/src/devops/k8s/service/base/nacos-pgsql.yaml) - [nacos-1.yaml](file://lemes-cloud/src/devops/k8s/service/base/nacos-1.yaml) - [nacos.yml](file://lemes-cloud/src/devops/docker-compose/nacos.yml) - [config.yaml](file://lemes-cloud/src/devops/k8s/service/base/config.yaml) - [baremetal-nginx-ingress.yaml](file://lemes-cloud/src/devops/k8s/baremetal-nginx-ingress.yaml) - [ingress-real-ip.yaml](file://lemes-cloud/src/devops/k8s/ingress-real-ip.yaml)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

本文件面向运维工程师,提供DeviceMate项目中Nacos配置中心的完整部署与配置说明。内容涵盖:

  • 集群部署架构(StatefulSet、服务发现、集群成员管理)
  • 数据库集成(MySQL/PostgreSQL连接池、数据持久化、兼容层)
  • 核心配置参数(集群模式、内存优化、网络端口)
  • Ingress暴露(域名映射、SSL、负载均衡)
  • 健康检查、资源限制、存储卷
  • 故障排除建议

项目结构

与Nacos部署直接相关的文件位于lemes-cloud/src/devops目录下,主要包含:

  • Kubernetes基础服务编排:service/base下的nacos系列与config.yaml
  • Docker Compose单机部署:docker-compose/nacos.yml
  • Ingress控制器与配置:baremetal-nginx-ingress.yaml与ingress-real-ip.yaml

图表来源

章节来源

核心组件

  • StatefulSet:保证稳定网络标识与有序部署/扩缩容,副本数为3,用于构建Nacos集群。
  • Service:ClusterIP或NodePort类型,暴露客户端、RPC与旧版选举端口,供集群内部通信与外部访问。
  • ConfigMap:集中存放数据库连接信息、命名空间、分组等配置键值。
  • Ingress:将/nacos路径转发到Nacos服务,支持HTTP访问(可结合TLS在上游网关实现)。
  • Ingress控制器:baremetal-nginx-ingress.yaml定义了nginx Ingress控制器及其RBAC、Service、Deployment等。
  • 数据库兼容:nacos-pgsql.yaml通过initContainer注入JDBC代理,使Nacos以PostgreSQL平台运行。

章节来源

架构总览

Nacos在Kubernetes中采用StatefulSet进行无头服务下的有状态部署,通过ConfigMap注入数据库连接参数,并由Service统一对外暴露。Ingress负责将/nacos前缀路由至Nacos服务,实现统一入口与可扩展的负载均衡。

图表来源

详细组件分析

StatefulSet与集群成员管理

  • 副本数:3,确保高可用与Raft一致性。
  • 稳定网络标识:通过serviceName与headless Service,Pod具备稳定的DNS域名,便于集群内节点互相发现。
  • 环境变量关键项:
    • 集群模式与副本数:MODE=cluster、NACOS_REPLICAS=3
    • 服务器端口:NACOS_SERVER_PORT
    • 主机名偏好:PREFER_HOST_MODE=hostname
    • 集群节点列表:NACOS_SERVERS(按Pod序号与Service FQDN拼接)
  • 端口映射:
    • 客户端:31000(v2)、8848(v1)
    • 客户端RPC:32000(v2)、9848(v1)
    • Raft RPC:32001(v2)、9849(v1)
    • 兼容旧版选举端口:30000(v2)、7848(v1)

图表来源

章节来源

服务发现与集群成员管理

  • Headless Service:ClusterIP=None,配合StatefulSet生成稳定DNS域名,如lemes-nacos-0.lemes-nacos-svc.default.svc.cluster.local。
  • 集群成员列表:通过NACOS_SERVERS显式声明所有节点地址,确保启动阶段快速收敛。
  • DNS解析:Pod内可通过主机名与端口直接访问其他节点,降低配置复杂度。

章节来源

数据库集成与持久化

  • MySQL直连(默认):通过ConfigMap注入数据库主机、端口、用户名、密码与库名,容器环境变量直接消费。
  • PostgreSQL兼容:nacos-pgsql.yaml通过initContainer将JDBC代理拷贝到共享卷,容器启动时加载javaagent,将MySQL JDBC URL转换为PostgreSQL URL。
  • 连接参数:包含字符集、连接超时、Socket超时、自动重连与时区设置。
  • 持久化策略:当前StatefulSet未挂载PVC,数据存储于容器内临时卷。若需持久化,请为每个Pod添加对应PVC与挂载点。

图表来源

章节来源

核心配置参数

  • 集群模式:MODE=cluster
  • 服务器端口:NACOS_SERVER_PORT(v2默认31000,v1默认8848)
  • 主机名偏好:PREFER_HOST_MODE=hostname
  • 集群节点列表:NACOS_SERVERS(按Pod序号与Service FQDN拼接)
  • 内存优化:requests.cpu/memory与JAVA_OPTS(容器内可调)
  • 网络端口:客户端、RPC、Raft及兼容端口均在容器与Service中开放

章节来源

Ingress暴露与域名映射

  • 路径映射:/nacos 前缀转发至Service lemes-nacos-svc:31000(v2)或8848(v1)。
  • Ingress控制器:使用nginx Ingress控制器,支持NodePort暴露与健康检查。
  • 负载均衡:Ingress控制器对后端Service进行轮询LB;生产建议结合TLS与WAF在入口层增强安全。

图表来源

章节来源

健康检查、资源限制与存储卷

  • 健康检查:Ingress控制器自带/healthz探针(10254端口),可作为外部健康检查参考。
  • 资源限制:容器requests.cpu与memory在StatefulSet中设定,可根据实际负载调整。
  • 存储卷:当前未配置PVC;如需持久化,请为每个Pod添加对应PVC与挂载路径。

章节来源

Docker Compose单机部署

  • 单实例部署:nacos.yml定义了容器端口映射与环境变量,适合本地开发或测试。
  • 环境变量:包含数据库连接、服务器端口、主机名偏好、集群节点列表等。

章节来源

依赖关系分析

  • ConfigMap依赖:Nacos容器通过envFrom引用lemes-cm中的数据库连接参数。
  • Service依赖:StatefulSet通过serviceName与selector关联到Service,实现稳定的网络标识。
  • Ingress依赖:Ingress规则依赖Service名称与端口,确保流量正确转发。
  • 数据库依赖:Nacos根据SPRING_DATASOURCE_PLATFORM或DB_URL_0决定连接MySQL或PostgreSQL。

图表来源

章节来源

性能考虑

  • 内存与CPU:根据容器requests调整Nacos JVM参数(JAVA_OPTS),避免过度分配导致节点不稳定。
  • 端口与网络:确保客户端、RPC与Raft端口均开放且无冲突,避免集群脑裂或节点无法加入。
  • 数据库连接池:合理设置连接超时与自动重连,避免在高并发场景下出现连接抖动。
  • Ingress性能:启用real-ip与forwarded-for,确保后端日志中获取真实客户端IP;必要时在入口层开启压缩与缓存。

故障排除指南

  • 集群无法形成或节点反复重启
    • 检查NACOS_SERVERS是否包含所有节点,确认Service FQDN解析正常。
    • 查看Pod日志,确认端口占用与权限问题。
  • 数据库连接失败
    • 校验ConfigMap中的主机、端口、用户名、密码与库名。
    • 若使用PostgreSQL兼容模式,确认initContainer已成功拷贝JDBC代理,容器启动参数已加载javaagent。
  • Ingress无法访问
    • 确认Ingress规则指向正确的Service与端口。
    • 检查Ingress控制器健康状态与NodePort可达性。
  • 客户端获取配置失败
    • 确认命名空间与分组配置一致,检查Nacos控制台登录与权限。

章节来源

结论

本文档提供了DeviceMate项目中Nacos配置中心的完整部署与运维指南,覆盖集群架构、数据库集成、核心参数、Ingress暴露、健康检查与性能优化等方面。建议在生产环境中结合TLS、WAF与监控体系进一步完善安全与可观测性。

附录