k8s集群部署nacos集群

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

访问

http://nacos.cctbb.com

nacos/nacos

相关推荐
2201_761199045 小时前
8.基于 Ingress-nginx-controller 实现 k8s 七层代理
nginx·kubernetes·php
SunnyJim5 小时前
k8s kubelet 错误 Network plugin returns error: cni plugin not initialized
kubernetes·containerd·kubelet·cri·finnal
SunnyJim7 小时前
k8s etcd 运行错误 failed to find plugin “flannel“ in path [/usr/lib/cni]
容器·kubernetes·etcd
虫师c8 小时前
GitOps实战:ArgoCD+Tekton打造云原生CI/CD流水线
git·ci/cd·云原生·kubernetes·argocd·tekton
和光同尘20238 小时前
CentOS7搭建ELK日志分析系统
运维·elasticsearch·云原生·kubernetes·centos·kibana·logstash
Ribou8 小时前
不同环境(跨集群和同集群)下的Jenkins与Kubernetes集群连接配置
kubernetes·jenkins
Kaede611 小时前
Docker和K8S的区别详解
docker·容器·kubernetes
能不能别报错1 天前
K8s学习笔记(七) yaml
笔记·学习·kubernetes
Rinleren1 天前
企业级 K8s 运维实战:集群搭建、微服务暴露(Ingress)、监控告警(Prometheus)全流程
java·容器·kubernetes