3. 故障域基础理论:单点故障、故障隔离域、可用区(AZ)与地域(Region)划分

在构建高可用 Kubernetes 集群与 Helm 部署体系时,故障域(Failure Domain)是决定系统韧性的核心抽象。本章从单点故障出发,逐层定义故障隔离域、可用区(AZ)与地域(Region),为后续 DNS 故障场景下的 Helm 调优奠定理论基础。

3.1 单点故障(SPOF)

单点故障(Single Point of Failure, SPOF) 指系统中某个组件一旦失效,将导致整个服务或关键功能不可用。在 Kubernetes 和 DNS 架构中,常见的 SPOF 包括:

  • 单一 DNS 解析器:所有 Pod 依赖同一个 CoreDNS 实例。
  • 单一控制面节点:etcd 或 API Server 无高可用部署。
  • 单一 Ingress Controller:流量入口无冗余。
  • 单一存储后端:持久卷依赖单台存储服务器。
⚠️ 关键原则:任何未做冗余设计的组件都是潜在的 SPOF。Helm 部署时,必须通过 replicas、podAntiAffinity、topologySpreadConstraints 等参数主动消除 SPOF。

3.2 故障隔离域(Fault Domain)

故障隔离域 是指一组共享相同故障风险的资源集合。当该域内的某个基础设施组件(如电源、网络交换机、机架)发生故障时,域内所有资源可能同时受到影响。故障隔离域是比可用区更细粒度的概念。

隔离域层级 示例 故障范围
物理机/VM 单台服务器 进程级故障
机架(Rack) 同一机架内的服务器 电源/网络交换机故障
可用区(AZ) 同一数据中心内的独立区域 制冷/电力/网络区域故障
地域(Region) 跨城市/跨国家 自然灾害/大规模电力中断
💡 实践要点:在 Helm Chart 中,通过 topologyKey 定义故障隔离域。例如 topologyKey: "kubernetes.io/hostname" 表示按节点隔离;topologyKey: "topology.kubernetes.io/zone" 表示按可用区隔离。

3.3 可用区(Availability Zone, AZ)

可用区(AZ) 是云提供商在同一地域内划分的独立物理区域。每个 AZ 拥有独立的电力、冷却和网络设施,AZ 之间通过低延迟光纤互联。AZ 的设计目标是:一个 AZ 的故障不影响其他 AZ。

  • 典型特征:延迟 < 2ms,带宽充足,独立故障域。
  • Kubernetes 映射:通过 topology.kubernetes.io/zone 标签标识节点所属 AZ。
  • Helm 部署策略:使用 podAntiAffinity 将副本分布到不同 AZ。
可用区(AZ)与故障隔离域关系 地域(Region) 可用区 A 机架 1 节点-1 节点-2 机架 2 节点-3 节点-4 可用区 B 机架 3 节点-5 节点-6 机架 4 节点-7 节点-8 可用区 C 机架 5 节点-9 节点-10 机架 6 节点-11 节点-12 故障隔离域(机架级) 故障隔离域(机架级) 故障隔离域(机架级) 每个 AZ 包含多个机架(故障隔离域),AZ 之间物理隔离,故障不扩散

3.4 地域(Region)

地域(Region) 是云服务商在全球范围内划分的独立地理区域。每个 Region 包含多个 AZ,Region 之间通过公网或专线互联,延迟通常在 10-100ms 级别。Region 的设计目标是:跨 Region 容灾。

  • 典型特征:完全独立的基础设施,不共享任何物理资源。
  • Kubernetes 映射:通过 topology.kubernetes.io/region 标签标识。
  • Helm 部署策略:多集群部署,通过 Global DNS 或 Service Mesh 实现流量调度。

3.5 故障域层次对比

层次 故障范围 恢复时间目标(RTO) 典型故障 Helm 部署关注点
单点(SPOF) 单个进程/容器 秒级 Pod OOM、进程崩溃 replicas > 1、livenessProbe
故障隔离域 机架/交换机 分钟级 电源故障、网络分区 podAntiAffinity、topologyKey
可用区(AZ) 数据中心区域 分钟~小时级 制冷失效、区域电力中断 topologySpreadConstraints
地域(Region) 地理区域 小时级 自然灾害、大规模断网 多集群部署、Global DNS

3.6 DNS 场景下的故障域映射

在 DNS 故障场景中,故障域划分直接影响 CoreDNS 的部署策略:

  • 单点故障:单个 CoreDNS Pod 崩溃导致域名解析中断。
  • 故障隔离域:同一节点上的 CoreDNS 与业务 Pod 同时故障。
  • 可用区故障:整个 AZ 内的 CoreDNS 实例不可用,需要跨 AZ 解析。
  • 地域故障:Region 级 DNS 服务中断,需要 Global DNS 切换。
DNS 故障域层次与 Helm 部署策略 单点故障 单个 CoreDNS Pod replicas: 1 故障隔离域 节点/机架级 podAntiAffinity 可用区(AZ) 跨 AZ 分布 topologySpread 地域 多集群 Global DNS Helm 部署策略逐层递进:从 replicas → podAntiAffinity → topologySpreadConstraints → 多集群 Federation 每一层解决上一层的故障域覆盖盲区 故障影响范围对比 影响单个 Pod 影响单节点 Pod 影响整个 AZ 影响整个 Region 故障域越大,影响范围越广,恢复时间越长,部署策略越复杂

3.7 故障域划分原则总结

📌 核心原则:
  1. 最小化共享故障域:关键组件(如 CoreDNS)的副本必须分布在不同的故障隔离域中。
  2. 逐层冗余:从 Pod 级到 Region 级,每一层都要有冗余设计。
  3. 故障域感知调度:利用 Kubernetes 拓扑约束,让调度器自动将 Pod 分布到不同故障域。
  4. Helm 参数化:将故障域配置(如 topologyKey、maxSkew)暴露为 Chart values,方便不同环境调整。