3、资源配额模型(Resource Quota Model)概念
资源配额模型是 Kubernetes 多租户与资源治理的核心机制,它通过声明式策略限制命名空间或集群范围内的资源消耗总量。本章从 CPU/内存/存储/对象数四个维度拆解配额定义,并对比命名空间级与集群级两种作用域的设计差异。
3.1 配额维度与定义
资源配额覆盖三类资源:计算资源(CPU、内存)、存储资源(PVC 容量、临时存储)、对象计数(Pod、Service、ConfigMap 等)。每个维度均可设置 requests(预留)和 limits(上限)两个阈值。
| 资源类别 | 配额字段(示例) | 说明 |
|---|---|---|
| CPU | requests.cpu / limits.cpu |
单位:核心数(如 4、500m) |
| 内存 | requests.memory / limits.memory |
单位:字节(如 8Gi、512Mi) |
| 临时存储 | requests.ephemeral-storage / limits.ephemeral-storage |
单位:字节(如 10Gi) |
| 持久卷声明 | persistentvolumeclaims |
PVC 数量上限 |
| 存储总量 | requests.storage |
所有 PVC 请求容量总和上限 |
| 对象计数 | count/pods / count/services / count/configmaps |
各类 API 对象数量上限 |
关键原则:配额是 累加性约束——命名空间内所有 Pod 的 requests.cpu 总和不得超过配额值;limits 同理。对象计数配额防止单个命名空间创建过多小对象导致 etcd 压力。
3.2 命名空间级配额(ResourceQuota)
命名空间级配额通过 ResourceQuota 资源对象定义,作用于单个命名空间。以下是一个典型配置示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-team-quota
namespace: dev
spec:
hard:
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
requests.storage: "50Gi"
persistentvolumeclaims: "10"
count/pods: "20"
count/services: "10"
count/configmaps: "30"
count/secrets: "30"
当命名空间内资源总和达到硬限制时,Kubernetes 会拒绝后续创建请求,并返回 403 Forbidden 错误。配额生效范围包括:
- Pod 级别:每个 Pod 必须设置 requests 和 limits(若未设置,默认值由 LimitRange 补充)。
- PVC 级别:存储总量和 PVC 数量双重约束。
- 对象级别:按 API 资源类型分别计数。
3.3 集群级配额(ClusterResourceQuota)
集群级配额由 OpenShift 扩展(标准 Kubernetes 社区版需通过 ResourceQuota 配合 ClusterResourceQuota 或第三方策略引擎实现)。它允许管理员跨多个命名空间设置统一配额上限,适用于租户隔离场景。
| 特性 | 命名空间级(ResourceQuota) | 集群级(ClusterResourceQuota) |
|---|---|---|
| 作用域 | 单个命名空间 | 一组命名空间(通过标签选择器) |
| 管理粒度 | 细粒度,每个团队独立 | 粗粒度,统一管控 |
| 适用场景 | 开发/测试环境隔离 | 多租户生产集群、SaaS 平台 |
| 冲突处理 | 命名空间级优先 | 集群级与命名空间级取最小值 |
实践建议:集群级配额通常用于“租户总预算”,命名空间级配额用于“团队子预算”。两者叠加时,实际生效值为两者中的 最小值,避免超卖。
3.4 配额模型架构图
下图展示从集群管理员到命名空间工作负载的配额分层模型:
3.5 配额生效与冲突处理
当多个配额同时作用于同一资源时,Kubernetes 遵循以下优先级:
- 命名空间级配额直接约束该命名空间内所有资源。
- 集群级配额通过标签选择器关联命名空间,约束关联命名空间的总和。
- 冲突时:取两者中的 最小值 作为实际生效阈值,确保不突破任何一级限制。
常见陷阱:若只设置集群级配额而未设置命名空间级配额,单个命名空间可能耗尽所有配额,导致其他命名空间无法创建资源。建议始终同时配置两级配额,形成“总预算 + 子预算”的双层防护。
3.6 配额模型与策略即代码的衔接
资源配额模型是策略即代码(Policy as Code)在资源治理层面的具体实现。通过将配额定义写入 Git 仓库,配合 CI/CD 流水线自动应用到集群,可实现:
- 版本化:配额变更可追溯、可回滚。
- 自动化:新命名空间创建时自动绑定配额模板。
- 审计:配额超限告警与合规检查。