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号