K3s 中使用 Helm 部署 Nacos 教程(严格对齐官方文档)
本教程完全遵循 Nacos 官方 Kubernetes 快速启动文档:https://nacos.io/docs/latest/quickstart/quick-start-kubernetes/,适配 K3s 集群环境,整合 Longhorn 持久化与 MetalLB 固定 IP 配置。
概述
本指南基于 Nacos 官方标准流程,在 K3s 集群中通过 Helm 完成 Nacos 单机模式与集群模式的部署,核心流程与官方文档完全一致,同时补充 K3s 特有的 servicelb 适配、Longhorn 持久化配置,满足开发测试与生产环境需求。
Nacos 官方推荐 Kubernetes 环境使用 Helm 部署,优先采用本地 Chart 包方式,规避仓库访问问题,确保部署流程标准化、可复现。
目标
- 严格按照官方文档完成 K3s 环境下 Nacos 的 Helm 部署
- 实现官方标准的持久化配置(对接 Longhorn)与服务暴露(MetalLB/servicelb)
- 掌握官方定义的验证、运维与故障排查方法
前置条件
-
已部署 K3s 集群(单节点/多节点,Kubernetes 版本 ≥ 1.20,满足官方最低要求)
-
已安装 Helm 3.5.0+(官方推荐版本)
-
集群节点已配置
kubectl并具备管理员权限 -
已部署 Longhorn 并确认
longhorn存储类可用:kubectl get sc | grep longhorn -
可选:部署 MetalLB(生产环境用于固定 LoadBalancer IP,官方推荐)
-
节点资源:单机模式 ≥ 1GB 内存,集群模式每个节点 ≥ 2GB 内存
-
节点可访问 Docker Hub,能拉取官方镜像
nacos/nacos-server
核心流程:官方标准部署步骤
1. 获取官方 Helm Chart 包(官方第一步)
根据官方文档,优先通过 Git Clone 获取最新 Chart 源码(而非 helm repo add),确保与官方同步:
# 克隆官方仓库(获取最新 Chart)
git clone https://github.com/nacos-group/nacos-k8s.git
cd nacos-k8s/helm/nacos
# 查看官方 Chart 目录结构(与文档一致)
ls -l
# 标准结构:Chart.yaml README.md templates values.yaml
官方说明:直接克隆仓库可获取最新的 Chart 配置,避免 Helm 仓库同步延迟问题。
2. 部署前准备(官方标准操作)
2.1 创建命名空间
官方推荐使用独立命名空间隔离 Nacos 资源:
kubectl create namespace nacos
2.2 配置持久化存储(对接 Longhorn)
官方 Chart 默认支持持久化配置,需指定 longhorn 存储类(替换官方默认的 default 存储类)。
2.3 确认 LoadBalancer 组件
- 生产环境:部署 MetalLB(官方推荐),用于分配固定 IP
- 测试环境:使用 K3s 内置
servicelb(无需额外部署,自动分配 NodePort)
3. 部署单机模式 Nacos(官方开发测试环境)
官方定义的单机模式为嵌入式数据库,无需外部依赖,适合快速验证。
3.1 创建官方标准配置文件 values-standalone.yaml
严格遵循官方 values.yaml 结构,仅修改存储类与服务暴露配置:
# values-standalone.yaml (基于官方默认配置修改)
global:
mode: standalone # 官方单机模式标识
namespace: nacos
nacos:
image:
repository: nacos/nacos-server
tag: latest # 官方默认使用 latest,生产建议指定稳定版本(如 v2.4.0)
pullPolicy: IfNotPresent
# 服务暴露:官方推荐 LoadBalancer 模式
service:
type: LoadBalancer
port: 8848
# 可选:MetalLB 固定 IP(生产环境配置)
loadBalancerIP: 10.2.10.103
# K3s servicelb 适配:固定 NodePort 端口
nodePorts:
http: "30848"
externalTrafficPolicy: Local
# 持久化配置(官方默认关闭,此处开启并对接 Longhorn)
persistence:
enabled: true
storageClass: "longhorn" # 替换官方默认的 default 存储类
accessMode: ReadWriteOnce
data:
size: 1Gi
logs:
enabled: true
size: 512Mi
# JVM 配置(官方默认参数)
jvm:
xms: 512m
xmx: 512m
xmn: 256m
# 资源限制(官方默认无限制,补充 K3s 适配配置)
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1Gi
3.2 执行官方部署命令
# 本地 Chart 部署(官方标准命令)
helm install nacos . -n nacos -f values-standalone.yaml
# 等待 Pod 启动(官方验证步骤)
kubectl get pods -n nacos -w
4. 部署集群模式 Nacos(官方生产环境)
官方明确生产环境必须使用 集群模式 + 外部 MySQL,禁止使用嵌入式数据库,以下为完整流程。
4.1 前置步骤:部署 MySQL 并初始化(官方要求)
-
部署 MySQL 服务(可通过 Helm 部署,参考官方文档)
-
下载官方初始化 SQL 脚本并执行:
# 下载官方 SQL 脚本
wget https://raw.githubusercontent.com/alibaba/nacos/master/distribution/conf/nacos-mysql.sql
# 登录 MySQL 执行脚本,创建 nacos_config 数据库
mysql -h <mysql-service-ip> -u root -p < nacos-mysql.sql -
创建 MySQL 密码 Secret(官方推荐,禁止明文配置):
kubectl create secret generic nacos-mysql-secret -n nacos \
--from-literal=mysql-password="<你的 MySQL 密码>"
4.2 创建官方集群配置文件 values-cluster.yaml
严格遵循官方集群配置规范,配置 MySQL 连接、3 副本、Longhorn 持久化:
# values-cluster.yaml (官方标准集群配置)
global:
mode: cluster # 官方集群模式标识
namespace: nacos
replicaCount: 3 # 官方要求集群至少 3 副本
nacos:
image:
repository: nacos/nacos-server
tag: v2.4.0 # 生产环境指定稳定版本
pullPolicy: IfNotPresent
service:
type: LoadBalancer
port: 8848
loadBalancerIP: 10.2.10.103 # MetalLB 固定 VIP
externalTrafficPolicy: Local
# 官方集群通信端口(固定,不可修改)
clusterPort: 9848
raftPort: 9849
# 持久化配置(官方生产环境强制开启)
persistence:
enabled: true
storageClass: "longhorn"
accessMode: ReadWriteOnce
data:
size: 5Gi
annotations:
longhorn.io/replica-count: "2" # Longhorn 副本数,提高可靠性
logs:
size: 2Gi
# 外部 MySQL 配置(官方集群模式必配,替代嵌入式数据库)
mysql:
host: "mysql.nacos.svc.cluster.local" # MySQL Service 地址
port: 3306
db: "nacos_config"
user: "root"
# 引用 Secret,官方推荐方式
passwordFromSecret:
name: nacos-mysql-secret
key: mysql-password
param: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true"
# JVM 配置(官方生产环境推荐参数)
jvm:
xms: 2g
xmx: 2g
xmn: 1g
# 资源限制(官方推荐生产配置)
resources:
requests:
cpu: 1000m
memory: 2Gi
limits:
cpu: 2000m
memory: 4Gi
4.3 执行官方集群部署命令
# 官方标准集群部署命令
helm install nacos . -n nacos -f values-cluster.yaml
# 等待所有 Pod 启动(3 个副本均为 Running 状态)
kubectl get pods -n nacos -w