k8s部署nacos集群

 

 

1、部署 MySQL(若无可先部署)

注意storageClassName名字

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
kubectl apply -f   nacos-mysql.yaml

 

2、初始化数据库

在https://github.com/alibaba/nacos/blob/2.4.1/distribution/conf/mysql-schema.sql拷贝sql文件内容

 创建初始化sql文件,并导入到mysql

vim mysql-schema.sql
kubectl exec -i nacos-mysql-0 -n nacos -- mysql -uroot -pnacos@123 nacos_config < mysql-schema.sql

 

3、部署 Nacos 集群(3节点)

vim nacos-cluster.yaml
apiVersion: apps/v1
kind: StatefulSet  # 使用StatefulSet保证有序部署和稳定网络标识
metadata:
  name: nacos-cluster
  namespace: nacos
spec:
  serviceName: nacos-headless  # Headless Service用于集群通信
  replicas: 3
  selector:
    matchLabels:
      app: nacos-cluster
  template:
    metadata:
      labels:
        app: nacos-cluster
    spec:
      affinity:
     #   podAntiAffinity:  # 反亲和性,避免Pod部署到同一节点
     #     requiredDuringSchedulingIgnoredDuringExecution:
     #     - labelSelector:
     #         matchExpressions:
     #         - key: app
     #           operator: In
     #           values:
     #           - nacos-cluster
     #       topologyKey: "kubernetes.io/hostname"
      containers:
      - name: nacos
        image: nacos/nacos-server:v2.4.1
        env:
        - name: MODE
          value: "cluster"
        - 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"
        - name: SPRING_DATASOURCE_PLATFORM
          value: "mysql"
        - name: MYSQL_SERVICE_HOST
          value: "nacos-mysql"
        - name: MYSQL_SERVICE_PORT
          value: "3306"
        - name: MYSQL_SERVICE_DB_NAME
          value: "nacos_config"
        - name: MYSQL_SERVICE_USER
          value: "root"
        - name: MYSQL_SERVICE_PASSWORD
          value: "nacos@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: JVM_XMS
          value: "2g"
        - name: JVM_XMX
          value: "2g"
        ports:
        - containerPort: 8848
        - containerPort: 9848
        volumeMounts:
        - name: nacos-log
          mountPath: /home/nacos/logs
  volumeClaimTemplates:  # 动态PVC,每个Pod独立存储
  - metadata:
      name: nacos-log
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi
      storageClassName: "nfs-client"

---
# Headless Service用于集群节点间通信
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  namespace: nacos
spec:
  clusterIP: None
  selector:
    app: nacos-cluster
  ports:
    - name: http
      port: 8848
      targetPort: 8848
    - name: grpc
      port: 9848
      targetPort: 9848

---
# 对外暴露的Service
apiVersion: v1
kind: Service
metadata:
  name: nacos
  namespace: nacos
spec:
  type: NodePort  # 生产环境建议用LoadBalancer
  selector:
    app: nacos-cluster
  ports:
    - name: http
      port: 8848
      targetPort: 8848
      nodePort: 30848
    - name: grpc
      port: 9848
      targetPort: 9848
kubectl apply -f  nacos-cluster.yaml

 

4、验证

访问控制台

  • URL: http://<master节点IP>:30848/nacos

  • 账号: nacos (默认密码是nacos)

 

可以看到有3个节点

在public工作空间 新建配置

 

删除所有的nacos节点并新建

kubectl delete -f nacos-cluster.yaml
kubectl apply -f  nacos-cluster.yaml

 

再次访问页面发现配置还在

 

posted @ 2025-06-06 12:11  苦逼yw  阅读(324)  评论(0)    收藏  举报