1、部署 MySQL
k8s集群上部署mysql,注意storageClassName名字,生产环境上不建议用这种方式,推荐独立部署mysql
vim nacos-mysql.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos-mysql
namespace: nacos
spec:
serviceName: nacos-mysql
replicas: 1
selector:
matchLabels:
app: nacos-mysql
template:
metadata:
labels:
app: nacos-mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "nacos@123"
- name: MYSQL_DATABASE
value: "nacos_config"
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: nacos-mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: nacos-mysql
namespace: nacos
spec:
selector:
app: nacos-mysql
ports:
- port: 3306
targetPort: 3306
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nacos-mysql-pvc
namespace: nacos
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: nfs-client
2、初始化数据库
我这里用自建的mysql,不使用k8s集群部署mysql的方式
下载nacos初始化SQL
https://github.com/alibaba/nacos/blob/2.4.1/distribution/conf/mysql-schema.sql
登录MySQL创建数据库
mysql -u root -p -e "CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
3、部署 Nacos 集群(3节点)
记得修改mysql数据库连接地址
vim nacos-cluster.yaml
root@opstest001:~/nacos# cat nacos-cluster.yaml
apiVersion: v1
kind: Namespace
metadata:
name: nacos
---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
namespace: nacos
labels:
app: nacos
spec:
ports:
- port: 8848
name: client
- port: 9848
name: cluster
clusterIP: None
selector:
app: nacos
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos-cluster
namespace: nacos
spec:
serviceName: nacos-headless
replicas: 3
podManagementPolicy: OrderedReady
selector:
matchLabels:
app: nacos
template:
metadata:
labels:
app: nacos
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
containers:
- name: nacos
image: registry.cn-hangzhou.aliyuncs.com/iuxt/nacos-server:v2.3.2
args:
- "/bin/sh"
- "-c"
- "exec java -Dnacos.standalone=false -Dlogging.path=/dev/stdout -jar /home/nacos/nacos-server.jar"
ports:
- containerPort: 8848
name: client
- containerPort: 9848
name: cluster
env:
- name: PREFER_HOST_MODE
value: hostname
- name: NACOS_SERVER_PORT
value: "8848"
- name: NACOS_APPLICATION_PORT
value: "8848"
- name: SPRING_DATASOURCE_PLATFORM
value: mysql
- name: MYSQL_SERVICE_HOST
value: "192.168.2.251"
- name: MYSQL_SERVICE_DB_NAME
value: "nacos_config"
- name: MYSQL_SERVICE_PORT
value: "3306"
- name: MYSQL_SERVICE_USER
value: "root"
- name: MYSQL_SERVICE_PASSWORD
value: "dbaadmin@123"
- name: NACOS_AUTH_ENABLE
value: "true" # 开启鉴权
- name: NACOS_AUTH_IDENTITY_KEY
value: "nacos" # 身份标识Key(默认值)
- name: NACOS_AUTH_IDENTITY_VALUE
value: "nacos" # 身份标识Value(默认值)
- name: NACOS_AUTH_TOKEN
value: "SecretKey012345678901234567890123456789012345678901234567890123456789" # 自定义JWT密钥
- name: NACOS_SERVERS
value: "nacos-cluster-0.nacos-headless.nacos.svc.cluster.local:8848 nacos-cluster-1.nacos-headless.nacos.svc.cluster.local:8848 nacos-cluster-2.nacos-headless.nacos.svc.cluster.local:8848"
readinessProbe:
httpGet:
path: /nacos/v1/console/health/liveness
port: 8848
initialDelaySeconds: 20
periodSeconds: 10
livenessProbe:
httpGet:
path: /nacos/v1/console/health/liveness
port: 8848
initialDelaySeconds: 60
periodSeconds: 20
volumeMounts:
- name: nacos-data
mountPath: /home/nacos/data
volumes:
- name: nacos-data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nacos-cluster-service
namespace: nacos
labels:
app: nacos
spec:
type: ClusterIP
selector:
app: nacos
ports:
- name: client
port: 8848
targetPort: 8848
配置ingress,设置管理地址
root@opstest001:~/nacos# cat nacos-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nacos-ingress
namespace: nacos
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /nacos/$1
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
ingressClassName: nginx # 明确指定使用 nginx IngressClass
rules:
- host: nacos.cctbb.com
http:
paths:
- path: /(.*)
pathType: ImplementationSpecific
backend:
service:
name: nacos-cluster-service
port:
number: 8848
访问
nacos/nacos
