2、资源模型核心概念:Pod资源请求与限制、服务质量等级(QoS)、资源单位换算

Kubernetes 调度器在决定 Pod 放置位置时,最核心的输入就是 Pod 的资源模型。资源模型定义了 Pod 中每个容器对 CPU、内存等计算资源的声明方式,并由此衍生出 Pod 的服务质量等级(QoS)。理解资源模型是掌握调度优化的第一步。

2.1 资源请求(Requests)与限制(Limits)

每个容器在 Pod 的 spec 中都可以声明两类资源参数:

  • Requests(请求):容器启动时保证获得的最小资源量。调度器依据所有容器的 requests 之和判断节点是否满足 Pod 运行条件。
  • Limits(限制):容器运行时允许使用的资源上限。当容器试图使用超过 limits 的资源时,系统会进行限流或强制终止。
关键原则:Requests 用于调度决策,Limits 用于运行时约束。两者可以相等,也可以不等。当 Limits 未设置时,默认等于 Requests。

以下是一个典型的 Pod 资源声明示例:

apiVersion: v1
kind: Pod
metadata:
  name: resource-demo
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        cpu: "500m"        # 0.5 个 CPU 核心
        memory: "256Mi"    # 256 Mebibytes
      limits:
        cpu: "1"           # 1 个 CPU 核心
        memory: "512Mi"    # 512 Mebibytes

2.2 资源单位换算

Kubernetes 使用两种资源类型:可压缩资源(CPU)和不可压缩资源(内存)。它们的单位换算规则不同。

资源类型 基础单位 常用后缀 换算关系 说明
CPU 核心(core) m(millicores) 1 core = 1000m 100m 表示 0.1 个 CPU 核心
内存 字节(byte) Ki、Mi、Gi 1 Gi = 1024 Mi 二进制单位,1 Mi = 1024 Ki
内存 字节(byte) K、M、G 1 G = 1000 M 十进制单位,1 M = 1000 K
避坑提示:内存单位区分大小写。Mi 是二进制(Mebibyte),M 是十进制(Megabyte)。生产环境中推荐使用二进制单位(Ki、Mi、Gi)以避免精度误差。

2.3 服务质量等级(QoS)

Kubernetes 根据 Pod 中所有容器的 requests 和 limits 设置,将 Pod 划分为三种服务质量等级(Quality of Service, QoS)。当节点资源紧张时,kubelet 按照 QoS 等级从低到高优先驱逐 Pod。

Pod 服务质量等级(QoS)分类 Guaranteed requests == limits 所有容器均设置 CPU 和内存 优先级:最高 Burstable requests < limits 至少一个容器设置 requests 优先级:中等 BestEffort 未设置 requests 未设置 limits 无资源保证 优先级:最低 节点资源不足时驱逐顺序 BestEffort → Burstable → Guaranteed(最后被驱逐) Guaranteed Burstable BestEffort 最稳定,适合关键业务 弹性伸缩,适合微服务 无保障,适合批处理

2.4 QoS 等级判定规则

判定一个 Pod 属于哪个 QoS 等级,遵循以下逻辑:

  1. Guaranteed:Pod 中所有容器都必须同时设置 CPU 和内存的 requests 与 limits,且每个资源的 requests 必须等于 limits。
  2. BestEffort:Pod 中所有容器都未设置任何 requests 和 limits。
  3. Burstable:既不是 Guaranteed 也不是 BestEffort 的 Pod,即至少有一个容器设置了 requests 或 limits,但不满足 Guaranteed 的严格条件。
常见误区:如果一个 Pod 中部分容器设置了 requests/limits,部分容器没有设置,整个 Pod 的 QoS 等级是 Burstable,而不是 BestEffort。BestEffort 要求所有容器都不设置任何资源字段。

2.5 QoS 对调度与驱逐的影响

QoS 等级 调度优先级 节点资源超卖容忍度 驱逐优先级(低→高) 典型使用场景
Guaranteed 最高 不允许超卖 3(最后驱逐) 数据库、核心中间件
Burstable 中等 允许适度超卖 2 无状态微服务、Web 应用
BestEffort 最低 允许大量超卖 1(最先驱逐) 批处理、CI/CD 任务
调度优化启示:对于延迟敏感的关键业务 Pod,应设置为 Guaranteed 等级,确保调度器为其预留独占资源,避免因节点资源竞争导致性能抖动。对于弹性伸缩的微服务,Burstable 等级可以在保证基础资源的同时利用空闲资源提升吞吐。

2.6 资源模型与拓扑感知的关联

资源模型是拓扑感知部署的基础输入。调度器在计算拓扑分布时,需要精确知道每个 Pod 的 requests 值,才能判断节点或拓扑域(如 NUMA 节点、可用区)是否还有足够的剩余容量。QoS 等级则影响调度器在资源竞争时的决策倾向——Guaranteed Pod 会优先获得最优拓扑位置。