Kubernetes Namespace 资源隔离:资源配额(ResourceQuota)与 Pod 数量限制

在 Kubernetes 中,Namespace 是资源隔离的核心机制。通过 ResourceQuota 对象和 Pod 数量限制,可精确控制 Namespace 内资源使用,防止资源耗尽或抢占。以下是实现方法:


一、资源配额(ResourceQuota)的作用
  1. 限制计算资源总量
    控制 Namespace 中所有 Pod 的 CPU内存 总使用量。
  2. 限制存储资源
    约束 存储卷(PVC) 的数量和容量。
  3. 限制对象数量
    管理 PodServiceConfigMap 等 Kubernetes 对象的数量上限。

二、配置 ResourceQuota 的 YAML 示例
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: dev-namespace  # 指定目标命名空间
spec:
  hard:
    # 计算资源限制
    limits.cpu: "10"       # 总 CPU 上限(单位:核)
    limits.memory: 20Gi    # 总内存上限
    requests.cpu: "5"      # 总 CPU 请求量下限
    requests.memory: 10Gi  # 总内存请求量下限
    
    # 对象数量限制
    pods: "50"             # 最大 Pod 数量
    services: "10"         # 最大 Service 数量
    persistentvolumeclaims: "5"  # 最大 PVC 数量
    
    # 存储资源限制
    requests.storage: 100Gi  # 总存储请求量上限


三、Pod 数量限制的两种方式
  1. 通过 ResourceQuota 全局限制
    如上例中的 pods: "50",限制整个 Namespace 的 Pod 总数。

  2. 通过 LimitRange 单 Pod 限制
    控制单个 Pod 的资源请求量,间接影响可运行 Pod 数量:

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: pod-limits
      namespace: dev-namespace
    spec:
      limits:
      - type: Pod
        max:
          cpu: "2"        # 单 Pod 最大 CPU 用量
          memory: 4Gi      # 单 Pod 最大内存用量
    


四、验证与调试
  1. 检查配额使用情况

    kubectl describe resourcequota example-quota -n dev-namespace
    

  2. 超限时的错误提示
    当创建新 Pod 超过配额时,Kubernetes 返回错误:

    Error creating: pods "nginx" is forbidden: exceeded quota
    


五、最佳实践
  1. 按环境划分 Namespace
    devprod 独立配额,避免开发测试占用生产资源。
  2. 结合 LimitRange 使用
    防止单 Pod 资源过大导致资源碎片化。
  3. 监控与告警
    通过 Prometheus 监控配额使用率,及时扩容或清理资源。

注意:ResourceQuota 需提前创建,对已有资源无追溯效力。调整配额可能影响业务连续性,建议在低峰期操作。

更多推荐