K8s下Nacos集群-填坑记

本文详细记录了在Kubernetes 1.16上部署Nacos时遇到的问题,包括服务列表初始化等待、找不到leader及健康检查配置错误等,并提供了解决方案,如Service配置、StatefulSet中探针的正确设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署信息

1、K8S 1.16
2、nacos docker images lastest 2019-11-26
3、安装方式:https://github.com/nacos-group/nacos-k8s.git下的
mysql-master-nfs.yaml
mysql-slave-local.yaml
nacos-pvc-nfs.yaml

根据实际情况修改上述3个yaml,mysql的主从部署pods没啥坑。坑在nacos-pvc-nfs.yaml中的Service、StatefulSet类型

坑的Bug信息

1、INFO waiting server list init…
2、WARN [IS LEADER] no leader is available now!
3、找不到啥servlsit

这么解决

1、Service中的clusterIP: None,最好不要修改,一修改容易导致找不到servlist,也就是没有往pod中的/home/nacos/conf放cluster.conf。故最好在pod无问题之后,如果要NodePort,再设个服务IP。
2、关于Bug 1、2号,只要把StatefulSet配置中的readinessProbe、livenessProbe节点删除保存即可。删除后仍然有健康检查请求,只不过时间间隔变成2秒而已!

后记

也许不是最佳解决方式,有更好的方式,兄台留言告之

### Kubernetes 上部署 Nacos 集群的解决方案 在 Kubernetes (K8s) 环境中部署 Nacos 集群,需要综合考虑集群配置、持久化存储、数据库初始化以及高可用性设置等关键点。以下是详细的解决方案和指南: #### 1. Nacos 集群模式概述 Nacos 支持单机模式和集群模式。在生产环境中,推荐使用集群模式以实现高可用性和负载均衡。Nacos 集群模式依赖于一个共享的持久化存储(如 MySQL 数据库)来保存配置信息和服务注册数据[^1]。 #### 2. Kubernetes 基础设施准备 在开始部署之前,确保 Kubernetes 集群已正确安装并运行,并且具备以下条件: - 安装并配置好 `kubectl` 工具。 - Kubernetes 集群版本需满足 Nacos 的最低要求(通常为 v1.16+)。 - 创建一个专用的命名空间用于 Nacos 部署,例如: ```bash kubectl create namespace nacos ``` #### 3. 持久化存储配置 Nacos 需要一个持久化存储来保存配置数据和服务注册信息。可以通过以下方式配置持久化存储: - 使用外部 MySQL 数据库作为持久化存储。 - 初始化 MySQL 数据库时,执行必要的 SQL 脚本以创建所需的表结构。例如: ```sql ALTER TABLE config_info ADD encrypted_data_key TEXT NOT NULL; ALTER TABLE config_info_beta ADD encrypted_data_key TEXT NOT NULL; ALTER TABLE his_config_info ADD encrypted_data_key TEXT NOT NULL; ``` 这些脚本确保数据库表结构符合 Nacos 的需求[^2]。 #### 4. YAML 文件定义 创建 Kubernetes 的 YAML 文件以部署 Nacos 集群。以下是一个示例 YAML 文件结构: ##### 4.1 MySQL 部署 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql namespace: nacos spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "rootpassword" ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim --- apiVersion: v1 kind: Service metadata: name: mysql namespace: nacos spec: ports: - port: 3306 selector: app: mysql ``` ##### 4.2 Nacos 部署 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nacos-cluster namespace: nacos spec: replicas: 3 selector: matchLabels: app: nacos template: metadata: labels: app: nacos spec: containers: - name: nacos image: nacos/nacos-server:2.0.4 env: - name: MODE value: "cluster" - name: SPRING_DATASOURCE_PLATFORM value: "mysql" - name: MYSQL_SERVICE_HOST value: "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: "rootpassword" ports: - containerPort: 8848 --- apiVersion: v1 kind: Service metadata: name: nacos-cluster namespace: nacos spec: type: LoadBalancer ports: - port: 8848 selector: app: nacos ``` #### 5. Kuboard 的辅助作用 Kuboard 是一个可视化的 Kubernetes 管理工具,可以简化 YAML 文件的编写和调试过程。通过 Kuboard,用户可以直观地管理 Kubernetes 资源,包括 Pods、Services 和 ConfigMaps 等[^1]。此外,Kuboard 提供了定期更新功能,确保与最新版本的 Kubernetes 兼容。 #### 6. 高可用性与访问控制 为了提高 Nacos 集群的高可用性,建议配置以下内容: - 设置多个副本(如上述 YAML 中的 `replicas: 3`)。 - 使用 Kubernetes 的 Service 类型 `LoadBalancer` 或 `Ingress` 来暴露 Nacos 服务。 - 配置访问控制策略,例如通过 Kubernetes 的 RBAC(基于角色的访问控制)限制对 Nacos API 的访问。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值