介绍
资源配额(ResourceQuota) 是 Kubernetes 中用于限制命名空间内资源总量的一种策略对象。 它允许集群管理员对每个命名空间设置资源使用上限,从而控制该命名空间内的资源消耗,确保整个集群的资源不会被单个命名空间耗尽。 这有助于在多租户环境中实现资源的公平分配和隔离。 更多信息, 请参考官方文档。

图:创建资源配额表单与配额估算区域。
主要功能
- 硬性配额(Hard limits):
ResourceQuota可以为各种计算资源(如 CPU、内存)、存储资源(如持久卷声明 PVC),以及对象数量(如Pod、Service、ConfigMap等)设定硬性的使用上限。一旦达到这些上限,任何进一步的资源请求都会被拒绝。 - 作用于命名空间级别: 每个
ResourceQuota对象只影响它所属的命名空间。这意味着你可以为不同的团队或项目创建独立的命名空间,并为每个命名空间单独配置配额,以满足各自的资源需求。 - 支持多种资源类型: 除了常见地计算和存储资源外,
ResourceQuota还可以限制其他类型的 Kubernetes 对象数量,例如Secrets、Services、Deployment等等。这对于防止意外创建过多的对象,保持集群整洁有序非常重要。 - 与限制范围(LimitRange) 协同工作: 虽然
限制范围(LimitRange)主要用于设置单个容器或 Pod 的资源使用限制,但ResourceQuota则是针对整个命名空间的总量限制。两者可以一起使用来提供更精细的资源管理。
配额准入流程
flowchart TD
A[创建或更新命名空间资源] --> B[准入控制器计算已用量]
B --> C{命名空间是否配置 ResourceQuota}
C -->|否| D[直接准入]
C -->|是| E{请求后是否超过 hard 上限}
E -->|是| F[拒绝请求并提示配额不足]
E -->|否| G[准入并更新已用量]
G --> H[定期统计 Pod 与 PVC 等对象]
H --> I[配额状态写入 status.used]
I --> J[控制台展示已用与上限]
K[修改或删除 ResourceQuota] --> L[仅影响新创建资源]
L --> B
配额是准入阶段的硬性检查,不会驱逐已经运行且超出新配额的资源;调整配额后应同步检查现有工作负载。
注意事项
ResourceQuota只能应用于命名空间级别的资源,因此需要为每个目标命名空间单独配置。- 如果你在命名空间中同时使用了
LimitRange和ResourceQuota,请确保它们之间的配置是一致且兼容的,以避免冲突。 - 当你删除
ResourceQuota或修改其配置时,现有资源不受影响;只有新创建的资源会受到新的配额规则约束。 - 配置合理的
ResourceQuota需要考虑命名空间的实际需求和集群的整体资源情况,以平衡资源利用率和服务质量。