3. 容量规划基础:资源模型、预留与超卖策略、水位线设计
多租户故障域隔离的底层支撑是精确的容量规划。若资源模型不清晰、超卖策略失控或水位线缺失,节点宕机后的重调度将引发级联过载。本节从资源建模、分配策略与动态阈值三个维度构建容量规划基础。
3.1 四维资源模型:CPU / 内存 / 磁盘 / 网络
每个物理节点或虚拟机需抽象为四维资源向量。租户的容器/Pod 请求(request)与限制(limit)均基于此模型进行调度决策。
| 资源维度 | 可压缩性 | 隔离粒度 | 关键指标 | 常见超卖风险 |
|---|---|---|---|---|
| CPU | 可压缩 | 核(core) / 毫核(mCPU) | 使用率、节流(throttling) | CPU 竞争导致延迟抖动 |
| 内存 | 不可压缩 | 字节(MiB / GiB) | RSS、OOM 事件 | OOM Killer 杀进程 |
| 磁盘 | 不可压缩(空间) | 字节 / IOPS / 吞吐 | inode 使用率、延迟 | 磁盘写满 → 节点 NotReady |
| 网络 | 可压缩(带宽) | bps / pps / 连接数 | 丢包率、重传率 | 带宽抢占 → 租户间干扰 |
容量规划第一原则:不可压缩资源(内存、磁盘)必须严格按 request 预留,不可超卖;可压缩资源(CPU、网络带宽)可适度超卖,但需设置硬性上限(limit)防止单租户饿死其他租户。
3.2 预留与超卖策略
资源分配策略直接影响集群利用率与故障隔离能力。核心公式如下:
节点可调度资源 = 节点总容量 - 系统预留 - kubelet 预留 - 已分配 request
超卖比 = 节点所有 Pod limit 之和 / 节点总容量
安全超卖阈值 = 节点总容量 × 超卖系数(通常 1.2 ~ 1.8)
三种主流策略对比:
| 策略 | 描述 | 适用场景 | 故障隔离影响 |
|---|---|---|---|
| 静态预留 | 为系统组件、DaemonSet 预留固定资源 | 控制面节点、数据库节点 | 强隔离,但利用率低 |
| 动态超卖 | 基于历史使用率动态调整超卖比 | 在线业务与离线混部 | 需配合弹性限流,否则隔离弱 |
| QoS 分级超卖 | Guaranteed / Burstable / BestEffort 三级 | 多租户共享集群 | 高优先级租户获得强隔离 |
超卖陷阱:当超卖比 > 2.0 且节点宕机时,重调度器可能将大量 Pod 挤入剩余节点,导致内存 OOM 或磁盘 IO 打满,引发二次故障。建议生产环境超卖比控制在 1.5 以内,并配合 PodDisruptionBudget 与弹性伸缩。
3.3 水位线设计:从触发到回填
水位线(Watermark)是容量规划的可执行层。通过多级水位线驱动自动扩缩容、重调度与告警。
四段水位线模型:
- 低水位(Low Watermark, LWM): 节点资源使用率 < 40%。允许缩容或合并负载。
- 安全水位(Safe Watermark, SWM): 40% ~ 70%。正常调度区间,无需干预。
- 高水位(High Watermark, HWM): 70% ~ 85%。触发预扩容或 Pod 驱逐。
- 紧急水位(Critical Watermark, CWM): > 85%。立即触发节点级重调度与告警。
3.4 多租户场景下的水位线联动
当节点水位线触发高水位或紧急水位时,容量规划引擎需联动租户重调度策略:
- 识别过载租户:按租户维度聚合资源使用率,找出 Top-N 资源消耗者。
- 计算可驱逐优先级:基于租户 QoS 等级、PodDisruptionBudget、运行时长排序。
- 执行平滑驱逐:先驱逐 BestEffort 租户,再驱逐 Burstable 租户,最后考虑 Guaranteed 租户。
- 目标节点校验:确保目标节点接收后水位不超过安全水位(SWM)。
3.5 容量规划最佳实践清单
- 预留基线化:为系统组件(kubelet、操作系统、监控 Agent)预留 5% ~ 10% 资源,避免被租户抢占。
- 超卖可观测:每个节点暴露当前超卖比、实际使用率、节流率三个指标,用于容量审计。
- 水位线差异化:不同租户等级使用不同水位线阈值。例如:金级租户节点 HWM=75%,银级租户节点 HWM=85%。
- 反亲和性约束:同一租户的多个副本尽量分散到不同故障域,避免单节点水位线过高。
- 定期压力测试:每季度执行一次节点故障模拟,验证水位线触发后的重调度是否导致其他节点越线。
容量规划核心公式回顾:
节点安全容量 = min( 总容量 × 超卖系数, 总容量 - 系统预留 - 不可压缩资源超卖上限 )
重调度触发条件 = 任意资源维度水位 > HWM 且持续超过 30 秒
节点安全容量 = min( 总容量 × 超卖系数, 总容量 - 系统预留 - 不可压缩资源超卖上限 )
重调度触发条件 = 任意资源维度水位 > HWM 且持续超过 30 秒