Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

23.5. 为使用过量配置 Master

调度基于请求的资源,而配额和硬限制指的是资源限制,它们可以设置为高于请求的资源。请求和限制的差值决定了过量使用程度;例如,如果为容器赋予 1Gi 内存请求和 2Gi 内存限制,则根据 1Gi 请求将容器调度到节点上,但最多可使用 2Gi;因此过量使用为 200%。

如果 OpenShift Container Platform 管理员希望控制过量使用的程度,并管理节点上的容器密度,可以将主控机配置为覆盖开发人员容器上设置的请求和限制之间的比率。与 项目各项目的 LimitRange 指定限制和默认值结合使用时,这会调整容器限制和请求,以达到所需的过量使用程度。

这需要在 master-config.yaml 中配置 ClusterResourceOverride 准入控制器,如下例所示(如果存在,则使用现有配置树,或者根据需要引进缺少的元素):

  admissionConfig:
    pluginConfig:
      ClusterResourceOverride: 1
        configuration:
          apiVersion: v1
          kind: ClusterResourceOverrideConfig
          memoryRequestToLimitPercent: 25 2
          cpuRequestToLimitPercent: 25 3
          limitCPUToMemoryPercent: 200 4
1
这是插件名称,忽略与插件名称完全匹配的情况和任何内容。
2
(可选,1-100)如果指定或默认指定了容器内存限值,则内存请求将被覆盖到限制的这个百分比。
3
(可选,1-100)如果指定或默认指定了容器 CPU 限值,则 CPU 请求将被覆盖到限制的这个百分比。
4
(可选,正整数)如果指定或默认指定了容器内存限值,则 CPU 限值被覆盖为内存限值的百分比,扩展 1Gi 的 RAM 等于 1 个 CPU 内核。这是在覆盖 CPU 请求前处理的(如果已配置)。

更改 master 配置后,需要重启 master。

请注意,如果没有在容器上设置限制,则这些覆盖无效。创建一个带有默认限制(每个独立的项目或 在项目模板中)的 LimitRange 对象,以确保应用覆盖。

另请注意,覆盖后,容器限值和请求必须仍需要由项目中的 LimitRange 对象验证。这可能会导致 pod 被禁止的情况。例如,开发人员指定了一个接近最小限制的限制,然后其请求被覆盖为低于最小限制。这个问题在以后会加以解决,但目前而言,请小心地配置此功能和 LimitRange。

配置后,可通过编辑项目并添加以下注解来禁用每个项目覆盖(例如,允许独立于覆盖配置基础架构组件):

quota.openshift.io/cluster-resource-override-enabled: "false"