按对象数量设配额
ResourceQuota 除了限制 CPU 与内存这类计算资源,还能限制命名空间内的对象个数:pods、services、services.nodeports、persistentvolumeclaims、secrets、configmaps,以及用 count/ 前缀表达的 Job、Deployment 等。它挡住的是「数量型」事故——CI 反复创建 Job、脚本刷爆 NodePort 端口段、临时 PVC 悄然堆积。数量触顶时创建请求被直接拒绝,报错形如 Forbidden: exceeded quota。
基本信息
| 适用对象 | ResourceQuota(命名空间级) |
|---|---|
| 键名写法 | 核心组直接写资源名(pods、secrets);其他组用 count/<资源>.<组>,如 count/jobs.batch |
| 触顶报错 | Error from server (Forbidden): exceeded quota |
| 与计算配额 | 同一个 Quota 的 hard 里可以同时写数量与计算资源 |
| 查看用量 | kubectl describe resourcequota,Used 列是当前值 |
典型使用场景
- 多租户命名空间:限制 Pod 总数,防止单个团队吞掉集群调度容量
- CI 与定时任务多的命名空间:限制 Job 数,避免失败任务无限堆积
- 保护有限的 NodePort 端口段:限制 NodePort 型 Service 数量
- 存储防膨胀:限制 PVC 数,避免临时卷占满后端存储
- 限制配置对象膨胀:对 Secret、ConfigMap 数量设上限,约束自动化创建行为
数量类配额示例
数量类配额示例
apiVersion: v1
kind: ResourceQuota
metadata:
name: prod-quota
namespace: prod
spec:
hard:
pods: "50" # Pod 总数上限
count/jobs.batch: "20" # 批处理 Job 数量上限
count/deployments.apps: "30"
persistentvolumeclaims: "20"
services.nodeports: "5" # 保护 NodePort 端口段
secrets: "40"查看用量与触顶表现
查看用量与触顶表现
kubectl describe resourcequota prod-quota -n prod | grep -E 'pods|nodeports|claims'
kubectl get resourcequota -n prod
kubectl run probe --image=busybox:1.36 -n prod --restart=Never -- sleep 1 # 触顶时报 exceeded quota常用键与用途
| 键 | 限制对象 | 典型用途 |
|---|---|---|
| pods | Pod 总数 | 防止单命名空间占用过多调度容量 |
| count/jobs.batch | Job 数量 | 挡住 CI 与定时任务失败堆积 |
| services.nodeports | NodePort Service 数 | 保护有限端口段与外部映射表 |
| persistentvolumeclaims | PVC 数量 | 防止临时卷堆满后端存储 |
| secrets / configmaps | 配置对象数 | 约束自动化批量创建 |
describe 输出里的 Used 与 Hard 两列就是当前用量与上限;平时不看这条,触顶时才发现已经贴边很久了。
数量配额对 Operator、CI 流水线与人工创建一视同仁:启用前先梳理工具链会创建哪些资源,否则会出现「随机发布失败」这类难以定位的现象。
批量清理时要注意顺序:先删工作负载再删配置对象,反过来会让控制器重建 Pod 并再次占用配额;用 kubectl get all 与各类资源清单逐项核对剩余对象。