Kubernetes - 指示CPU限制低于可用CPU

时间:2018-02-10 21:42:50

标签: docker resources kubernetes openshift

目的

当限制设置远低于可用CPU时,澄清K8S容器cpu使用的行为,并确认理解如何设置限制是否正确。

背景

我有一个2CPU的节点,因此2000m可以是上限。每个命名空间都使用LimitRange设置,它将容器的CPU限制为500米。

kind: LimitRange
metadata:
  name: core-resource-limits
    spec:
      limits:
      - default:
          cpu: 500m
          memory: 2Gi
        defaultRequest:
          cpu: 100m
        type: Container

指示

即使有2个CPU可用(没有其他进程/容器等待)且容器可运行,它也只能使用0.5个CPU,并且1.5个CPU将保持未使用状态。这是对的吗?

如何设置LimitRange

我相信我可以设置限制,例如可用2 CPU的75-80%,以更好地利用CPU资源。因为如果有多个容器试图声称CPU多于请求,K8S将根据每个容器的请求值在容器之间分配CPU,根据文档(一些来自OpenShift,但相信它与K8S相同)。这是对的吗?

kind: LimitRange
metadata:
  name: core-resource-limits
    spec:
      limits:
      - default:
          cpu: 1500m
          memory: 2Gi
        defaultRequest:
          cpu: 100m
        type: Container

CPU Requests

  

CPU请求表示容器可能消耗的最小CPU量,但如果没有CPU争用,它可以使用节点上的所有可用CPU。如果节点上存在CPU争用,则CPU请求会在系统上提供所有容器的相对权重,以确定容器可以使用的CPU时间。

CPU Limits

  

pod中的每个容器都可以指定限制在节点上使用的CPU数量。 CPU限制控制容器可以使用的最大CPU数量,而与节点上的争用无关。如果容器尝试超过指定的限制,系统将对容器进行限制。这允许容器具有一致的服务级别,而与调度到节点的pod的数量无关。

kubernetes / understanding CPU resources limits

  

6%的CPU意味着6%(CPU请求)的节点CPU时间是为此pod保留的。所以它保证它总能获得这个CPU时间。 如果还有剩余CPU时间,它仍然可以突然达到12%(CPU限制)

How are Kubernetes CPU limits enforced?

  

检查我的一个容器,我看到Kubernetes为它们设置了CpuPeriod,CpuQuota。 Docker文档(https://docs.docker.com/engine/reference/run/)提到了CFS文档(https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt),从那里的信息来看,这似乎是硬限制

1 个答案:

答案 0 :(得分:0)

Kubernetes in Action 1st Edition by Marko Luksa

14.1.3。了解CPU请求如何影响CPU时间共享

  

如果一个容器想要耗尽尽可能多的CPU ,而另一个容器在给定时刻闲置,则第一个容器将被允许使用整个CPU时间(减去第二个容器使用的少量时间,如果有的话)。 毕竟,如果没有其他人使用它,那么使用所有可用的CPU是有意义的,对吗?一旦第二个容器需要CPU时间,它就会得到它并且第一个容器将被限制回来。

enter image description here

  

即使有2个CPU可用(没有其他进程/容器等待)且容器可运行,它也只能使用0.5个CPU,并且1.5个CPU将保持未使用状态。这是对的吗?

所以这是正确的。