2. Kubernetes 资源模型基础:Pod 资源请求(Requests)与限制(Limits)的定义与区别

在 Kubernetes 集群中,Pod 是调度的最小单元,而 资源请求(Requests) 与 资源限制(Limits) 是定义 Pod 行为与保障集群稳定性的核心参数。理解两者的定义与区别,是掌握资源争抢与租户重调度测试的前提。

2.1 核心定义

参数 定义 调度影响 运行时行为
Requests(请求) 容器启动时向集群保证预留的最小资源量。Kubernetes 调度器依据此值选择满足条件的 Node。 调度决策依据:Node 必须满足所有 Pod 的 Requests 总和 ≤ Node 可分配资源。 容器至少能获得 Requests 指定的资源量,不会被其他 Pod 抢占。
Limits(限制) 容器在运行时允许使用的资源上限。超过此值时,CPU 会被限流,内存会被 OOM Kill。 不影响调度决策(除非开启 Guaranteed QoS 的特殊场景)。 容器可以突发使用超出 Requests 的资源,但不得超过 Limits。
关键认知: Requests 是“承诺”,Limits 是“天花板”。没有设置 Limits 时,容器可以无限使用 Node 空闲资源,但可能引发资源争抢。

2.2 资源维度:CPU 与内存

Kubernetes 对 CPU 和内存的处理机制存在本质差异,直接影响资源争抢的表现。

  • CPU(可压缩资源): 超限时容器变慢(Throttling),但不会被杀。单位:m(毫核),1 CPU = 1000m。
  • 内存(不可压缩资源): 超限时容器会被 OOM Killer 终止。单位:Mi、Gi。
实践要点: 内存 Limits 必须 ≥ Requests。如果内存使用超过 Limits,Pod 会立即被驱逐或重启,这是资源争抢测试中最常见的故障场景。

2.3 三种 QoS 类别:资源定义的直接结果

Requests 与 Limits 的组合方式决定了 Pod 的 服务质量等级(QoS),直接影响节点资源紧张时的驱逐优先级。

QoS 类别 定义条件 驱逐优先级 典型场景
Guaranteed 所有容器 Requests == Limits(且不为 0) 最低(最后被驱逐) 数据库、关键中间件
Burstable 至少一个容器 Requests < Limits,或仅设置 Requests 中等 Web 服务、批处理任务
BestEffort 所有容器未设置 Requests 和 Limits 最高(最先被驱逐) 测试、低优先级任务
租户重调度测试提示: 在资源争抢场景中,BestEffort Pod 会最先被驱逐,Burstable Pod 次之,Guaranteed Pod 最后。这是设计多租户隔离策略时必须考虑的因素。

2.4 Requests 与 Limits 的配置示例

apiVersion: v1
kind: Pod
metadata:
  name: resource-demo
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        memory: "256Mi"
        cpu: "500m"
      limits:
        memory: "512Mi"
        cpu: "1000m"

上述配置表示:该容器至少保证 256Mi 内存和 0.5 核 CPU,最多可使用 512Mi 内存和 1 核 CPU。当内存超过 512Mi 时,容器会被 OOM Kill。

2.5 资源模型关系图

Pod 资源模型:Requests vs Limits 关系图 Pod 资源定义 Requests(资源请求) 调度保证 Node 必须满足此资源量 容器至少获得此资源 Limits(资源限制) 运行时上限 CPU 超限 → 限流 内存超限 → OOM Kill QoS 类别决定驱逐优先级 Guaranteed(Requests == Limits)→ 最低驱逐优先级 Burstable(Requests < Limits)→ 中等驱逐优先级

2.6 资源争抢场景中的行为对比

场景 CPU 争抢 内存争抢
容器使用量 ≤ Requests 完全保证,无争抢 完全保证,无争抢
Requests < 使用量 ≤ Limits 允许突发,但可能被限流 允许使用,但存在 OOM 风险
使用量 > Limits CPU Throttling(变慢) OOM Kill(容器重启)
未设置 Limits 可耗尽 Node 所有空闲 CPU 可耗尽 Node 所有空闲内存
测试设计启示: 在租户重调度测试中,通过调整 Requests/Limits 比例可以精确控制 Pod 的 QoS 类别,从而验证不同优先级 Pod 在资源争抢时的驱逐顺序与重调度行为。