4.3. 设置限制范围


LimitRange 对象定义的限值范围在 pod、容器、镜像、镜像流和持久性卷声明级别上定义计算资源约束。限制范围指定 pod、容器、镜像、镜像流或持久性卷声明可以消耗的资源量。

要创建和修改资源的所有请求都会针对项目中的每个 LimitRange 对象进行评估。如果资源违反了任何限制,则会拒绝该资源。如果资源没有设置显式值,如果约束支持默认值,则默认值将应用到资源。

对于 CPU 和内存限值,如果您指定一个最大值,但没有指定最小限制,资源会消耗超过最大值的 CPU 和内存资源。

核心限制范围对象定义

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "core-resource-limits" 1
spec:
  limits:
    - type: "Pod"
      max:
        cpu: "2" 2
        memory: "1Gi" 3
      min:
        cpu: "200m" 4
        memory: "6Mi" 5
    - type: "Container"
      max:
        cpu: "2" 6
        memory: "1Gi" 7
      min:
        cpu: "100m" 8
        memory: "4Mi" 9
      default:
        cpu: "300m" 10
        memory: "200Mi" 11
      defaultRequest:
        cpu: "200m" 12
        memory: "100Mi" 13
      maxLimitRequestRatio:
        cpu: "10" 14

1
限制范围对象的名称。
2
pod 可在所有容器间请求的最大 CPU 量。
3
pod 可在所有容器间请求的最大内存量。
4
pod 可在所有容器间请求的最小 CPU 量。如果没有设置 min 值,或者将 min 设置为 0,则结果为没有限制,pod 消耗的消耗可能会超过 max CPU 值。
5
pod 可在所有容器间请求的最小内存量。如果没有设置 min 值,或者将 min 设置为 0,则结果为没有限制,pod 消耗的消耗可能会超过 max 内存的值。
6
pod 中单个容器可以请求的最大 CPU 量。
7
pod 中单个容器可以请求的最大内存量。
8
pod 中单个容器可以请求的最小 CPU 量。如果没有设置 min 值,或者将 min 设置为 0,则结果为没有限制,pod 消耗的消耗可能会超过 max CPU 值。
9
pod 中单个容器可以请求的最小内存量。如果没有设置 min 值,或者将 min 设置为 0,则结果为没有限制,pod 消耗的消耗可能会超过 max 内存的值。
10
如果没有在 pod 规格中指定限制,则容器的默认 CPU 限值。
11
如果没有在 pod 规格中指定限制,则容器的默认内存限值。
12
如果您没有在 pod 规格中指定请求,则容器的默认 CPU 请求。
13
如果您没有在 pod 规格中指定请求,则容器的默认内存请求。
14
容器最大的限制与请求的比率。

OpenShift Container Platform Limit 范围对象定义

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "openshift-resource-limits"
spec:
  limits:
    - type: openshift.io/Image
      max:
        storage: 1Gi 1
    - type: openshift.io/ImageStream
      max:
        openshift.io/image-tags: 20 2
        openshift.io/images: 30 3
    - type: "Pod"
      max:
        cpu: "2" 4
        memory: "1Gi" 5
        ephemeral-storage: "1Gi" 6
      min:
        cpu: "1" 7
        memory: "1Gi" 8

1
可以推送到内部 registry 的最大镜像大小。
2
镜像流规格中定义的唯一镜像标签的最大数量。
3
镜像流规格中定义的唯一镜像标签的最大数量。
4
pod 可在所有容器间请求的最大 CPU 量。
5
pod 可在所有容器间请求的最大内存量。
6
pod 可在所有容器间请求的最大临时存储。
7
pod 可在所有容器间请求的最小 CPU 量。有关重要信息,请参阅支持的约束表。
8
pod 可在所有容器间请求的最小内存量。如果没有设置 min 值,或者将 min 设置为 0,则结果为没有限制,pod 消耗的消耗可能会超过 max 内存的值。

您可以在一个限制范围对象中指定 core 和 OpenShift Container Platform 资源。

4.3.1. 容器限制

支持的资源:

  • CPU
  • memory

支持的限制

根据容器,如果指定,则必须满足以下条件:

Container

约束行为

Min

Min[<resource >] 小于或等于 container.resources.requests[<resource& gt;](必需)小于或等于 container/resources.limits[<resource>] (可选)

如果配置定义了 min CPU,则请求值必须大于 CPU 值。如果您没有设置 min 值,或将 min 设置为 0,则代表没有限制,pod 消耗的资源量可以超过 max 值。

Max

container.resources.limits[<resource& gt;] (必需)小于或等于 Max[<resource>]

如果配置定义了 max CPU,则不需要定义 CPU 请求值。但是,您必须设置一个限制,用于满足在限制范围中指定的最大 CPU 约束。

MaxLimitRequestRatio

MaxLimitRequestRatio[<resource& gt;] 小于或等于(container.resources.limits[<resource>] / container.resources.requests[<resource>])

如果限制范围定义了 maxLimitRequestRatio 约束,则任何新容器都必须具有 requestlimit 值。另外,OpenShift Container Platform 会计算限制与请求的比率( limit 除以 request)。结果应该是大于 1 的整数。

例如,如果容器的 limit 值中包括 cpu: 500request 值中包括 cpu: 100,则 cpu 的限制与请求的比率是 5。这个比例必须小于或等于 maxLimitRequestRatio

支持的默认值:

默认[<resource>]
如果无,则默认为 container.resources.limit[<resource >] 作为指定的值。
默认请求[<resource>]
如果无,则默认为 container.resources.requests[<resource >] 作为指定的值。

4.3.2. Pod 限值

支持的资源:

  • CPU
  • memory

支持的限制:

在 pod 中的所有容器中,需要满足以下条件:

表 4.4. Pod
约束强制行为

Min

Min[<resource >] 小于或等于 container.resources.requests[<resource&gt;](必需)小于或等于 container.resources.limits[<resource>]。如果您没有设置 min 值,或将 min 设置为 0,则代表没有限制,pod 消耗的资源量可以超过 max 值。

Max

container.resources.limits[<resource& gt;] (必需)小于或等于 Max[<resource>]

MaxLimitRequestRatio

MaxLimitRequestRatio[<resource& gt;] 小于或等于(container.resources.limits[<resource>] / container.resources.requests[<resource>]).

4.3.3. 镜像限制

支持的资源:

  • Storage

资源类型名称:

  • openshift.io/Image

根据镜像,如果指定,则必须满足以下条件:

表 4.5. Image
约束行为

Max

image.dockerimagemetadata.size 小于或等于 Max[<resource>]

注意

要防止超过限制的 Blob 上传到 registry,则必须将 registry 配置为强制实施配额。REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_ENFORCEQUOTA 环境变量必须设置为 true。默认情况下,新部署的环境变量设为 true

4.3.4. 镜像流限值

支持的资源:

  • openshift.io/image-tags
  • openshift.io/images

资源类型名称:

  • openshift.io/ImageStream

对于每个镜像流,如果指定,则必须满足以下条件:

表 4.6. ImageStream
约束行为

max[openshift.io/image-tags]

length (uniqueimagetags (imagestream.spec.tags)) 小于或等于 Max[openshift.io/image-tags]

uniqueimagetags 返回给定 spec 标签的镜像的唯一引用。

max[openshift.io/images]

length (uniqueimages (imagestream.status.tags)) 小于或等于 Max[openshift.io/images]

uniqueimages 返回 status 标签中找到的唯一镜像名称。名称等于镜像的摘要。

4.3.5. 镜像引用计数

openshift.io/image-tags 资源代表唯一的流限制。可能的引用是 ImageStreamTagImageStreamImageDockerImage。可以使用 oc tagoc import-image 命令或使用镜像流来创建标签。内部和外部引用之间没有区别。但是,镜像流规格中标记的每个唯一引用仅计算一次。它不以任何方式限制推送到内部容器镜像 registry,但对标签限制很有用。

openshift.io/images 资源代表在镜像流状态中记录的唯一镜像名称。它有助于限制可推送到内部 registry 的多个镜像。内部和外部引用无法区分。

4.3.6. PersistentVolumeClaim 限制

支持的资源:

  • Storage

支持的限制:

在一个项目中的所有持久性卷声明中,必须满足以下条件:

表 4.7. Pod
约束强制行为

Min

Min[<resource>] <= claim.spec.resources.requests[<resource>](必需)

Max

claim.spec.resources.requests[<resource>] (必需)<= Max[<resource>]

限制范围对象定义

{
  "apiVersion": "v1",
  "kind": "LimitRange",
  "metadata": {
    "name": "pvcs" 1
  },
  "spec": {
    "limits": [{
        "type": "PersistentVolumeClaim",
        "min": {
          "storage": "2Gi" 2
        },
        "max": {
          "storage": "50Gi" 3
        }
      }
    ]
  }
}

1
限制范围对象的名称。
2
持久性卷声明中可请求的最小存储量。
3
在持久性卷声明中请求的最大存储量。

其他资源

有关流限制的详情,请参考 管理镜像流

有关 流限制 的信息。

有关 计算资源约束 的更多信息。

有关如何测量 CPU 和内存的更多信息,请参阅推荐的 control plane 实践

您可以为临时存储指定限值和请求。有关此功能的更多信息,请参阅 了解临时存储

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.