2. Kubernetes 资源模型基础:Pod 的 Request 与 Limit、QoS 类别、资源单位换算
2.1 资源模型核心概念:Request 与 Limit
Kubernetes 的资源模型是调度与隔离的基石。每个 Pod 中的容器都可以声明两类资源约束:Request 和 Limit。理解这两者的区别,是进行节点资源画像和误差预算计算的前提。
| 属性 | 定义 | 调度器视角 | kubelet 视角 |
|---|---|---|---|
| Request | 容器保证能获得的最小资源量 | 作为调度决策的依据(节点剩余可分配资源 ≥ 所有 Pod Request 之和) | CPU 使用 CFS 配额保证;内存由 OOM 评分机制保障 |
| Limit | 容器允许使用的最大资源量 | 不参与调度决策 | CPU 通过 CFS 配额限制;内存超过 Limit 时触发 OOM Kill |
关键认知:Request 是“承诺”,Limit 是“上限”。在容量规划中,Request 总和决定了节点的“逻辑容量”,而 Limit 总和决定了节点的“风险敞口”。
2.2 资源单位换算
Kubernetes 使用两种资源类型:CPU(可压缩资源)和 Memory(不可压缩资源)。单位换算必须精确,否则会导致配置错误或容量估算偏差。
2.2.1 CPU 单位
- 1 CPU = 1 个 vCPU / 1 个 Hyperthread(AWS vCPU、GCP Core、Azure vCore)
- 最小单位:m(millicores),1 CPU = 1000m
- 常见表示:
500m、1.5、250m - 调度器按 m 累加,节点总 CPU 容量也以 m 为单位
2.2.2 内存单位
- 基础单位:字节(Byte)
- 支持两种后缀体系:
- 十进制(SI):E、P、T、G、M、K → 1000 进制
- 二进制(IEC):Ei、Pi、Ti、Gi、Mi、Ki → 1024 进制
- Kubernetes 内部统一使用 二进制(IEC) 进行计算
| 单位 | 全称 | 字节数 | 常见场景 |
|---|---|---|---|
| 1 Mi | Mebibyte | 1,048,576 (1024²) | 容器内存 Request/Limit |
| 1 Gi | Gibibyte | 1,073,741,824 (1024³) | 节点总内存、大内存应用 |
| 1 M | Megabyte | 1,000,000 (1000²) | 部分监控系统(需注意转换) |
| 1 G | Gigabyte | 1,000,000,000 (1000³) | 云厂商实例规格描述 |
常见陷阱:云厂商实例规格(如 4GB 内存)使用的是十进制 G,而 Kubernetes 内部使用二进制 Gi。4GB ≈ 3.73Gi。在容量规划时,务必统一使用 二进制单位 进行计算,否则会产生约 7% 的容量误差。
2.3 QoS 类别:资源保障的等级体系
Kubernetes 根据 Pod 中所有容器的 Request 与 Limit 配置,自动将 Pod 划分为三种 QoS(服务质量) 类别。QoS 类别决定了节点资源紧张时 Pod 被驱逐的优先级。
2.4 QoS 类别判定规则
判定逻辑遵循“最严格原则”:只要有一个容器不满足条件,整个 Pod 的 QoS 就会降级。
| QoS 类别 | 判定条件 | 典型配置示例 | 容量规划影响 |
|---|---|---|---|
| Guaranteed | 所有容器:CPU 和 Memory 的 request == limit,且均不为 0 | |
资源行为可预测,适合核心应用;误差预算计算最稳定 |
| Burstable | 至少一个容器:request < limit,或仅设置了 request | |
允许突发使用空闲资源;需关注超卖比例,是容量规划的主要变量 |
| BestEffort | 所有容器:均未设置 request 和 limit | |
无资源保障,驱逐时最先被清理;生产环境应避免 |
2.5 资源模型与容量规划的关联
核心公式:节点可调度资源 = 节点总容量 - 系统预留(kubelet/kube-proxy/OS) - eviction-hard 阈值
误差预算计算基础:节点资源利用率 = (所有 Pod 实际使用量) / (节点可调度资源)
超卖比(Overcommit Ratio): = (所有 Pod Limit 总和) / (节点可调度资源)
超卖比越高,节点资源利用率可能越高,但 OOM 和驱逐风险也越大。
误差预算计算基础:节点资源利用率 = (所有 Pod 实际使用量) / (节点可调度资源)
超卖比(Overcommit Ratio): = (所有 Pod Limit 总和) / (节点可调度资源)
超卖比越高,节点资源利用率可能越高,但 OOM 和驱逐风险也越大。
2.6 实践建议:配置规范
- 生产核心服务:必须使用 Guaranteed QoS,request == limit,确保资源保障和驱逐优先级最低。
- 批处理/离线任务:可使用 Burstable,设置合理的 request,limit 可适当放大以利用空闲资源。
- 禁止 BestEffort:在容量规划严格的集群中,应通过 准入控制器(如 LimitRange) 强制所有 Pod 至少设置 request。
- 单位一致性:所有容量规划文档、监控面板、自动化脚本统一使用 二进制单位(Mi/Gi),避免换算错误。
- 文档化超卖策略:在误差预算台账中明确记录每个节点池的 目标超卖比,并定期审计实际超卖情况。
容量规划小技巧:在 Prometheus 中,使用
kube_pod_resource_request 和 kube_pod_resource_limit 指标,可以实时计算集群的 Request 利用率和 Limit 超卖比,为误差预算提供数据支撑。