1. K8s 资源模型基础:Pod 资源请求与限制、CPU 与内存的计量单位、服务质量 QoS 等级分类
Kubernetes 的资源管理模型是调度与稳定运行的基石。每个 Pod 在创建时都需要声明其资源需求,集群据此决定调度位置、分配资源并保障服务质量。本章从三个核心维度展开:资源请求与限制、CPU 与内存的计量单位、QoS 等级分类。
1.1 Pod 资源请求与限制
在 Pod 的每个容器定义中,通过 resources.requests 和 resources.limits 字段声明资源需求:
- Requests(请求):容器启动时保证获得的最小资源量。调度器依据所有容器的 requests 总和判断节点是否满足资源容量。
- Limits(限制):容器运行时允许使用的资源上限。当容器试图使用超过 limits 的资源时,系统会触发限流或 OOM Kill。
关键原则:Limits 必须 ≥ Requests。如果只设置 Limits 而未设置 Requests,则 Requests 默认等于 Limits。
以下是一个包含资源声明的 Pod 示例:
apiVersion: v1
kind: Pod
metadata:
name: resource-demo
spec:
containers:
- name: app
image: nginx:1.25
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
1.2 CPU 与内存的计量单位
Kubernetes 使用标准化的单位体系来量化资源,确保跨平台一致性。
| 资源类型 | 单位 | 说明 | 示例 |
|---|---|---|---|
| CPU | 核(Core) | 1 核 = 1 个物理核心或 vCPU。支持小数与毫核(m) | 1、0.5、500m |
| 内存 | 字节(Byte) | 使用二进制单位(Ki、Mi、Gi)或十进制单位(k、M、G) | 256Mi、1Gi、512M |
| 临时存储 | 字节(Byte) | 与内存单位体系一致,用于 emptyDir 等本地存储 | 10Gi、500Mi |
单位换算速记:1 核 = 1000m(毫核);1Gi = 1024Mi = 1024 × 1024Ki。注意:Kubernetes 中内存的
M 表示 1000×1000 字节(十进制),而 Mi 表示 1024×1024 字节(二进制),生产环境推荐使用二进制单位(Mi、Gi)避免精度误差。
1.3 服务质量 QoS 等级分类
Kubernetes 根据 Pod 中所有容器的 Requests 与 Limits 设置,自动将 Pod 划分为三个 QoS 等级。该等级决定了节点资源紧张时 Pod 被驱逐的优先级。
| QoS 等级 | 判定条件 | 驱逐优先级 | 典型场景 |
|---|---|---|---|
| Guaranteed | 每个容器都设置了 Requests 和 Limits,且 Requests == Limits | 最低(最晚被驱逐) | 数据库、核心中间件、有状态服务 |
| Burstable | 至少一个容器设置了 Requests,且 Requests < Limits(或未设置 Limits) | 中等 | Web 应用、API 网关、批处理任务 |
| BestEffort | 所有容器均未设置 Requests 和 Limits | 最高(最先被驱逐) | 开发调试、低优先级批处理、临时任务 |
重要提醒:BestEffort Pod 在节点资源耗尽时会被立即驱逐,且不保证任何资源份额。生产环境中应避免将关键业务部署为 BestEffort 等级。
1.4 资源模型与 QoS 关系图
下图展示了 Pod 资源声明与 QoS 等级之间的映射关系:
1.5 资源模型核心概念总结
下表汇总了资源模型中的关键概念及其作用:
| 概念 | 作用域 | 调度影响 | 运行时影响 |
|---|---|---|---|
| Requests | 容器级别 | 决定节点能否调度 | 保证最小资源分配 |
| Limits | 容器级别 | 不影响调度 | 限制资源使用上限 |
| QoS 等级 | Pod 级别 | 间接影响调度策略 | 决定驱逐优先级 |
| 资源单位 | 全局 | 统一计量标准 | 确保跨平台一致性 |
最佳实践:为生产环境的 Pod 始终设置明确的 Requests 和 Limits,并尽量使 Requests == Limits(Guaranteed 等级),以获得最稳定的调度行为和最低的驱逐风险。对于可弹性伸缩的微服务,可适当设置 Requests < Limits 以提升资源利用率。