Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

23.5. 为 Overcommitment 配置 Master

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

如果 OpenShift Container Platform 管理员想要控制过量使用的程度并管理节点上的容器密度,则可以配置 master 来覆盖开发人员容器上设置的请求和限制之间的比例。与针对项目的 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 限值被覆盖为内存限值的百分比,100% 扩展 1Gi 的 RAM 等于 1 个 CPU 内核。这会在覆盖 CPU 请求前进行处理(如果已配置)。

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

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

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

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

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