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 定時任務 不能使用更新