4. Kubernetes 资源管理基础:Pod 资源请求与限制、服务质量(QoS)等级、资源配额与限制范围
在云原生环境中,资源管理是成本优化与容量规划的基石。Kubernetes 通过 资源请求与限制、服务质量(QoS)等级 以及 资源配额与限制范围 三大机制,确保集群资源被合理分配、避免资源争抢,并为后续基于 Cilium 网络策略的精细化成本控制提供数据基础。理解这些概念,是制定高效容量规划方案的第一步。
4.1 Pod 资源请求与限制
每个 Pod 中的容器都可以声明两类资源参数:requests(请求)和 limits(限制)。
- requests:调度器依据此值为 Pod 选择节点,确保节点剩余资源满足请求值。它是 Pod 启动的“最低保障”。
- limits:kubelet 在运行时强制限制容器不能超过此值。当容器试图使用超过 limits 的 CPU 时,会被节流;超过内存 limits 时,可能被 OOM Kill。
成本优化要点: 过高的 requests 会导致资源碎片和浪费;过低的 limits 可能引发 OOM 或性能抖动。合理的 requests/limits 比例(通常 1:1 到 1:2)是容量规划的核心。
以下是一个典型的 Pod 资源声明示例:
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"
4.2 服务质量(QoS)等级
Kubernetes 根据 Pod 中所有容器的 requests 和 limits 配置,自动为每个 Pod 分配一个 QoS 等级。该等级决定了节点资源紧张时 Pod 被驱逐的优先级。
| QoS 等级 | 判定条件 | 资源保障 | 驱逐优先级 | 典型场景 |
|---|---|---|---|---|
| Guaranteed | 所有容器 requests == limits(CPU 和内存) | 最高 | 最低(最后被驱逐) | 数据库、关键中间件 |
| Burstable | 至少一个容器 requests < limits,且非 Guaranteed | 中等 | 中等 | Web 服务、API 网关 |
| BestEffort | 所有容器均未设置 requests 和 limits | 最低 | 最高(最先被驱逐) | 批处理、测试任务 |
容量规划警示: 大量 BestEffort Pod 会严重干扰集群稳定性。在成本优化方案中,建议至少为生产级工作负载配置 Burstable 或 Guaranteed 等级,避免因资源争抢导致关键服务中断。
4.3 资源配额与限制范围
在多租户或团队共享集群的场景下,仅靠 Pod 级别的资源声明不足以防止资源滥用。ResourceQuota 和 LimitRange 提供了命名空间级别的资源管控能力。
4.3.1 ResourceQuota(资源配额)
ResourceQuota 用于限制命名空间内所有 Pod 的资源总量上限,包括 CPU、内存、存储卷数量、PVC 数量、Service 数量等。它防止单个团队或项目消耗过多集群资源。
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-a-quota
namespace: team-a
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
persistentvolumeclaims: "10"
pods: "50"
4.3.2 LimitRange(限制范围)
LimitRange 为命名空间内未显式设置资源请求/限制的 Pod 或容器提供默认值,并设置最小/最大约束。它确保每个 Pod 都遵循统一的资源规范,避免出现极端配置。
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: team-a
spec:
limits:
- max:
cpu: "2"
memory: "2Gi"
min:
cpu: "100m"
memory: "128Mi"
default:
cpu: "500m"
memory: "512Mi"
defaultRequest:
cpu: "200m"
memory: "256Mi"
type: Container
最佳实践: 在容量规划中,先通过 LimitRange 设定 Pod 资源上下限,再通过 ResourceQuota 控制命名空间总量。两者结合可有效避免“资源黑洞”和“超卖”问题,为 Cilium 网络策略的成本分析提供稳定的资源基线。
4.4 资源管理对成本优化的影响
在 Cilium 网络策略驱动的成本优化方案中,资源管理数据是容量规划的直接输入:
- 资源利用率分析:通过 requests 和 limits 计算命名空间的实际资源消耗,识别过度配置或低利用率 Pod。
- QoS 等级与网络策略联动:Guaranteed Pod 通常承载关键业务,Cilium 网络策略应为其提供高优先级网络路径;BestEffort Pod 可被限制带宽或延迟敏感度。
- 配额驱动的容量规划:ResourceQuota 定义了团队资源上限,容量规划需基于此上限进行节点扩缩容决策,避免超卖。
核心结论: 没有精确的资源请求与限制,就没有可靠的容量规划;没有 QoS 等级和配额管控,成本优化就是空中楼阁。本章内容是后续所有 Cilium 网络策略成本分析的基础数据源。