k8s 部署nacos集群-yaml文库-官方版

此部署仅作为参考,对研究过K8S的人来说这是福利。

nacos需要Mysql数据库且需要导入官方的SQL文件。

Wget https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql 

SQL语句:

CREATE DATABAES nacos_confg;

USE nacos_config;

SOURCE /var/lib/mysql/nacos-mysql.sql

PS:本档案实际测试有效,加粗部分需要根据自身环境进行配置修改。

1.Mysql-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mysql-pvc-data

  namespace: pulic-service

spec:

  accessModes:

  - ReadWriteOnce

  resources:

    requests:

      storage: 10Gi

  storageClassName: rook-cephfs

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mysql-pvc-conf

  namespace: pulic-service

spec:

  accessModes:

  - ReadWriteOnce

  resources:

    requests:

      storage: 10Gi

  storageClassName: rook-cephfs

2.Mysql-Deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: mysql #为该Deployment设置key为app,value为mysql的标签

  name: mysql

  namespace: pulic-service

spec:

  replicas: 1 #副本数量

  selector: #标签选择器,与上面的标签共同作用

    matchLabels: #选择包含标签app:nginx的资源

      app: mysql

  template: #这是选择或创建的Pod的模板

    metadata: #Pod的元数据

      labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod

        app: mysql

    spec: #期望Pod实现的功能(即在pod中部署)

      containers: #生成container,与docker中的container是同一种

      - name: mysql

        image: mysql:5.7 #使用镜像mysql: 创建container,该container默认3306端口可访问

        ports:

        - containerPort: 3306  # 开启本容器的3306端口可访问

        env:

        - name: MYSQL_ROOT_PASSWORD

          value: VMware1!

        volumeMounts: #挂载持久存储卷

        - name: mysql-data  #挂载设备的名字,与volumes[*].name 需要对应

          mountPath: /var/lib/mysql  #挂载到容器的某个路径下

        - name: mysql-dev-conf

          mountPath: /etc/mysql

      volumes:

      - name: mysql-data  #和上面保持一致 这是本地的文件路径,上面是容器内部的路径

        persistentVolumeClaim:

          claimName: mysql-pvc-data

      - name: mysql-dev-conf

        persistentVolumeClaim:

          claimName: mysql-pvc-conf

3.Mysql-service.yaml

apiVersion: v1

kind: Service

metadata:

  labels:

  app: mysql

  name: mysql

  namespace: pulic-service

spec:

  ports:

  - port: 3306 #写nginx本身端口

    name: mysql

    protocol: TCP

    targetPort: 3306 # 容器nginx对外开放的端口 上面的dm已经指定了

    nodePort: 31090 #外网访问的端口

  selector:

    app: mysql    #选择包含标签app:nginx的资源

  type: NodePort

2.nacos-yaml

---

apiVersion: v1

kind: Service

metadata:

  name: nacos-headless

  namespace: pulic-service

  labels:

    app: nacos

  annotations:

    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"

spec:

  ports:

    - port: 8848

      name: server

      targetPort: 8848

    - port: 9848

      name: client-rpc

      targetPort: 9848

    - port: 9849

      name: raft-rpc

      targetPort: 9849

    ## 兼容1.4.x版本的选举端口

    - port: 7848

      name: old-raft-rpc

      targetPort: 7848

  clusterIP: None

  selector:

    app: nacos

---

apiVersion: v1

kind: ConfigMap

metadata:

  name: nacos-cm

  namespace: pulic-service

data:

  mysql.db.name: "nacos_config"

  mysql.port: "3306"

  mysql.user: "root"

  mysql.password: "VMware1!"

  MYSQL_SERVICE_HOST: "10.99.218.252"

  SPRING_DATASOURCE_PLATFORM: "mysql"

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: nacos

  namespace: pulic-service

spec:

  serviceName: nacos-headless

  replicas: 2

  template:

    metadata:

      labels:

        app: nacos

      annotations:

        pod.alpha.kubernetes.io/initialized: "true"

    spec:

      affinity:

        podAntiAffinity:

          requiredDuringSchedulingIgnoredDuringExecution:

            - labelSelector:

                matchExpressions:

                  - key: "app"

                    operator: In

                    values:

                      - nacos

              topologyKey: "kubernetes.io/hostname"

      initContainers:

        - name: peer-finder-plugin-install

          image: nacos/nacos-peer-finder-plugin:1.1

          imagePullPolicy: Always

          volumeMounts:

            - mountPath: /home/nacos/plugins/peer-finder

              name: data

              subPath: peer-finder

      containers:

        - name: nacos

          imagePullPolicy: Always

          image: nacos/nacos-server:latest

          resources:

            requests:

              memory: "2Gi"

              cpu: "500m"

          ports:

            - containerPort: 8848

              name: client-port

            - containerPort: 9848

              name: client-rpc

            - containerPort: 9849

              name: raft-rpc

            - containerPort: 7848

              name: old-raft-rpc

          env:

            - name: NACOS_REPLICAS

              value: "2"

            - name: SERVICE_NAME

              value: "nacos-headless"

            - name: DOMAIN_NAME

              value: "cluster.local"

            - name: POD_NAMESPACE

              valueFrom:

                fieldRef:

                  apiVersion: v1

                  fieldPath: metadata.namespace

            - name: MYSQL_SERVICE_DB_NAME

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: mysql.db.name

            - name: MYSQL_SERVICE_PORT

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: mysql.port

            - name: MYSQL_SERVICE_USER

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: mysql.user

            - name: MYSQL_SERVICE_PASSWORD

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: mysql.password

            - name: NACOS_SERVER_PORT

              value: "8848"

            - name: NACOS_APPLICATION_PORT

              value: "8848"

            - name: PREFER_HOST_MODE

              value: "hostname"

            - name: MYSQL_SERVICE_HOST

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: MYSQL_SERVICE_HOST

            - name: SPRING_DATASOURCE_PLATFORM

              valueFrom:

                configMapKeyRef:

                  name: nacos-cm

                  key: SPRING_DATASOURCE_PLATFORM

          volumeMounts:

            - name: data

              mountPath: /home/nacos/plugins/peer-finder

              subPath: peer-finder

            - name: data

              mountPath: /home/nacos/data

              subPath: data

            - name: data

              mountPath: /home/nacos/logs

              subPath: logs

  volumeClaimTemplates:

    - metadata:

        name: data

      spec:

        accessModes: [ "ReadWriteMany" ]

        storageClassName: "rook-cephfs"

        resources:

          requests:

            storage: 20Gi

  selector:

    matchLabels:

      app: nacos

3.nacos-ingress.yaml

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: nacos-headless

  namespace: pulic-service

spec:

  ingressClassName: nginx

  rules:

  - host: nacos-web.nacos-demo.com

    http:

      paths:

      - path: /nacos

        pathType: Prefix

        backend:

          service:

            name: nacos-headless

            port:

              name: server

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容