4. etcd 集群部署模式:Raft 协议与拓扑对比

etcd 是 Kubernetes 控制面的“状态存储层”,其部署模式直接决定了集群的容错能力、网络延迟敏感度以及运维复杂度。本节从 Raft 一致性协议的核心机制出发,对比堆叠式与外部式两种 etcd 集群拓扑的适用场景与权衡。

4.1 Raft 一致性协议简介

Raft 是一种易于理解的一致性算法,用于在分布式系统中管理复制日志。etcd 使用 Raft 确保即使部分节点故障,集群仍能对外提供强一致性的键值存储服务。Raft 的核心机制包括:

  • Leader 选举:集群中任一时刻只有一个 Leader,负责处理所有客户端写入请求。Leader 通过心跳维持权威,若心跳超时,Follower 发起选举。
  • 日志复制:Leader 将客户端写入封装为日志条目,并行复制到所有 Follower。当日志被多数节点(Quorum)持久化后,Leader 提交该条目并通知 Follower。
  • 安全性:Raft 保证已提交的日志条目不会被覆盖,且只有拥有最新日志的节点才能成为 Leader。
关键指标:Quorum 计算
对于 N 个节点的 etcd 集群,容忍故障节点数为 floor((N-1)/2)。
常见规模:3 节点容忍 1 故障,5 节点容忍 2 故障。奇数节点可避免平局选举。
生产建议:etcd 集群节点数通常为 3 或 5。超过 7 节点会显著增加写入延迟,因为 Leader 需要等待多数节点确认。
Raft 日志复制流程(简化) Leader 接收客户端写入 Follower 1 追加日志条目 Follower 2 追加日志条目 AppendEntries RPC AppendEntries RPC 确认(ACK) Leader 收到多数 ACK 后提交日志,并通知所有 Follower 提交 客户端在提交完成后才能读取到该写入

4.2 etcd 集群拓扑:堆叠式 vs 外部式

在 Kubernetes 控制面中,etcd 集群的部署位置有两种主流模式:堆叠式(Stacked) 和 外部式(External)。两者的核心区别在于 etcd 进程是否与 API Server 运行在同一组节点上。

4.2.1 堆叠式拓扑

堆叠式拓扑将 etcd 与 API Server、Scheduler、Controller Manager 部署在同一组 Master 节点上。这是 kubeadm 默认的部署方式,也是小型集群或测试环境中最常见的模式。

  • 部署方式:每个 Master 节点同时运行 kube-apiserver 和 etcd 实例。
  • 资源竞争:etcd 对磁盘 I/O 和网络延迟敏感,与 API Server 共享节点资源。
  • 网络延迟:etcd 成员间通信在同一网络平面内,延迟较低。

4.2.2 外部式拓扑

外部式拓扑将 etcd 集群独立部署在专用节点上,与 Master 节点分离。这种模式常用于生产环境、大规模集群或对稳定性要求极高的场景。

  • 部署方式:etcd 集群运行在独立的服务器或虚拟机中,Master 节点通过网络连接 etcd。
  • 资源隔离:etcd 独占节点资源,避免被控制面其他组件干扰。
  • 网络开销:API Server 与 etcd 之间跨节点通信,引入额外的网络延迟。

4.3 优缺点对比

对比维度 堆叠式(Stacked) 外部式(External)
资源隔离 共享 Master 节点资源,etcd 可能受 API Server 突发负载影响 专用节点,etcd 性能稳定,不受控制面其他组件干扰
运维复杂度 较低,kubeadm 一键部署,节点数少 较高,需要独立管理 etcd 集群的扩缩容、备份与监控
网络延迟 低,etcd 成员间同节点或同机房通信 中等,API Server 与 etcd 跨节点通信,可能增加 1-3ms 延迟
故障域 Master 节点故障同时影响控制面与 etcd,风险集中 etcd 与 Master 分离,单一故障域影响范围更小
扩展性 Master 节点数受 etcd 集群规模限制(通常 3-5 节点) etcd 集群可独立扩展,Master 节点可水平扩展不受 etcd 限制
适用场景 开发/测试环境、中小规模集群(< 500 节点) 生产环境、大规模集群(> 500 节点)、对稳定性要求高的场景
避坑提示:堆叠式拓扑中,如果 Master 节点因磁盘 I/O 压力导致 etcd 性能下降,可能引发控制面级联故障。外部式拓扑虽然隔离性好,但需要额外投入专用节点成本,且网络延迟必须纳入 SLA 考量。
堆叠式 vs 外部式 etcd 拓扑对比 堆叠式(Stacked) Master 1 API Server etcd Scheduler / CM Master 2 API Server etcd Scheduler / CM Master 3 API Server etcd Scheduler / CM 外部式(External) Master 1 API Server Master 2 API Server Master 3 API Server etcd 1 专用节点 etcd 2 专用节点 etcd 3 专用节点

4.4 选型决策要点

  1. 集群规模:小于 500 节点且运维团队较小,优先选择堆叠式;超过 500 节点或计划大规模扩展,选择外部式。
  2. 稳定性要求:生产核心集群建议外部式,避免 etcd 因控制面组件异常而受影响。
  3. 资源预算:外部式需要额外 3-5 台专用节点,堆叠式可复用 Master 节点。
  4. 网络条件:如果 Master 节点间网络延迟较高(> 5ms),外部式可能引入不可接受的写入延迟,此时堆叠式更优。
实践建议:在迁移到外部式拓扑前,先使用 kubeadm 的堆叠式部署进行功能验证,待集群规模增长后再逐步迁移。迁移过程中需注意 etcd 数据备份与恢复策略。