2. 基础概念:租户(Tenant)、节点(Node)、集群(Cluster)、故障域(Fault Domain)定义
在深入容量规划与故障域隔离之前,必须精确界定四个核心抽象概念。这些概念构成了整个调度系统的语义基础,任何策略的推导都建立在此之上。
2.1 租户 (Tenant)
租户是资源分配与隔离的最小逻辑单元。一个租户代表一组工作负载的集合,这些工作负载共享相同的资源配额、访问策略和服务等级协议(SLA)。
| 属性 | 说明 | 示例值 |
|---|---|---|
| TenantID | 全局唯一标识符 | tnt-8a3f9c |
| Quota | 资源上限(CPU/内存/存储) | 32 vCPU, 128 GiB |
| Priority | 抢占与重调度优先级 | Gold / Silver / Bronze |
| FaultDomainPolicy | 故障域隔离策略 | spread_across_racks |
关键理解: 租户不是用户,而是工作负载的逻辑分组。一个业务线、一个项目组、一个微服务集群都可以是一个租户。容量规划的目标是保证每个租户的 有效容量 在故障发生时仍能满足其最小运行需求。
2.2 节点 (Node)
节点是集群中承载工作负载的物理或虚拟计算单元。每个节点向调度器报告其可分配资源与当前状态。
- 物理节点: 裸金属服务器,资源固定,故障影响范围大。
- 虚拟节点: 虚拟机或容器运行时环境,资源可弹性调整。
- 节点属性: 包括总容量、已分配容量、标签(Label)、污点(Taint)、故障域归属。
# 节点状态示例(简化结构)
Node:
Name: node-01
Status: Ready
Capacity:
cpu: 64
memory: 256Gi
Allocatable:
cpu: 60
memory: 240Gi
Labels:
failure-domain.beta.kubernetes.io/zone: zone-a
failure-domain.beta.kubernetes.io/rack: rack-01
Taints:
- key: "dedicated"
value: "gpu"
effect: "NoSchedule"
2.3 集群 (Cluster)
集群是由一组节点组成的资源池,提供统一的调度入口和资源视图。集群是容量规划的边界。
- 单一集群: 所有节点共享同一个控制平面,调度器拥有全局视图。
- 多集群: 通过联邦机制或上层调度器进行跨集群资源管理,适用于地理分布式部署。
- 集群容量: 集群内所有节点可分配资源的总和,减去系统预留和调度碎片。
容量规划视角: 集群的 有效容量 不等于节点容量之和。必须扣除故障域隔离带来的资源冗余、节点不可用时的容量损失、以及调度碎片。公式为:
EffectiveCapacity = Σ(Allocatable) × (1 - RedundancyRatio) - FragmentationLoss
2.4 故障域 (Fault Domain)
故障域是共享同一故障风险的一组资源集合。当故障域内的某个组件失效时,该域内的所有节点可能同时受到影响。
| 故障域层级 | 故障范围 | 典型故障场景 | 隔离粒度 |
|---|---|---|---|
| 节点级 | 单台服务器 | 硬件故障、OS 崩溃 | 最细 |
| 机架级 | 整台机架 | 交换机故障、电源掉电 | 中等 |
| 可用区级 | 数据中心区域 | 制冷失效、网络分区 | 较粗 |
| 地域级 | 整个数据中心 | 自然灾害、大规模电力中断 | 最粗 |
常见误区: 故障域不等于物理位置。两个位于不同机架但共享同一电源分配单元(PDU)的节点,仍然属于同一个电源故障域。故障域的定义必须基于 实际故障传播路径,而非物理拓扑标签。
2.5 故障域隔离的核心原则
故障域隔离的目标是确保:任何一个故障域失效时,不会导致同一个租户的所有副本同时不可用。
- 反亲和性: 同一租户的 Pod 或任务实例必须分布在不同的故障域中。
- 最小副本数: 每个故障域内最多放置一个租户的副本,副本总数必须大于故障域数量。
- 容量冗余: 每个故障域必须预留足够的空闲资源,以承载其他故障域失效时转移过来的租户负载。
2.6 概念总结与映射
下表总结了四个概念在容量规划与故障域隔离上下文中的关键映射关系:
| 概念 | 容量规划视角 | 故障域隔离视角 | 重调度视角 |
|---|---|---|---|
| 租户 | 配额与预留的归属主体 | 隔离策略的作用对象 | 重调度优先级与约束的载体 |
| 节点 | 资源容量的基本计算单元 | 故障域内的最小故障单元 | 重调度时的目标候选 |
| 集群 | 容量规划的边界与总池 | 跨故障域调度的范围 | 重调度决策的全局视图 |
| 故障域 | 冗余资源预留的粒度 | 隔离保证的边界 | 重调度时避免的失效区域 |
实践要点: 在定义故障域时,不要仅依赖标签(Label),要结合实际的物理拓扑和网络路径。建议使用 故障域探测工具(如网络延迟矩阵、电源链路追踪)来验证故障域划分的准确性。错误的故障域定义会导致隔离策略失效,使容量规划失去意义。