k8s nacos 集群部署流程
一、核心配置解析
-
Headless Service (
nacos-headless)- 类型为
ClusterIP: None,用于为 StatefulSet 提供稳定的 DNS 记录(如nacos-0.nacos-headless.default.svc.cluster.local)。 - 暴露 4 个端口:
8848:Nacos 客户端访问端口9848/9849:Nacos 2.0+ 的 gRPC 通信端口7848:兼容 1.4.x 版本的选举端口
- 类型为
-
ConfigMap (
nacos-cm)- 存储 MySQL 数据库配置(地址、库名、凭据等),供 StatefulSet 通过环境变量引用。
- 注意:需提前确保 MySQL 服务可用,且数据库
nacos_devtest已初始化(建议执行 Nacos 的 MySQL 初始化脚本)。
-
StatefulSet (
nacos)- 副本数:3 个 Pod,通过
podAntiAffinity确保分散在不同节点(提升高可用性)。 - 资源请求:每个 Pod 请求 2GB 内存和 0.5 CPU。
- 环境变量:
NACOS_SERVERS明确指定集群节点地址(必须与 Headless Service 的 DNS 格式匹配)。PREFER_HOST_MODE: hostname确保节点以主机名注册到集群。
- 副本数:3 个 Pod,通过
二、Rancher 操作步骤
- 创建 ConfigMap
- 进入目标集群的
ConfigMaps页面,点击Create。 - 名称填写
nacos-cm,将data部分粘贴到 YAML 编辑器(或通过表单填写 MySQL 配置)。 - 验证:确保键值对与配置一致,尤其是密码等敏感信息。
- 创建 Headless Service
- 进入
Services页面,点击Create选择ClusterIP类型。 - 关键配置:
- 名称:
nacos-headless - 标签:
app: nacos-headless ClusterIP设置为None- 端口按配置添加(8848、9848、9849、7848)
- 名称:
- 部署 StatefulSet
- 进入
Workloads→StatefulSets,点击Create。 - 基础配置:
- 名称:
nacos - 副本数:3
- 服务名称:
nacos-headless(必须与 Service 名称一致)
- 名称:
- Pod 模板:
- 标签:
app: nacos - 容器镜像:
nacos/nacos-server:latest - 资源限制:按需调整(示例中为
requests,可补充limits) - 端口映射:与配置中的
containerPort一致 - 环境变量:从 ConfigMap 引用的键需与
nacos-cm中定义匹配
- 标签:
- 调度规则:
- 在
Advanced Options中配置Pod Affinity,选择Required反亲和性,按hostname分散 Pod。
- 在
- 验证部署
- 检查 Pod:确保 3 个 Pod 状态为
Running,且分布在不同节点。 - 日志检查:
确认日志中无kubectl logs nacos-0 | grep "Cluster is healthy"选举失败或连接拒绝错误。 - DNS 解析测试:
kubectl exec -it nacos-0 -- curl nacos-1.nacos-headless:8848/nacos/v1/ns/operator/metrics
三、常见问题与调优建议
-
MySQL 连接问题
- 若出现数据库连接失败,检查:
- MySQL 服务是否允许集群内访问。
- ConfigMap 中的密码是否含特殊字符(需转义)。
- 建议:在 MySQL 中为 Nacos 创建专用用户并限制权限。
- 若出现数据库连接失败,检查:
-
集群启动顺序
- StatefulSet Pod 按顺序启动(nacos-0 → nacos-1 → nacos-2),首次启动需等待 nacos-0 完全就绪。
- 可增加
initialDelaySeconds和livenessProbe避免健康检查过早失败。
-
资源不足
- 若 Pod 频繁重启,需调整
resources.limits(例如内存设为4Gi)。 - 监控工具建议:通过 Rancher 的
Monitoring查看 Pod 资源使用率。
- 若 Pod 频繁重启,需调整
-
版本兼容性
- 若从 Nacos 1.4.x 升级,需保留
7848端口;纯 2.0+ 环境可移除该端口。
- 若从 Nacos 1.4.x 升级,需保留
四、扩展配置(可选)
- 持久化存储:
在 StatefulSet 中添加volumeClaimTemplates,为每个 Pod 绑定 PVC(如使用 Rancher 的 Local Path Provisioner)。 - Ingress 配置:
通过 Rancher 的Ingress将 Nacos 控制台(8848 端口)暴露给外部访问,需配置域名和 TLS。
通过以上步骤,可在 Rancher 中快速部署高可用的 Nacos 集群。部署后建议通过 Nacos 控制台(http://<Pod-IP>:8848/nacos)验证节点列表和配置管理功能。
本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/19023257
blog:http://www.bigroc.cn 博客园:https://www.cnblogs.com/bigroc
浙公网安备 33010602011771号