Kubernetes 实战:为 Namespace 配置 Pod 配额(ResourceQuota)

在多人协作或微服务密集的 Kubernetes 集群中,如果不加限制,某个 Namespace 可能会创建出成百上千个 Pod,导致资源争抢、节点压力过大甚至集群不稳定。

Kubernetes 提供了 ResourceQuota 对象,可以为每个 Namespace 设置资源配额。今天我们就通过一个完整示例,学习如何限制某个 Namespace 中的 Pod 总数


🎯 目标

限制 quota-pod-example 命名空间中的 Pod 数量 最多为 2 个


📋 操作步骤

1. 准备工作

  • 已安装 Kubernetes 集群(推荐 Minikube 或云上集群)
  • 已安装 kubectl 并配置好集群访问权限

2. 创建独立 Namespace

为了隔离资源,先创建一个单独的命名空间:

kubectl create namespace quota-pod-example
3. 创建 ResourceQuota(Pod 配额)
编写 quota-pod.yaml 文件:

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"     # 限制 Pod 总数为 2
应用配置:

bash
kubectl create -f quota-pod.yaml --namespace=quota-pod-example
4. 查看配额状态
bash
kubectl get resourcequota pod-demo --namespace=quota-pod-example -o yaml
输出关键部分:

yaml
spec:
  hard:
    pods: "2"
status:
  hard:
    pods: "2"
  used:
    pods: "0"
可以看到配额上限为 2,当前已使用 05. 测试配额效果:尝试创建 3 个 Pod
创建一个 Deployment,要求 3 个副本(replicas: 3):

quota-pod-deployment.yaml 内容:

yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: pod-quota-demo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        purpose: quota-demo
    spec:
      containers:
      - name: pod-quota-demo
        image: nginx
创建 Deployment:

bash
kubectl create -f quota-pod-deployment.yaml --namespace=quota-pod-example
6. 观察结果:只有 2 个 Pod 启动成功
bash
kubectl get deployment pod-quota-demo --namespace=quota-pod-example -o yaml
关键输出:

yaml
spec:
  replicas: 3
status:
  availableReplicas: 2          # 实际只启动了 2 个
  conditions:
    - message: 'unable to create pods: exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'
说明:Kubernetes 会因为配额限制拒绝创建第 3 个 Pod,并在 Deployment 的状态中明确提示“超出配额”。

🧹 清理环境
实验结束后,删除所有资源:

bash
kubectl delete deployment pod-quota-demo --namespace=quota-pod-example
kubectl delete resourcequota pod-demo --namespace=quota-pod-example
kubectl delete namespace quota-pod-example
💡 核心总结
关键点	说明
资源对象	ResourceQuota
限制字段	spec.hard.pods
作用范围	单个 Namespace
超出配额行为	创建新 Pod 会被拒绝,Deployment/StatefulSet 等控制器会保持在未满状态
典型场景	多租户隔离、避免某个业务过度消耗 Pod 资源
🚀 进阶建议
对于集群管理员:除了 Pod 数量,还可以限制 CPU/内存/存储/PVC 数量等

对于应用开发者:在部署前应先查看 Namespace 配额,避免应用因无法创建 Pod 而 hang 住

查看配额命令:

bash
kubectl get resourcequota -n <namespace>

更多推荐