首页 文章

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

提问于
浏览
1

目标

当限制设置在远低于可用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

    Kubernetes in Action第1版由Marko Luksa撰写

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

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

    enter image description here


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

    所以这是正确的 .

相关问题