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)