k8s集群模式部署nacos v3.0.1
写在前面:
本指南是用于集群模式部署Nacos v3.0.1,按照官网的部署指南,大概率会出现容器无法启动的问题(截止20250624),故参考官方指南踩坑总结以下指南。
本环境是在测试环境中部署,其中出入取舍请自斟酌。
本指南为了部署步骤简洁清晰,会将很多集中的配置拆开成单独的步骤,保证有眼睛就能部署成功(所以会看上去很啰嗦,明明可以几个合并一起的非要拆开写,多此一举云云,有经验的童鞋可以自行合并)。
目标:
- 在k8s中以集群模式部署Nacos v3.0.1(3副本集群)
详情:
-
mysql:v5.7 单机部署
-
nacos:v3.0.1 集群部署
步骤导航
-
准备工作目录
-
创建ConfigMap
-
数据库
- 创建数据库
- 初始化数据库
- 创建数据库Service
-
nacos数据持久化
- 创建StorageClass
- 创建PV
-
nacos集群
- 创建nacos集群
- 创建nacos headless Service
- 创建nacos Service
- 创建nacos ingress
-
访问工作台
1. 准备工作目录
作用:准备工作目录是用来存放部署时所需的yaml文件。
# 创建yaml文件路径
mkdir -p /data/kubernetes/nacos-fat && cd /data/kubernetes/nacos-fat
2. 创建ConfigMap
主要是包含数据库的一些配置,通过ConfigMap传递给POD。
vim nacos-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
namespace: nacos-fat
data:
mode: cluster
mysql.db.name: nacos-fat
mysql.db.host: mysql
mysql.port: "3306"
mysql.user: root
mysql.password: yourSqlPasswd
mysql.param: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false"
nacos.servers: >-
nacos3-0.nacos-hs.nacos-fat.svc.cluster.local:8848
nacos3-1.nacos-hs.nacos-fat.svc.cluster.local:8848
nacos3-2.nacos-hs.nacos-fat.svc.cluster.local:8848
TIP:
namespace: 本实例中将部署在nacos-fat的命名空间中,可根据实际情况修改
nacos.servers: 包含nacos集群三个副本的dns名称,由headless service管理,名称规则:pod-name.headless-name.namespace.svc.cluster.local
# 创建ConfigMap
kubectl apply -f nacos-cm.yaml
# 检查ConfigMap
kubectl get cm -n nacos-fat
3. 数据库
3.1 创建数据库
nacos支持内置数据库和Mysql,但是使用集群模式部署的话必须使用MySql作为数据库。
vim nacos-mysql.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
namespace: nacos-fat
labels:
name: mysql
spec:
replicas: 1
selector:
name: mysql
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: nacos/nacos-mysql:5.7
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "yourSqlPasswd"
- name: MYSQL_DATABASE
value: "nacos-fat"
- name: MYSQL_USER
value: "nacos"
- name: MYSQL_PASSWORD
value: "yourSqlPasswd"
volumes:
- name: mysql-data
hostPath:
path: /data/nacos-fat/mysql
type: DirectoryOrCreate
TIP
如果使用官方镜像,默认的数据库MYSQL_DATABASE:nacos-devtest 则不需要进行数据库初始化,此处我的是 nacos-fat,所以需要进行数据库初始化;
密码参数请自行设置;
数据库有高可用的需求请自行解决,此处就一个实例。
# 创建mysql pod
kubectl apply -f nacos-mysql.yaml
# 检查pod
kubectl get pod -n nacos-fat -o wide
3.2 初始化数据库
执行数据库初始化
# 下载初始化语句
wget https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
# 执行初始化
kubectl exec -i mysql-ctzmj -n nacos-fat -- mysql -uroot -pyourSqlPasswd nacos-fat < mysql-schema.sql
TIP:
请替换pod名,-u -p无空格
3.3 创建数据库Service
用于暴露数据的端口给nacos连接
vim mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace