OpenShift

OpenShift Quota 和 LimitRange Tips

在 OpenShift 中,Quota(资源配额) 和 LimitRange(限制范围) 都是用于管理资源使用的机制,但它们的作用层级和侧重点不同。以下是核心区别:

1. 作用范围


QuotaLimitRange
命名空间级别的资源限制命名空间内的单个容器 / Pod 限制
限制整个命名空间的资源总量为容器 / Pod 设置默认值和约束

2. 控制对象


QuotaLimitRange
– CPU/Memory 总量
– Pod/Service 等对象数量
– StorageClass 使用量
– 单个容器的 CPU/Memory 请求和限制
– 默认资源请求 / 限制值

3. 核心功能对比


Quota

  • 限制总量:例如,整个命名空间最多使用 2CPU、4GB 内存。
  • 对象数量限制:例如,最多创建 10 个 Pod 或 5 个 Service。
  • 存储限制:例如,命名空间最多使用 50GB 的 PV。

LimitRange

  • 强制最小 / 最大值:例如,容器的 CPU 请求必须在 0.1~2 之间。
  • 设置默认值:未显式指定资源时,自动应用默认请求 / 限制。
  • 防止资源滥用:例如,限制单个容器最多使用 1CPU。

4. 示例配置


Quota 示例1

apiVersion: v1
kind: ResourceQuota
metadata:
  name: namespace-quota
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 4Gi
    limits.cpu: "4"
    limits.memory: 8Gi
    pods: "10"
    services: "5"

Quota 示例2

oc new-project QuotaTest
oc create quota test-quota --hard=memory=1Gi,cpu=2,replicationcontrollers=2,pods=3,services=6

LimitRange 示例

apiVersion: v1
kind: LimitRange
metadata:
  name: container-limit
spec:
  limits:
  - type: Container
    default:               # 未指定时的默认限制
      cpu: 500m
      memory: 512Mi
    defaultRequest:        # 未指定时的默认请求
      cpu: 200m
      memory: 256Mi
    min:                   # 最小资源请求/限制
      cpu: 100m
      memory: 128Mi
    max:                   # 最大资源请求/限制
      cpu: 1
      memory: 1Gi

5. 协作方式


  • Quota + LimitRange
    1. LimitRange 确保单个容器不会占用过多资源。
    2. Quota 确保整个命名空间的总资源使用不超过上限。

6. 常见场景


场景适用机制
限制团队资源总量Quota
防止容器资源分配不合理LimitRange
控制命名空间内对象数量Quota
为所有容器设置统一资源基线LimitRange

总结

  • Quota:宏观控制命名空间的总资源消耗和对象数量。
  • LimitRange:微观控制单个容器 / Pod 的资源使用,提供默认值和约束。

两者结合使用可以实现更精细的资源管理策略。