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