首页/云/Kubernetes 速查/按对象数量设配额
调度与资源52 条

按对象数量设配额

除计算资源外还可限制对象个数(pods、jobs.batch、services.nodeports、persistentvolumeclaims 等),防止单个命名空间刷爆集群资源。

Kubernetes 速查云更新于 2026-10-13

按对象数量设配额

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

常用键与用途

键限制对象典型用途
podsPod 总数防止单命名空间占用过多调度容量
count/jobs.batchJob 数量挡住 CI 与定时任务失败堆积
services.nodeportsNodePort Service 数保护有限端口段与外部映射表
persistentvolumeclaimsPVC 数量防止临时卷堆满后端存储
secrets / configmaps配置对象数约束自动化批量创建
describe 输出里的 Used 与 Hard 两列就是当前用量与上限;平时不看这条,触顶时才发现已经贴边很久了。
数量配额对 Operator、CI 流水线与人工创建一视同仁:启用前先梳理工具链会创建哪些资源,否则会出现「随机发布失败」这类难以定位的现象。
批量清理时要注意顺序:先删工作负载再删配置对象,反过来会让控制器重建 Pod 并再次占用配额;用 kubectl get all 与各类资源清单逐项核对剩余对象。

易错点

  • 只设 CPU 与内存配额不设数量配额:Pod 数量、PVC 与 NodePort 仍可能被刷满,容量事故照样发生
  • 配额卡得过紧挡住正常发布:CI 创建 Job 被拒,现象是发布随机失败,实际原因是配额触顶
  • count/ 写法漏掉资源组名:字段被忽略,看起来配额在起作用其实没生效
  • 把配额当预警用:它是硬上限,到顶即拒绝,需要在接近上限时另配监控告警
  • 清理对象时顺序颠倒:先删 ConfigMap 再删工作负载,控制器重建的 Pod 又重新占用配额,清理看起来没效果

数据来源与参考

  • Kubernetes 官方文档 · ResourceQuota(对象数量)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌