在 K8s 集群运维的路上,你是不是也踩过这些坑:

  • 测试环境单 Master 跑得好好的,上了生产刚跑 3 个月,Master 节点宕机,整个集群直接失控,业务中断 2 小时;
  • 听说多 Master 更稳定,直接堆了 4 个 Master 节点,结果故障时还是集群挂了,完全没起到容错效果;
  • 集群扩到 200 个 Worker 节点,Master 节点还是 3 个 1 核 2G 的低配,结果 apiserver 频繁超时,etcd 频繁选主,集群卡成 PPT;
  • 盲目追求高可用,搞了 7 个以上的 Master 节点,结果 etcd 同步延迟飙升,集群性能反而断崖式下跌。

其实,90% 的 K8s 控制平面故障,都源于对「多 Master 节点的底层逻辑」和「Master-Worker 节点配比规则」的误解。而这一切的核心,都藏在 K8s 集群的元数据心脏 ——etcd 所依赖的Raft 一致性协议里。

今天这篇文章,我们就从 Raft 分布式共识的底层原理出发,彻底讲透 K8s 多 Master 节点的必要性,以及 Master 与 Worker 节点数量配比的黄金法则,帮你从根源上避开集群高可用的那些坑。

一、先搞懂:K8s Master 节点,到底是集群的什么?

在聊高可用之前,我们必须先明确 Master 节点在 K8s 集群里的核心定位 —— 它是整个集群的「控制大脑」,所有集群状态的管理、调度、决策、校验,都由 Master 节点的核心组件完成。

一个标准的 Master 节点,包含 4 个核心组件:

  1. kube-apiserver:集群唯一的入口,所有组件的通信枢纽,对外提供 RESTful API,所有的集群操作(创建 Pod、扩容、更新)都要经过它的校验和转发;
  2. etcd:集群的元数据数据库,整个 K8s 集群所有的资源状态、配置信息、节点数据,都唯一存储在 etcd 中,它是集群的「唯一真相源」;
  3. kube-controller-manager:负责集群的状态闭环控制,比如副本数维持、节点健康检查、故障自愈等,是集群的「自动化管家」;
  4. kube-scheduler:负责 Pod 的调度决策,根据资源需求、亲和性、节点状态等规则,把 Pod 分配到合适的 Worker 节点上,是集群的「调度中枢」。

而单 Master 集群的致命风险,就藏在这个架构里:单 Master 节点是彻头彻尾的单点故障

一旦唯一的 Master 节点宕机,会直接导致:

  • etcd 服务不可用,集群失去唯一真相源,所有状态读写全部失效;
  • kube-apiserver 中断,无法执行任何集群操作,包括 Pod 创建、扩容、更新、删除;
  • 控制器和调度器停止工作,集群失去故障自愈能力,已经运行的 Pod 哪怕出现故障也无法重建;
  • 最致命的是:哪怕所有 Worker 节点都正常运行,业务 Pod 还在提供服务,你也无法对集群做任何变更,一旦业务 Pod 出现异常,就会直接引发服务中断。

这也是为什么,所有 K8s 生产环境的最佳实践,都明确要求必须采用多 Master 节点的高可用架构。而这个架构的底层支撑,就是 etcd 实现分布式共识的 Raft 协议。

二、核心底层:Raft 一致性协议,如何决定了多 Master 的生死?

很多人对多 Master 的理解,停留在「多部署几个 apiserver 做负载均衡」,但这只是表象。K8s 控制平面高可用的核心,是 etcd 集群的高可用;而 etcd 集群能实现数据一致、故障容错的根本,就是Raft 一致性协议

我们不用纠结 Raft 的复杂算法细节,只需要搞懂和 K8s 集群架构强相关的 3 个核心特性,就能彻底理解多 Master 的底层逻辑。

2.1 Raft 的核心:多数派(Quorum)共识机制

Raft 是一种强一致性的分布式共识算法,它的核心设计是「多数派写入成功,即数据提交成功」。

简单来说:一个 Raft 集群中,所有写操作必须先经过 Leader 节点,再同步到 Follower 节点,只有超过半数(多数派)的节点完成数据写入,这条数据才会被正式提交,对集群可见

同时,Raft 集群的存活前提,也是「集群中必须有超过半数的节点正常运行」。只有多数派节点存活,集群才能完成 Leader 选举、数据同步,继续提供服务;一旦存活节点数不足半数,集群会直接失去写入能力,甚至无法正常工作。

2.2 容错能力:奇数节点才是唯一正确解

基于多数派机制,我们可以直接算出不同节点数的 Raft 集群的容错能力(最多允许宕机的节点数):

表格

Raft 集群节点数 多数派法定人数 最大容错节点数
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3

这个表格里,藏着两个颠覆很多人认知的结论:

  1. 偶数节点的 Raft 集群,完全没有额外的容错收益。2 个节点和 1 个节点的容错能力都是 0,4 个节点和 3 个节点的容错能力都是 1,6 个节点和 5 个节点的容错能力都是 2。你多花了服务器成本,却没有换来任何容错能力的提升。
  2. 只有奇数节点,才能实现容错能力的最大化。每增加 2 个节点,集群的容错能力才会提升 1 级,同时多数派法定人数的增长更平缓,集群的存活门槛更低。

这就是为什么,所有 K8s 高可用集群的 Master 节点数,永远是 3、5、7 这样的奇数 —— 这不是最佳实践,而是 Raft 协议决定的底层规则。

2.3 性能边界:节点数越多,集群性能反而越差

很多人以为「Master 节点越多,集群性能越强」,但在 Raft 协议里,这个结论完全相反。

Raft 集群的写入性能,和节点数量成反比。因为每一次写操作,都需要 Leader 节点把数据同步到多数派节点,并收到确认后才能提交。节点数越多,需要同步的目标节点越多,网络往返开销越大,写入延迟就越高,集群的整体性能反而会下降。

etcd 官方明确给出了最佳实践:生产环境的 etcd 集群,节点数推荐 3 个或 5 个,最大不超过 7 个。超过 7 个节点后,Raft 共识的开销会急剧上升,带来的性能损耗,远大于多节点带来的容错收益。

三、彻底讲透:K8s 多 Master 节点的必要性,到底在哪?

理解了 Raft 协议的核心规则,我们再回头看 K8s 多 Master 节点的必要性,就不再是「别人都这么配,我也这么配」的跟风,而是有底层逻辑支撑的必然选择。

多 Master 节点的价值,核心体现在 3 个层面,层层递进,缺一不可:

3.1 底层存储高可用:etcd 集群的容错兜底

这是多 Master 最核心的价值。K8s 集群的所有元数据都存在 etcd 中,一旦 etcd 集群失效,整个 K8s 集群就会彻底瘫痪。

而基于 Raft 协议的多节点 etcd 集群,能实现真正的故障容错:

  • 3 节点 etcd 集群,允许 1 个节点宕机,集群依然能正常提供服务,数据不丢失;
  • 5 节点 etcd 集群,允许 2 个节点同时宕机,依然能保证集群的一致性和可用性;
  • 只有多节点部署,才能实现 etcd 的数据多副本冗余,避免单节点硬盘故障导致的集群数据彻底丢失。

目前 K8s 主流的高可用架构分为两种,都离不开多 Master 的支撑:

  • 堆叠式架构:etcd 和 Master 控制组件部署在相同的节点上,3 个 Master 节点就对应 3 节点的 etcd 集群,架构简单,运维成本低,适合绝大多数生产场景;
  • 外部 etcd 集群架构:etcd 集群独立部署,和 Master 控制组件分离,Master 组件可以单独扩容,etcd 集群单独优化,适合超大规模生产集群。

3.2 控制组件高可用:无单点的集群中枢

除了 etcd,Master 节点的其他核心组件,也需要多节点部署实现高可用:

  • kube-apiserver:无状态服务,多 Master 节点部署多实例后,可以通过负载均衡对外提供统一入口,实现请求的负载分担,同时单个 apiserver 实例宕机,不会影响集群的访问能力;
  • kube-controller-manager 与 kube-scheduler:有状态的主备架构,多实例部署后,会通过 etcd 的分布式锁进行选主,只有 Leader 实例正常工作,其他实例处于热备状态。一旦 Leader 所在的 Master 节点宕机,其他节点的备用实例会在秒级完成选主接管,保证集群的控制逻辑不中断。

3.3 集群性能扩容:应对大规模集群的访问压力

随着 Worker 节点和 Pod 数量的增加,kube-apiserver 的请求 QPS 会急剧上升(节点心跳、Pod 状态上报、资源监听、运维操作等),单 Master 节点的 apiserver 很容易成为性能瓶颈。

多 Master 节点部署,可以实现 apiserver 的水平扩容,多个实例分担请求压力,同时通过提升 Master 节点的硬件配置,支撑更大规模的集群访问。

四、黄金法则:Master 与 Worker 节点数量配比的核心原理

搞懂了多 Master 的必要性,我们再解决最核心的问题:我的集群到底该配几个 Master 节点?Master 和 Worker 的数量关系,到底遵循什么规则?

这里要先纠正一个误区:Master 节点数量和 Worker 节点数量,不是线性增长关系。不是 10 个 Worker 配 1 个 Master,100 个 Worker 配 10 个 Master,这种配比完全违背了 Raft 协议的底层规则。

Master 节点数量的选择,核心遵循 5 个黄金法则,优先级从高到低:

法则 1:容错能力优先,匹配业务 SLA 等级

Master 节点数量的第一决定因素,是你的业务对集群可用性的要求,也就是 SLA 等级。

  • 开发测试环境:无高可用要求,1 个 Master 节点即可,容错 0;
  • 非核心生产业务:SLA 要求 99.9%(全年允许 8.76 小时不可用),3 个 Master 节点,容错 1 个节点故障,完全满足需求;
  • 核心生产业务:SLA 要求 99.95%(全年允许 4.38 小时不可用),5 个 Master 节点,容错 2 个节点同时故障,可用性大幅提升;
  • 金融级核心业务:SLA 要求 99.99%(全年允许 52.56 分钟不可用),采用外部 etcd 集群架构,5-7 个 etcd 节点 + 3-5 个 Master 控制节点,实现存储和控制平面的双重高可用。

法则 2:节点数必须为奇数,严格遵守 Raft 协议规则

无论集群规模多大,Master 节点(或 etcd 集群节点)的数量必须为奇数,绝对不要使用 2、4、6 个偶数节点。

再次强调:偶数节点没有任何额外的容错收益,反而会增加服务器成本、提升共识开销、增加节点故障的概率,完全是得不偿失的配置。

法则 3:集群规模越大,优先升配而非加节点

当 Worker 节点数量增长,集群压力上升时,优先提升 Master 节点的硬件配置,而非盲目增加 Master 节点数量

K8s 集群的性能瓶颈,绝大多数时候不是 Master 节点的数量,而是单节点的硬件能力:

  • etcd 的性能,极度依赖 CPU 主频和硬盘 IO 性能,生产环境必须使用 NVMe SSD,机械硬盘完全无法满足 etcd 的写入要求;
  • kube-apiserver 的性能,和 CPU 核心数、内存大小强相关,大规模集群下,apiserver 会消耗大量的 CPU 和内存资源处理请求;
  • 控制器和调度器,也需要足够的 CPU 和内存资源,才能保证大规模集群下的调度和控制效率。

这里给出不同集群规模下,Master 节点的最低硬件配置参考:

表格

Worker 节点规模 推荐 Master 节点配置
<50 个 4 核 8G,SSD 硬盘
50-200 个 8 核 16G,高性能 SSD
200-500 个 16 核 32G,NVMe SSD
500-1000 个 32 核 64G,企业级 NVMe SSD

法则 4:严格遵守节点数上限,最大不超过 7 个

无论你的集群规模多大,etcd 集群的节点数最大不要超过 7 个,Master 节点数同步遵循这个上限。

超过 7 个节点后,Raft 共识的开销会急剧上升,etcd 的写入延迟会大幅增加,反而会导致集群频繁出现超时、选主、数据同步异常等问题,稳定性不升反降。

K8s 官方给出的单集群规模上限是 5000 个节点,但在实际生产中,单集群 Worker 节点数超过 1000 个时,优先拆分多个集群,而非单集群无限扩容

法则 5:超大规模集群,优先分离存储与控制平面

当集群 Worker 节点数超过 500 个时,推荐采用外部 etcd 集群架构,将 etcd 存储集群和 Master 控制组件节点分离部署。

这样做的核心优势:

  • etcd 集群可以单独优化硬件、网络配置,避免和控制组件争抢资源,保证元数据存储的性能和稳定性;
  • Master 控制组件(apiserver、controller、scheduler)可以单独水平扩容,无需同步增加 etcd 节点数,在不影响 Raft 共识性能的前提下,提升控制平面的处理能力;
  • 实现存储和控制平面的故障隔离,etcd 集群和 Master 组件的故障不会互相影响,进一步提升集群的可用性。

五、避坑指南:90% 的人都会踩的节点配置误区

误区 1:生产环境用单 Master 节点

这是最致命的错误。单 Master 节点没有任何容错能力,一旦节点宕机,集群直接失控,生产环境绝对禁止使用。

误区 2:偶数个 Master 节点

2 个、4 个、6 个 Master 节点,完全没有额外的容错收益,反而增加了成本和故障概率,严格禁止使用。

误区 3:Master 节点越多,集群越稳定

超过 7 个 Master 节点后,Raft 共识的性能损耗远大于容错收益,反而会导致集群稳定性下降,绝对不要盲目堆节点。

误区 4:用 Master 节点跑业务 Pod

生产环境必须给 Master 节点设置污点(Taint),禁止业务 Pod 调度到 Master 节点上。业务 Pod 会争抢 Master 节点的资源,导致控制平面组件性能下降,引发集群不稳定。

误区 5:只关注节点数量,不关注硬件配置

很多人用 3 个 1 核 2G 的云服务器做 Master 节点,跑 100 个 Worker 的集群,结果集群频繁卡顿、超时。Master 节点是集群的大脑,必须保证足够的硬件配置,尤其是 CPU、内存和硬盘 IO,这比节点数量更重要。

六、实战选型:不同规模集群的节点配置快速参考表

为了方便大家直接落地,这里整理了不同规模集群的 Master 节点配置选型表,覆盖绝大多数生产场景:

表格

集群 Worker 节点规模 推荐 Master 架构 推荐 Master 节点数 容错能力 适用场景
<20 个(开发测试) 堆叠式架构 1 个 0 本地开发、功能测试环境,无高可用要求
20-100 个(中小生产) 堆叠式架构 3 个 1 企业内部系统、非核心业务,SLA 要求 99.9%
100-500 个(中大型生产) 堆叠式架构 5 个 2 核心业务系统,大规模容器部署,SLA 要求 99.95%
500-1000 个(超大型生产) 外部 etcd 架构 3 个 Master 控制节点 + 5 个外部 etcd 节点 2 超大规模业务,单集群峰值压力大,SLA 要求 99.99%
>1000 个 多集群拆分 单集群不超过 5 个 Master 节点 - 超大型互联网业务,多地域多集群部署,避免单集群规模过大

七、写在最后

K8s 集群的高可用,从来不是靠堆节点实现的数字游戏,而是基于底层分布式原理的科学决策。

多 Master 节点的必要性,本质上是 Raft 一致性协议赋予分布式集群的容错能力;而 Master 与 Worker 节点的配比,核心是在「可用性、性能、成本」三者之间找到最佳平衡。

最后,再给大家总结几个能直接记在心里的核心结论:

  1. 生产环境绝对禁止单 Master 节点,最低要求 3 个奇数节点的 Master 集群;
  2. Master 节点数量必须为奇数,这是 Raft 协议决定的底层规则,偶数节点无任何收益;
  3. Master 节点数量上限为 7 个,超过后性能损耗远大于收益;
  4. 集群规模扩大,优先提升 Master 节点硬件配置,而非盲目增加节点数量;
  5. 超大规模集群,优先拆分多集群,而非单集群无限扩容。

希望这篇文章,能帮你彻底搞懂 K8s 集群高可用的底层逻辑,从此不再乱配节点,搭建出真正稳定、高性能的 K8s 集群。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐