如何强制执行Kubernetes CPU限制?

时间:2016-06-22 18:09:09

标签: kubernetes

Kubernetes CPU是否限制“硬”限制?

假设我有一个带有1个CPU的节点,其中有两个已调度且正在运行/就绪/活动的pod,每个都有{500}的requests.limits.cpu。 Pod A暂时耗尽1个CPU - 这是正常/允许的。最终,pod B需要一些CPU。将Kubernetes(或Linux)确保pod B可以获得它要求的.5 CPU吗?

2016年6月23日16:55:25 UTC 2016年更新

我仍在寻找明确的答案,但听起来这些可能是Linux / Docker中的硬限制。 wrote this中的@danielmartins k8s slack channel

  

我相信您可以通过在设置限制的容器上运行docker inspect来找到它。检查我的一个容器,我发现Kubernetes为他们设置了CpuPeriodCpuQuota。 Docker文档(https://docs.docker.com/engine/reference/run/)提到了CFS文档(https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt),从那里的信息来看,这似乎是硬限制

2 个答案:

答案 0 :(得分:1)

对于kubernetes v1.2 +,使用硬拷贝强制执行CPU资源限制,并使用共享强制执行请求。

release note中注明了更改,并且有一个issue可以更新文档。

答案 1 :(得分:0)

Kubernetes只管理容器。据我所知,它实际上是实现CPU限制的容器引擎(Docker,rkt)。正如您已经观察到的那样,这种限制并不是一个硬性限制。而是一定比例的可用资源。

Kubernetes(如果设置为此目的进行监控),获取使用的资源值并使用它们来确定是否需要新的pod(假设您已设置了一些自动缩放)。 Kubernetes无法限制现有的pod,因为它实际上并没有在pod中运行容器。