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