Nacos 配置使用K8S yaml 部署


1. 准備階段

  nacos-server 鏡像

       yaml 文件

  mysql 數據庫

       使用NodePort  yaml

#deploy
apiVersion: apps/v1
kind: Deployment
#kind: StatefulSet
metadata:
  name: nacos-server
  namespace: test
spec:
  selector:
    matchLabels:
      app: nacos-server
  replicas: 1
  template:
    metadata:
      labels:
        app: nacos-server
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8s-node1#標簽篩選,固定哪個節點上安裝
        emptyDir: {}
      containers:
      - name: nacos-server
        image: nacos-server:1.3.1
        imagePullPolicy: Always
        env:   //環境變量設置
        - name: MODE
          value: "standalone"        
        - name: MYSQL_SERVICE_HOST
          value:  "127.0.0.1"  //數據庫地址
        - name: MYSQL_SERVICE_DB_NAME
          value: "nacos-server"
        - name: MYSQL_SERVICE_USER
          value: "root"
        - name: MYSQL_SERVICE_PASSWORD
          value: "123456"
        - name: NACOS_AUTH_CACHE_ENABLE
          value: "true"
        ports:
        - containerPort: 8848
        resources:
          limits:
            cpu: 0
            memory: 0
          requests:
            cpu: 0
            memory: 0
---
#service
apiVersion: v1
kind: Service
metadata:
  name: nacos-server
  namespace: test
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8848
    nodePort: 30099
  selector:
    app: nacos-server
---

 參數解析 可通過環境變量注入: 表格引自https://www.cnblogs.com/allennote/articles/12459907.html

name description option
MODE cluster模式/standalone模式 cluster/standalone default cluster
NACOS_SERVERS nacos cluster地址 eg. ip1,ip2,ip3
PREFER_HOST_MODE 是否支持hostname hostname/ip default ip
NACOS_SERVER_PORT nacos服務器端口 default 8848
NACOS_SERVER_IP 多網卡下的自定義nacos服務器IP  
SPRING_DATASOURCE_PLATFORM standalone 支持 mysql mysql / empty default empty
MYSQL_MASTER_SERVICE_HOST mysql 主節點host  
MYSQL_MASTER_SERVICE_PORT mysql 主節點端口 default : 3306
MYSQL_MASTER_SERVICE_DB_NAME mysql 主節點數據庫  
MYSQL_MASTER_SERVICE_USER 數據庫用戶名  
MYSQL_MASTER_SERVICE_PASSWORD 數據庫密碼  
MYSQL_SLAVE_SERVICE_HOST mysql從節點host  
MYSQL_SLAVE_SERVICE_PORT mysql從節點端口 default :3306
MYSQL_DATABASE_NUM 數據庫數量 default :2
JVM_XMS -Xms default :2g
JVM_XMX -Xmx default :2g
JVM_XMN -Xmn default :1g
JVM_MS -XX:MetaspaceSize default :128m
JVM_MMS -XX:MaxMetaspaceSize default :320m
NACOS_DEBUG 開啟遠程調試 y/n default :n
TOMCAT_ACCESSLOG_ENABLED server.tomcat.accesslog.enabled default :false

 使用 ingress 方式設置 集群 (此集群為k8s模式集群 非nacos提供的標准集群模式 如需相互監聽請參考nacos 官方部署模式)

  

#deploy
apiVersion: apps/v1
kind: Deployment
#kind: StatefulSet
metadata:
  name: nacos-server
  namespace: test
spec:
  selector:
    matchLabels:
      app: nacos-server
  replicas: 2 //部署多份nacos
  template:
    metadata:
      labels:
        app: nacos-server
    spec:
        emptyDir: {}
      containers:
      - name: nacos-server
        image: nacos-server:1.3.1
        imagePullPolicy: Always
        env:
        - name: MODE
          value: "standalone"

      - name: NACOS_AUTH_ENABLE
            value: "true"

          - name: MYSQL_SERVICE_HOST

          value: "127.0.0.1"
        - name: MYSQL_SERVICE_DB_NAME
          value: "nacos-server"
        - name: MYSQL_SERVICE_USER
          value: "root"
        - name: MYSQL_SERVICE_PASSWORD
          value: "123456"
        - name: NACOS_AUTH_CACHE_ENABLE
          value: "true"       
        ports:
        - containerPort: 8848
        resources:
          limits:
            cpu: 0
            memory: 0
          requests:
            cpu: 0
            memory: 0
---
#service
apiVersion: v1
kind: Service
metadata:
  name: nacos-server
  namespace: test
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8848
  selector:
    app: nacos-server
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nacos-server
  namespace: test
spec:
  rules:
  - host: nacos.test.com
    http:
      paths:
      - path: /   
        backend:
          serviceName: nacos-server
          servicePort: 80

 ps : 此模式在測試環境使用時出現不停拉取配置的問題 : 經過排查和查看nacos源碼發現 每一個nacos server 都有本地緩存,

      由於使用集群之間沒有通信導致本地緩存不一致,

      因此client 在監聽時獲取配置不同生成md5可能與本地不一致,導致client 更新項目配置  -------2020.12

使用nacos官方快速集成方式創建 nacos集群yaml

 

 

2  yaml執行

 yaml 文件名為 nacos-test.yaml

 執行命令為apiVersion: v1

kind: Service metadata: name: nacos-server namespace: nacos-test labels: app: nacos-server spec: ports: - port: 80 name: server targetPort: 8848 - port: 7848 name: rpc targetPort: 7848 selector: app: nacos --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nacos namespace: nacos-sercer spec: serviceName: nacos-server replicas: 3 template: metadata: labels: app: nacos annotations: pod.alpha.kubernetes.io/initialized: "true" spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - nacos-server topologyKey: "kubernetes.io/hostname" containers: - name: k8snacos imagePullPolicy: Always image: nacos-server:1.3.1 resources: requests: memory: "500Mi" cpu: "500m" ports: - containerPort: 8848 name: client - containerPort: 7848 name: rpc env: - name: NACOS_REPLICAS value: "3" - name: SPRING_DATASOURCE_PLATFORM value: "mysql" - name: MYSQL_SERVICE_HOST value: "127.0.0.1"
- name: NACOS_AUTH_ENABLE
            value: "true"
- name: MYSQL_SERVICE_DB_NAME value: "nacos_server" - name: MYSQL_SERVICE_USER value: "root" - name: MYSQL_SERVICE_PASSWORD value: "123456" - name: NACOS_AUTH_CACHE_ENABLE value: "true" - name: JVM_XMS value: "512m" - name: JVM_XMX value: "512m" - name: JVM_XMN value: "512m" - name: NACOS_SERVER_PORT value: "8848" - name: NACOS_APPLICATION_PORT value: "8848" - name: PREFER_HOST_MODE value: "hostname" - name: NACOS_SERVERS value: "nacos-0.nacos-server.nacos-test.svc.cluster.local:8848 nacos-1.nacos-server.nacos-test.svc.cluster.local:8848 nacos-2.nacos-server.nacos-test.svc.cluster.local:8848" selector: matchLabels: app: nacos --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nacos namespace: nacos-test spec: rules: - host: nacos.test.com http: paths: - path: / backend: serviceName: nacos-server servicePort: 80

  

   NACOS_SERVERS
              value: "nacos-0.nacos-server.nacos-test.svc.cluster.local:8848 nacos-1.nacos-server.nacos-test.svc.cluster.local:8848 nacos-2.nacos-server.nacos-test.svc.cluster.local:8848"
可以實現集群之間的通信和實現選舉

 

  配置字段解析如上圖 實現  統一service下 pod 間 的通信 

kubectl apply -f  nacos-test.yaml

 

 使用NACOS遇見問題

  1. nacos 和 jasypt 一起使用監聽配置變更時會使解密后數據變為加密  --- 解決方案

 

啟動類使用 new SpringApplicationBuilder().environment(new StandardEncryptableEnvironment()).sources(Application.class).run(args); 加載配置,啟動項目
2 定時任務 不能使用更新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM