| 备注 | 修改日期 | 修改人 |
| 创建版本 | 2026-01-08 01:33:50[当前版本] | 文艺范儿 |
ResourceQuota(资源配额)是 Kubernetes 的 命名空间级资源,用于限制某个 Namespace 内所有 Pod/容器对 可压缩资源(CPU)、不可压缩资源(内存、存储) 与 扩展资源(GPU) 的 总申请量(requests) 与 总限制量(limits)。
pods、services、configmaps、secrets等对象数量,以及 cpu、memory、gpu等资源数量。核心作用
| 场景 | 说明 |
|---|---|
多团队共享集群 |
限制每个团队 Namespace 的资源总量,避免互相影响 |
环境与项目隔离 |
dev/test/staging 分别设置配额,防止测试任务冲击生产资源 |
成本控制 |
云上按配额预分配资源,避免账单失控 |
防止“鲸鱼”应用 |
限制单 Namespace 最多使用多少 CPU/内存,保护集群稳定性 |
1. 可限制的资源维度
| 维度 | 示例 | 说明 |
|---|---|---|
计算资源总量 |
|
对 Namespace 内所有容器的 |
存储资源总量 |
|
限制 PVC 数量与存储容量 |
扩展资源总量 |
|
限制 GPU 使用总量 |
对象数量 |
|
限制 Namespace 内某类 K8s 对象的数量 |
2. 配额计算规则
requests总和:统计所有容器的 resources.requests值。limits总和:统计所有容器的 resources.limits值。requests或 limits,则由 LimitRange的默认值填充后再计入配额(如果启用了 LimitRange)。Forbidden)。基本结构:
apiVersion: v1
kind: ResourceQuota
metadata:
name: <quota-name>
namespace: <namespace> # 必须指定 Namespace
spec:
hard: # 硬性限制(Hard Limit)
<resource.path>: <quantity>
<resource.path>: <quantity>
hard下的每一项是 资源路径 = 数量,例如 requests.cpu: "4"表示该 Namespace 所有容器的 CPU 请求总量不得超过 4 核。m或整数核,内存用 Mi/Gi,GPU 用整数。场景
限制 team-a命名空间最多使用 2 核 CPU 请求、4Gi 内存请求、4 核 CPU 限制、8Gi 内存限制,且最多 10 个 Pod。
YAML 配置(quota-cpu-mem.yaml)
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-a-compute-quota
namespace: team-a
spec:
hard:
pods: "10"
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
创建与验证
kubectl create ns team-a kubectl apply -f quota-cpu-mem.yaml kubectl describe resourcequota team-a-compute-quota -n team-a
输出示例:
Name: team-a-compute-quota Namespace: team-a Resource Used Hard -------- ---- ---- limits.cpu 0 4 limits.memory 0 8Gi pods 0 10 requests.cpu 0 2 requests.memory 0 4Gi
场景
ml-team命名空间用于机器学习训练,限制最多申请 4 块 NVIDIA GPU(requests = limits,GPU 通常不可拆分)。
YAML 配置(quota-gpu.yaml)
apiVersion: v1
kind: ResourceQuota
metadata:
name: ml-gpu-quota
namespace: ml-team
spec:
hard:
pods: "5"
requests.nvidia.com/gpu: "4"
limits.nvidia.com/gpu: "4"
创建与验证
kubectl create ns ml-team kubectl apply -f quota-gpu.yaml kubectl describe resourcequota ml-gpu-quota -n ml-team
注意:
- 节点需安装 NVIDIA 驱动与 DevicePlugin,集群需启用 GPU 资源发现。
- 若 Pod 请求
nvidia.com/gpu: 2,则计入配额 2,剩余可用 GPU 为 2。
场景
bigdata命名空间用于大数据任务,配额示例如下:
apiVersion: v1
kind: ResourceQuota
metadata:
name: bigdata-full-quota
namespace: bigdata
spec:
hard:
# 对象数量
pods: "20"
services: "10"
persistentvolumeclaims: "10"
secrets: "20"
# 计算资源
requests.cpu: "20"
requests.memory: "40Gi"
limits.cpu: "40"
limits.memory: "80Gi"
# GPU
requests.nvidia.com/gpu: "8"
limits.nvidia.com/gpu: "8"
# 存储
requests.storage: "500Gi"
ephemeral-storage: "100Gi"
ResourceQuota限制总量,LimitRange设置默认值,防止“裸跑”容器无限制使用资源。requests总和 ≤ 集群可分配资源的 70%,预留缓冲给系统组件与突发流量。limits可略高于 requests,但需防止 OOM 或 CPU 争抢。kube_resourcequota指标的 used与 hard,使用 Prometheus + Grafana 可视化配额使用率。