×

超额承诺状态下,容器计算资源请求和限制的总和超过系统上可用的资源。在开发环境中,为了容量而牺牲一定的性能保证,超额承诺可能是可取的。

请求和限制使管理员能够允许和管理节点上资源的超额承诺。调度程序使用请求来调度您的容器并提供最低服务保证。限制约束了您的节点上可能消耗的计算资源量。

理解超额承诺

请求和限制使管理员能够允许和管理节点上资源的超额承诺。调度程序使用请求来调度您的容器并提供最低服务保证。限制约束了您的节点上可能消耗的计算资源量。

OpenShift Container Platform 管理员可以通过配置主节点来覆盖开发人员容器上设置的请求和限制之间的比率,从而控制超额承诺的级别并管理节点上的容器密度。结合指定限制和默认值的每个项目的LimitRange对象,这将调整容器限制和请求以达到所需的超额承诺级别。

如果容器未设置任何限制,则这些覆盖将无效。创建一个具有默认限制的LimitRange对象,针对各个项目或在项目模板中,以确保覆盖适用。

进行这些覆盖后,容器限制和请求仍必须通过项目中的任何LimitRange对象进行验证。例如,开发人员可以指定接近最小限制的限制,然后将请求覆盖到最小限制以下,从而导致 pod 被禁止。这种糟糕的用户体验应该通过未来的工作来解决,但目前,请谨慎配置此功能和LimitRange对象。

理解节点超额承诺

在超额承诺的环境中,正确配置您的节点以提供最佳系统行为非常重要。

节点启动时,会确保正确设置内存管理的内核可调标志。除非物理内存耗尽,否则内核绝不应该导致内存分配失败。

为了确保此行为,OpenShift Container Platform 通过将vm.overcommit_memory参数设置为1来配置内核始终过度提交内存,从而覆盖默认的操作系统设置。

OpenShift Container Platform 还通过将vm.panic_on_oom参数设置为0来配置内核在内存不足时不出现 panic。设置为 0 表示内核在内存不足 (OOM) 条件下调用 oom_killer,该程序会根据优先级终止进程。

您可以在节点上运行以下命令来查看当前设置

$ sysctl -a |grep commit
示例输出
#...
vm.overcommit_memory = 0
#...
$ sysctl -a |grep panic
示例输出
#...
vm.panic_on_oom = 0
#...

上述标志应已在节点上设置,无需进一步操作。

您还可以对每个节点执行以下配置

  • 使用 CPU CFS 配额禁用或强制执行 CPU 限制

  • 为系统进程保留资源

  • 跨服务质量层级保留内存