k8s部署nacos集群
1、部署 MySQL(若無可先部署)
注意storageClassName名字
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
kubectl apply -f nacos-mysql.yaml
2、初始化數據庫
在https://github.com/alibaba/nacos/blob/2.4.1/distribution/conf/mysql-schema.sql拷貝sql文件內容
創建初始化sql文件,并導入到mysql
vim mysql-schema.sql
kubectl exec -i nacos-mysql-0 -n nacos -- mysql -uroot -pnacos@123 nacos_config < mysql-schema.sql
3、部署 Nacos 集群(3節點)
vim nacos-cluster.yaml
apiVersion: apps/v1 kind: StatefulSet # 使用StatefulSet保證有序部署和穩定網絡標識 metadata: name: nacos-cluster namespace: nacos spec: serviceName: nacos-headless # Headless Service用于集群通信 replicas: 3 selector: matchLabels: app: nacos-cluster template: metadata: labels: app: nacos-cluster spec: affinity: # podAntiAffinity: # 反親和性,避免Pod部署到同一節點 # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchExpressions: # - key: app # operator: In # values: # - nacos-cluster # topologyKey: "kubernetes.io/hostname" containers: - name: nacos image: nacos/nacos-server:v2.4.1 env: - name: MODE value: "cluster" - 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" - name: SPRING_DATASOURCE_PLATFORM value: "mysql" - name: MYSQL_SERVICE_HOST value: "nacos-mysql" - name: MYSQL_SERVICE_PORT value: "3306" - name: MYSQL_SERVICE_DB_NAME value: "nacos_config" - name: MYSQL_SERVICE_USER value: "root" - name: MYSQL_SERVICE_PASSWORD value: "nacos@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: JVM_XMS value: "2g" - name: JVM_XMX value: "2g" ports: - containerPort: 8848 - containerPort: 9848 volumeMounts: - name: nacos-log mountPath: /home/nacos/logs volumeClaimTemplates: # 動態PVC,每個Pod獨立存儲 - metadata: name: nacos-log spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi storageClassName: "nfs-client" --- # Headless Service用于集群節點間通信 apiVersion: v1 kind: Service metadata: name: nacos-headless namespace: nacos spec: clusterIP: None selector: app: nacos-cluster ports: - name: http port: 8848 targetPort: 8848 - name: grpc port: 9848 targetPort: 9848 --- # 對外暴露的Service apiVersion: v1 kind: Service metadata: name: nacos namespace: nacos spec: type: NodePort # 生產環境建議用LoadBalancer selector: app: nacos-cluster ports: - name: http port: 8848 targetPort: 8848 nodePort: 30848 - name: grpc port: 9848 targetPort: 9848
kubectl apply -f nacos-cluster.yaml
4、驗證
訪問控制臺
-
URL:
http://<master節點IP>:30848/nacos -
賬號:
nacos(默認密碼是nacos)
可以看到有3個節點

在public工作空間 新建配置

刪除所有的nacos節點并新建
kubectl delete -f nacos-cluster.yaml
kubectl apply -f nacos-cluster.yaml

再次訪問頁面發現配置還在


浙公網安備 33010602011771號