resourcequota用于限制命名空间内资源总量,防止租户间资源争抢;必须绑定已存在命名空间,通过spec.hard定义cpu、内存及对象数量等硬性上限,超限创建将被api server以403拒绝。

在Kubernetes集群中为命名空间设置ResourceQuota,是为了防止某个命名空间无节制地消耗CPU、内存或对象数量,进而影响其他租户的稳定性。配额一旦生效,API Server会在创建或更新资源时实时拦截超限请求,拒绝操作并返回明确错误。
创建独立命名空间作为配额作用域
ResourceQuota必须绑定到具体命名空间,不能跨命名空间生效。先创建一个干净的测试空间:
kubectl create namespace quota-demo
这一步不可跳过——【ResourceQuota对象只能在已存在的命名空间中创建】。如果命名空间不存在,apply配额YAML会直接报错“namespace not found”。
编写ResourceQuota配置文件
用YAML定义配额策略,核心是spec.hard字段。以下是最小可行配置,限制该命名空间最多运行3个Pod、总内存请求不超过4Gi、总CPU请求不超2核:
apiVersion: v1<br>kind: ResourceQuota<br>metadata:<br> name: basic-quota<br> namespace: quota-demo<br>spec:<br> hard:<br> pods: "3"<br> requests.cpu: "2"<br> requests.memory: "4Gi"
注意:requests.cpu写成"2"表示2个逻辑CPU核心(即2000m),不是百分比;requests.memory单位必须带大小后缀(如Gi、Mi),否则YAML解析失败。
应用并验证配额状态
第一步:提交配置
kubectl apply -f quota.yaml
第二步:检查配额是否加载成功
kubectl get resourcequota basic-quota -n quota-demo
输出中应看到AGE列有值,且STATUS为Active。若显示“No resources found”,说明文件名或namespace写错;若报错“invalid value”,大概率是YAML缩进错误或单位缺失。
第三步:查看实时使用量
kubectl describe resourcequota basic-quota -n quota-demo
重点关注status.used字段——此时pods: "0"、requests.cpu: "0",说明配额已就位但尚未被占用。
触发配额限制进行效果验证
方法一:直接创建超限Pod
写一个Pod清单,resources.requests.memory设为2Gi,再用kubectl create -f pod.yaml -n quota-demo提交两次。第三次提交时会卡住,终端返回:Error from server (Forbidden): error when creating "pod.yaml": pods "test-pod-3" is forbidden: exceeded quota: basic-quota, requested: pods=1, used: pods=2, limited: pods=3
方法二:用Deployment压测(更贴近真实场景)
部署一个replicas=5的Deployment,观察kubectl get deploy -n quota-demo输出:READY列始终卡在2/5,describe看Events会显示“failed to create pod: exceeded quota”。这说明ResourceQuota在Pod创建阶段就拦截了,不会让多余的Pod进入Pending状态后再调度。











