K8S如何部署nacos集群?
AI 总结
本文介绍了在K8S上部署Nacos 3.1.1集群的方法。首先从官方下载包中获取mysql-schema.sql并初始化数据库,创建专用用户。然后创建ConfigMap配置数据库连接信息,接着创建Headless Service为每个Pod提供独立域名,再创建StatefulSet部署三节点集群,需配置环境变量如数据库、认证、集群节点地址等。最后创建Service暴露端口,注意3.x版本前端访问端口改为8080,通过LoadBalancer映射外部访问。默认账号密码为nacos/nacos,验证成功即完成部署。
需求:在K8S上部署一套nacos,用于服务注册发现
我以3.1.1这个版本为例
步骤一:先初始化数据库
github地址:https://github.com/alibaba/nacos/releases/tag/3.1.1
1.找到3.1.1版本,下载压缩包,得到nacos-server-3.1.1.zip

解压文件,找到文件nacos-server-3.1.1\nacos\conf\mysql-schema.sql
mysql-schema.sql,就是nacos的初始化sql
2.连接到自己的数据库,创建新库和对应的用户
CREATE database if NOT EXISTS `nacos` default character set utf8mb4 collate utf8mb4_general_ci;
CREATE USER 'nacos_rw'@'%' IDENTIFIED BY 'nacos@1234';
GRANT ALL PRIVILEGES ON `nacos`.* TO 'nacos_rw'@'%';
FLUSH PRIVILEGES;
3.执行sql文件,初始化数据
步骤二:创建configmap文件,指定xxl-job用的数据库
kind: ConfigMap
apiVersion: v1
metadata:
name: nacos-vms
namespace: default
data:
mysql.db.name: nacos-vms
mysql.host: 10.38.26.12
mysql.password: nacos@1234
mysql.port: '3306'
mysql.user: nacos_rw
步骤三:创建sts前先创建headless
作用:给StatefulSet里的每个Pod分配独立DNS域名
kind: Service
apiVersion: v1
metadata:
name: headless-nacos
namespace: default
labels:
app: nacos-vms
version: v1
annotations:
service.alpha.kubernetes.io/publishNotReadyAddresses: 'true'
spec:
selector:
app: nacos-vms
version: v1
ports:
- name: server
protocol: TCP
port: 8848
targetPort: 8848
- name: client-rpc
protocol: TCP
port: 9848
targetPort: 9848
- name: raft-rpc
protocol: TCP
port: 9849
targetPort: 9849
- name: old-raft-rpc
protocol: TCP
port: 7848
targetPort: 7848
clusterIP: None
步骤四:创建StatefulSet资源
因为要部署nacos集群,所以选择sts
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: nacos-vms
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nacos-vms
serviceName: headless-nacos
template:
metadata:
labels:
app: nacos-vms
spec:
volumes:
- name: vol-178418615222432701
hostPath:
path: /etc/localtime
type: ''
containers:
- name: nacos
image: nacos/nacos-server:v3.1.1
imagePullPolicy: Always
env:
- name: SPRING_DATASOURCE_PLATFORM
value: mysql
- name: NACOS_APPLICATION_PORT
value: '8848'
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: MODE
value: cluster
- name: NACOS_AUTH_ENABLE
value: 'true'
- name: NACOS_AUTH_IDENTITY_KEY
value: authKey
- name: NACOS_AUTH_IDENTITY_VALUE
value: Arges@123!
- name: NACOS_AUTH_TOKEN
value: Zf/5mdkvDD2vPPFyzMiufg385WsDNxsqcyA+GwzyVNU=
- name: NACOS_SERVERS
value: nacos-vms-0.headless-nacos.default.svc.cluster.local:8848 nacos-vms-1.headless-nacos.default.svc.cluster.local:8848 nacos-vms-2.headless-nacos.default.svc.cluster.local:8848
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
name: nacos-vms
key: mysql.db.name
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-vms
key: mysql.host
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
configMapKeyRef:
name: nacos-vms
key: mysql.password
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
name: nacos-vms
key: mysql.port
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
name: nacos-vms
key: mysql.user
- name: PREFER_HOST_MODE
value: hostname
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
- name: vol-178418615222432701
readOnly: true
mountPath: /etc/localtime
restartPolicy: Always
imagePullSecrets:
- name: default-secret
步骤五:创建service
注意:nacos 3.x访问前端页面的底层端口改成8080了,所以我们创建svc的时候需要单独给8080暴露出来
kind: Service
apiVersion: v1
metadata:
name: nacos
namespace: default
labels:
app: nacos-vms
version: v1
spec:
type: ClusterIP
selector:
app: nacos-vms
version: v1
ports:
- name: cce-service-0
protocol: TCP
port: 8848
targetPort: 8848
---
kind: Service
apiVersion: v1
metadata:
name: nacos-vms-76381
namespace: default
labels:
app: nacos-vms
spec:
type: LoadBalancer
loadBalancerIP: 10.38.28.6
externalTrafficPolicy: Cluster
selector:
app: nacos-vms
ports:
- name: cce-service-0
protocol: TCP
port: 28848
targetPort: 8080
- name: cce-service-1
protocol: TCP
port: 8848
targetPort: 8848
步骤六:访问看看
默认密码:nacos/nacos


评论 (0)