背景

官方文档
Nacos采用的是Distro协议和Raft协议。对于非临时数据,Nacos采用的是Raft协议,而临时数据Nacos采用的是Distro协议。简单说一下Distro,Distro协议被定位为临时数据的一致性协议(阿里设计的):该类型协议不需要把数据存储到磁盘或者数据库,因为临时数据通常和服务器保持一个session会话,该会话只要存在,数据就不会丢失。

使用Nacos作为服务注册中心和配置管理中心。

本文主要用到了外置mysql和文件存储,提前准备好即可。
Nacos是部署在k8s中的,我们部署的版本1.3.2,下载地址:https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-server-1.3.2.zip

创建数据库并授权

create database nacos default charset 'utf8' collate 'utf8_bin'; 
grant all on nacos.* to 'nacos'@'%' identified by 'xxxxxx'; 
flush privileges;

创建数据库 nacos, 从下载安装包中找到conf/nacos-mysql.sql,执行。

提供文件存储一个,可直接按照本文的nfs方式挂载,云厂商提供的静态挂载方式未必兼容,或者使用storageclass动态挂载也可。

创建pv

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-1
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  mountOptions:
  - hard
  - nfsvers=4
  nfs:
    path: /logs
    server: 文件存储地址
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-2
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  mountOptions:
  - hard
  - nfsvers=4
  nfs:
    path: /data
    server: 文件存储地址
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-3
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 50Gi
  mountOptions:
  - hard
  - nfsvers=4
  nfs:
    path: /plugindir
    server: 文件存储地址
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Filesystem

创建pvc

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-nacos-1
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  storageClassName: ""
  volumeMode: Filesystem
  volumeName: nacos-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-nacos-2
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  storageClassName: ""
  volumeMode: Filesystem
  volumeName: nacos-2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-nacos-3
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 50Gi
  storageClassName: ""
  volumeMode: Filesystem
  volumeName: nacos-3

创建configmap

apiVersion: v1
data:
  mysql.db.name: nacos
  mysql.password: xxxxxx
  mysql.port: "3306"
  mysql.user: nacos
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: default

创建StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: default
spec:
  podManagementPolicy: OrderedReady
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app.kubernetes.io/instance: nacos
      app.kubernetes.io/name: nacos
  serviceName: nacos-hs
  template:
    metadata:
      creationTimestamp: null
      labels:
        app.kubernetes.io/instance: nacos
        app.kubernetes.io/name: nacos
    spec:
      containers:
      - env:
        - name: NACOS_REPLICAS
          value: "3"
        - name: SERVICE_NAME
          value: nacos-hs
        - name: DOMAIN_NAME
          value: cluster.local
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: PREFER_HOST_MODE
          value: hostname
        - name: MYSQL_SERVICE_HOST
          value: mysql数据库地址
        - name: MYSQL_SERVICE_DB_NAME
          valueFrom:
            configMapKeyRef:
              key: mysql.db.name
              name: nacos-cm
        - name: MYSQL_SERVICE_PORT
          valueFrom:
            configMapKeyRef:
              key: mysql.port
              name: nacos-cm
        - name: MYSQL_SERVICE_USER
          valueFrom:
            configMapKeyRef:
              key: mysql.user
              name: nacos-cm
        - name: MYSQL_SERVICE_PASSWORD
          valueFrom:
            configMapKeyRef:
              key: mysql.password
              name: nacos-cm
        - name: NACOS_SERVER_PORT
          value: "8848"
        - name: NACOS_APPLICATION_PORT
          value: "8848"
        image: nacos/nacos-server:1.3.2
        imagePullPolicy: Always
        name: nacos
        ports:
        - containerPort: 8848
          name: http
          protocol: TCP
        - containerPort: 7848
          name: rpc
          protocol: TCP
        resources:
          requests:
            cpu: 500m
            memory: 2Gi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /home/nacos/plugins/peer-finder
          name: plugindir
        - mountPath: /home/nacos/data
          name: datadir
        - mountPath: /home/nacos/logs
          name: logdir
      dnsPolicy: ClusterFirst
      initContainers:
      - image: nacos/nacos-peer-finder-plugin:1.0
        imagePullPolicy: Always
        name: peer-finder-plugin-install
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /home/nacos/plugins/peer-finder
          name: plugindir
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: plugindir
        persistentVolumeClaim:
          claimName: claim-nacos-3
      - name: datadir
        persistentVolumeClaim:
          claimName: claim-nacos-2
      - name: logdir
        persistentVolumeClaim:
          claimName: claim-nacos-1
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate

创建service nacos-hs配置,用于集群内网访问

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
  name: nacos-hs
  namespace: default
spec:
  clusterIP: None
  ports:
  - name: http
    port: 8848
    protocol: TCP
    targetPort: http
  - name: rpc
    port: 7848
    protocol: TCP
    targetPort: 7848
  selector:
    app.kubernetes.io/instance: nacos
    app.kubernetes.io/name: nacos
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

创建service nacos-ig配置,用于腾讯云ingress外网访问

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
    service.cloud.tencent.com/direct-access: "false"
  name: nacos-ig
  namespace: default
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 30000
    port: 8848
    protocol: TCP
    targetPort: 8848
  - name: rpc
    nodePort: 30107
    port: 7848
    protocol: TCP
    targetPort: 7848
  selector:
    app.kubernetes.io/instance: nacos
    app.kubernetes.io/name: nacos
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐