3. 故障域概念:故障域(Failure Domain)定义

故障域(Failure Domain)是分布式系统与云原生架构中描述故障传播边界的核心抽象。它定义了一组共享同一故障风险源的资源集合——当该风险源失效时,集合内的所有资源将同时或级联失去可用性。在 Kubernetes 与微服务架构中,正确识别与划分故障域是设计高可用、弹性系统的前提。

核心原则:故障域是“共因失效”的边界。同一故障域内的资源共享相同的电源、网络交换机、物理机架、可用区或集群控制面;跨故障域的资源则具备独立的失效概率。

3.1 故障域的三层模型

在生产环境中,故障域通常按物理与逻辑层级划分为三个层次:节点故障域、可用区故障域、集群故障域。每一层对应不同的故障半径与恢复策略。

故障域层级 故障范围 典型失效场景 恢复手段
节点故障域 单台物理机/虚拟机 硬件故障、内核 Panic、OOM、磁盘损坏 Pod 自动迁移至其他节点(kubelet 健康检查 + 控制器)
可用区故障域 单个数据中心可用区(AZ) 机架断电、TOR 交换机故障、区域网络抖动 跨 AZ 调度 + 反亲和性规则 + 负载均衡故障转移
集群故障域 整个 Kubernetes 集群 控制面崩溃、etcd 集群脑裂、API Server 不可用 多集群联邦、备份恢复、异地容灾切换
实践提示:在 CrashLoop 场景中,节点故障域是最常见的根因定位起点。但若 CrashLoop 模式在多个节点上同时出现,则需立即将排查范围提升至可用区或集群故障域。

3.2 节点故障域(Node Failure Domain)

节点故障域是最小粒度的故障隔离单元。在 Kubernetes 中,一个节点(Node)对应一台物理机或虚拟机,承载多个 Pod。节点故障域内的所有 Pod 共享该节点的内核、kubelet 进程、容器运行时、本地存储与网络栈。

  • 故障特征:节点宕机、kubelet 失联、节点 NotReady 状态、本地磁盘 I/O 挂起。
  • CrashLoop 关联:若 Pod 因节点级资源争抢(如 CPU 节流、内存 OOM)而反复重启,则 CrashLoop 的根因在节点故障域内。
  • 划分方法:通过 kubernetes.io/hostname 标签或 topology.kubernetes.io/zone 区分不同节点。
# 查看节点故障域标签
kubectl get nodes --show-labels | grep -E "kubernetes.io/hostname|topology.kubernetes.io/zone"

3.3 可用区故障域(Availability Zone Failure Domain)

可用区(AZ)是云提供商或自建数据中心内独立的物理区域,拥有独立的电力、冷却和网络基础设施。可用区故障域包含多个节点,这些节点共享同一组基础设施风险源。

  • 故障特征:整个 AZ 网络延迟升高、AZ 级电源中断、区域负载均衡器失效。
  • CrashLoop 关联:当 CrashLoop 模式在同一个 AZ 内的多个节点上同时出现时,应怀疑 AZ 级故障(如区域 DNS 解析失败、共享存储挂载点异常)。
  • 划分方法:使用 topology.kubernetes.io/zone 标签标识,Pod 反亲和性规则中指定 topologyKey: topology.kubernetes.io/zone。
常见误区:不要将“节点故障域”与“可用区故障域”混为一谈。节点故障域是单点失效,可用区故障域是区域共因失效。在 CrashLoop 排查中,若单节点出现 CrashLoop 则优先查节点;若跨节点同 AZ 出现 CrashLoop,则必须查 AZ 基础设施。

3.4 集群故障域(Cluster Failure Domain)

集群故障域是整个 Kubernetes 集群的失效边界。当集群控制面(API Server、Controller Manager、Scheduler、etcd)出现不可恢复的故障时,集群内所有工作负载将失去调度与自愈能力。

  • 故障特征:API Server 不可达、etcd 集群仲裁丢失、所有节点同时失联、集群证书过期。
  • CrashLoop 关联:集群故障域通常不会直接导致 Pod CrashLoop,但会阻止 CrashLoop 的自动恢复(如 Deployment 控制器无法创建新 Pod)。
  • 划分方法:通过集群名称、集群 ID 或联邦集群中的 cluster 标签区分。多集群部署时,每个集群是一个独立的故障域。

3.5 故障域层次结构(SVG)

下图展示了从节点到集群的三层故障域层次结构,以及 CrashLoop 场景中故障传播的典型路径。

故障域三层层次结构 集群故障域(Cluster Failure Domain) 控制面故障 · etcd 仲裁丢失 · 集群证书过期 · 全局不可调度 CrashLoop 影响:阻止自动恢复,Pod 无法重建 可用区故障域(AZ Failure Domain) 区域断电 · TOR 交换机故障 · 区域网络抖动 · 共享存储异常 CrashLoop 影响:同 AZ 多节点同时 CrashLoop 节点故障域(Node Failure Domain) 硬件故障 · 内核 Panic · OOM · 磁盘损坏 · kubelet 失联 CrashLoop 影响:单节点 Pod 反复重启 故障传播方向:自下而上

3.6 故障域划分的工程意义

在 CrashLoop 场景的资源模型优化中,故障域划分直接决定以下三个关键决策:

  1. Pod 调度策略:通过 podAntiAffinity 将同一工作负载的副本分散到不同节点故障域和可用区故障域,避免单点或单 AZ 故障导致全部副本 CrashLoop。
  2. 资源预留与限流:在节点故障域内设置合理的 requests 与 limits,防止资源争抢引发级联 CrashLoop。
  3. 监控与告警阈值:按故障域层级设置告警——单节点 CrashLoop 触发 P2 告警,跨节点同 AZ CrashLoop 触发 P1 告警,集群级故障触发 P0 告警。
关键结论:故障域划分不是理论概念,而是 CrashLoop 排查与资源模型优化的第一性原理。每一次 CrashLoop 事件,都应先定位其所属的故障域层级,再选择对应的恢复策略。