Kubernetes CPU是否限制“硬”限制?
假设我有一个带有1个CPU的节点,其中有两个已调度且正在运行/就绪/活动的pod,每个都有{500}的requests.limits.cpu
。 Pod A暂时耗尽1个CPU - 这是正常/允许的。最终,pod B需要一些CPU。将Kubernetes(或Linux)确保pod B可以获得它要求的.5 CPU吗?
我仍在寻找明确的答案,但听起来这些可能是Linux / Docker中的硬限制。 wrote this中的@danielmartins
k8s slack channel:
我相信您可以通过在设置限制的容器上运行
docker inspect
来找到它。检查我的一个容器,我发现Kubernetes为他们设置了CpuPeriod
,CpuQuota
。 Docker文档(https://docs.docker.com/engine/reference/run/)提到了CFS文档(https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt),从那里的信息来看,这似乎是硬限制
答案 0 :(得分:1)
对于kubernetes v1.2 +,使用硬拷贝强制执行CPU资源限制,并使用共享强制执行请求。
release note中注明了更改,并且有一个issue可以更新文档。
答案 1 :(得分:0)
Kubernetes只管理容器。据我所知,它实际上是实现CPU限制的容器引擎(Docker,rkt)。正如您已经观察到的那样,这种限制并不是一个硬性限制。而是一定比例的可用资源。
Kubernetes(如果设置为此目的进行监控),获取使用的资源值并使用它们来确定是否需要新的pod(假设您已设置了一些自动缩放)。 Kubernetes无法限制现有的pod,因为它实际上并没有在pod中运行容器。