3. 故障域概念:故障域定义、常见故障域类型与租户映射

3.1 故障域定义

故障域(Failure Domain)是云基础设施中一组共享单一故障点的资源集合。当该故障点失效时,集合内的所有资源将同时不可用。故障域是进行多租户隔离设计的基础逻辑单元,其粒度决定了故障爆炸半径。

核心原则: 故障域边界越细,租户隔离度越高,但资源调度和运维复杂度也相应增加。SRE 需要在隔离粒度与资源利用率之间取得平衡。

3.2 常见故障域类型

从物理到逻辑,故障域通常分为以下三个层级,每一层对应不同的故障场景和隔离策略:

故障域层级 典型故障点 故障影响范围 MTTR 参考
可用区(AZ) 数据中心电力、骨干网络、冷却系统 整个可用区内的所有租户实例 分钟~小时级
机架(Rack) ToR 交换机、机架 PDU、上联光缆 该机架内所有宿主机及租户 Pod 分钟级
宿主机(Host) 物理硬件故障、宿主机内核 Panic、磁盘损坏 该宿主机上所有租户容器/虚拟机 秒~分钟级
SRE 建议: 在故障域隔离演练中,应优先验证宿主机级故障的自动迁移能力,因为该层级故障发生频率最高,对租户体验影响最直接。

3.3 故障域与租户的映射关系

多租户平台需要将租户的工作负载(Pod、VM、存储卷)合理分布到不同的故障域中,避免多个租户实例集中在同一故障域内。映射策略通常分为静态分配和动态调度两种:

  • 静态分配: 租户创建时指定故障域约束(如 topology.kubernetes.io/zone),调度器按约束放置。
  • 动态调度: 基于实时故障域容量和租户反亲和规则,由调度器自动选择最优故障域。

以下 SVG 图展示了从可用区到宿主机三层故障域与租户实例的映射关系:

故障域层级与租户映射关系 故障域层级与租户映射关系 可用区 AZ-1 机架 R1-1 宿主机 H1-1-1 租户A: Pod-1 租户B: Pod-2 宿主机 H1-1-2 租户A: Pod-3 租户C: Pod-4 宿主机 H1-1-3 租户B: Pod-5 租户D: Pod-6 机架 R1-2 宿主机 H1-2-1 租户A: Pod-7 租户E: Pod-8 宿主机 H1-2-2 租户C: Pod-9 租户F: Pod-10 宿主机 H1-2-3 租户D: Pod-11 租户E: Pod-12 可用区 AZ-2 机架 R2-1 宿主机 H2-1-1 租户A: Pod-13 租户B: Pod-14 宿主机 H2-1-2 租户C: Pod-15 租户F: Pod-16 宿主机 H2-1-3 租户D: Pod-17 租户E: Pod-18 机架 R2-2 宿主机 H2-2-1 租户A: Pod-19 租户C: Pod-20 宿主机 H2-2-2 租户B: Pod-21 租户F: Pod-22 宿主机 H2-2-3 租户D: Pod-23 租户E: Pod-24 可用区 机架 宿主机 租户A~F 分布在多个故障域中

3.4 故障域映射策略对比

不同的映射策略直接影响故障隔离效果和资源利用率。以下表格对比了三种常见策略:

策略 实现方式 隔离强度 资源碎片 适用场景
硬亲和/反亲和 Pod 必须/必须不调度到同一故障域 高 高 关键业务、金融级租户
软亲和/反亲和 调度器优先满足,资源不足时可降级 中 中 普通生产租户
无约束 仅按资源水位调度,不感知故障域 低 低 开发测试环境
风险提示: 在演练中如果发现租户 Pod 集中在同一宿主机或同一机架,说明故障域映射策略失效或调度器配置错误。此时应立即标记为高风险项,并触发重新调度流程。

3.5 故障域隔离的验证方法

在演练前,SRE 需要通过以下步骤验证故障域映射是否正确:

  1. 导出租户实例分布清单: 使用 kubectl get pods -o wide --all-namespaces 获取每个 Pod 所在的节点和可用区。
  2. 计算故障域密度: 统计每个故障域内同一租户的实例数量,密度超过阈值(如 3 个)则告警。
  3. 模拟故障域失效: 在非生产环境通过 kubectl cordon 或网络策略模拟宿主机/机架故障,观察租户实例是否被正确迁移。
  4. 复核指标面板: 检查故障域维度的租户实例分布图、故障域容量水位、以及跨故障域流量比例。

以下 SVG 图展示了故障域映射验证的流程:

故障域映射验证流程 故障域映射验证流程 导出实例清单 计算故障域密度 模拟故障失效 复核面板 密度 > 阈值? 是 触发重新调度 否 验证通过

3.6 故障域隔离的常见风险

  • 故障域过载: 单个故障域内租户实例过多,一旦故障影响面过大。
  • 映射漂移: 由于节点维护或扩缩容,租户实例逐渐偏离初始故障域约束。
  • 调度器忽略约束: 资源紧张时调度器可能绕过反亲和规则,导致租户实例聚集。
  • 跨故障域流量成本: 过度分散可能导致跨 AZ 流量增加,带来延迟和费用问题。
最佳实践: 在指标面板中设置故障域密度告警(如单故障域内同一租户实例数 > 2),并定期执行故障域映射合规扫描,确保租户隔离策略持续有效。