两个对象各管一段
ResourceQuota 管命名空间的总量:总 requests、总 limits 与对象数量。LimitRange 管单个对象:容器与 Pod 的上下限,并在清单没写 resources 时补上默认 requests 与 limits。只上配额,没写 requests 的模板会因缺少必填项被拒绝;只上 LimitRange,整体用量依然没有上限。组合使用才能既统一基线又守住总量。
基本信息
| 共同点 | 都是命名空间级对象,都在对象创建与更新时生效 |
|---|---|
| ResourceQuota 粒度 | 命名空间累计量:requests.cpu、limits.memory、pods 计数等 |
| LimitRange 粒度 | 单个容器、单个 Pod 或单条 PVC |
| 默认值来源 | LimitRange 的 default 与 defaultRequest 字段 |
| 启用顺序建议 | 先 LimitRange 再 ResourceQuota,存量清单更容易平滑过渡 |
典型使用场景
- 多团队共享集群:用配额分配总容量,用 LimitRange 统一最小可用基线
- 接管历史项目:先补默认值,避免老清单因缺少 resources 被直接拒绝
- 成本约束:限制命名空间总 limits,防止个别业务把节点资源吃满
- 下线清理:用数量配额防止临时资源长期沉淀
- 平台交付:把两者做成命名空间模板,新命名空间一次性带上基线
LimitRange 补默认值
LimitRange 补默认值
apiVersion: v1
kind: LimitRange
metadata:
name: ns-defaults
namespace: prod
spec:
limits:
- type: Container
default: # 未写 limits 时补上
cpu: 500m
memory: 512Mi
defaultRequest: # 未写 requests 时补上
cpu: 100m
memory: 128Mi
max: # 单容器上限
cpu: "2"
memory: 2GiResourceQuota 守总量
ResourceQuota 守总量
apiVersion: v1
kind: ResourceQuota
metadata:
name: prod-quota
namespace: prod
spec:
hard:
requests.cpu: "20"
requests.memory: 40Gi
limits.cpu: "40"
limits.memory: 80Gi
pods: "50"分工对照
| 维度 | ResourceQuota | LimitRange |
|---|---|---|
| 管控对象 | 命名空间累计用量与对象数 | 单个容器、Pod、PVC |
| 是否补默认值 | 不提供 | 提供 default 与 defaultRequest |
| 作用时机 | 累计校验总量是否越界 | 准入时补默认并校验上下限 |
| 典型用途 | 防止整体失控 | 统一资源基线与单对象边界 |
| 组合效果 | 两者同时存在时都会校验 | 先按 LimitRange 补默认,再按 Quota 校验总量 |
配额里出现 requests.cpu、limits.memory 这类键后,该命名空间内所有 Pod 都必须声明对应字段,否则创建直接被拒,这正是 LimitRange 补默认值的价值所在。
启用配额会让原本能创建的清单突然失败:先在测试命名空间验证存量清单,再按批次推进,避免发布窗口被准入校验打断。