K8S资源请求和限制=是否未将已使用的请求百分比暂时分配给其他Pod,否则会导致空闲状态?

时间:2019-12-21 18:15:28

标签: kubernetes

如果“所有者”不使用这些资源,但是另一个Pod需要它们,那么在实践中如何处理Kubernetes资源请求?将它们暂时授予其他资源还是导致闲置状态?

示例:给定两个Pod / Deployments(在同一节点上):

  • Pod A(请求40%的CPU)
  • B舱(请求60%CPU,限制80%CPU)

Pod A在内部崩溃,因此永远不会使用任何资源(实际使用量为0%)。 问题:

  1. Pod B可以使用80%,还是将其限制为60%(将保证的40%重新分配给Pod A,即使Pod A永远不会使用这40%,实际上导致40%的闲置状态?)
  2. Pod B甚至能获得超过80%(在空闲系统上)的收益,还是80%绝对是强制执行的?

我还没有找到任何文档对此进行详细解释(他们只谈论基于资源的计划),任何链接将不胜感激...背景/动机:我在Pod上有一个非常慢的节点应用程序,我怀疑这已实现为资源请求/限制...非常感谢!

2 个答案:

答案 0 :(得分:2)

在该节点中,kubernetes唯一拥有的是kubelet,kube代理,并且容器运行时非常负责执行kubernetes建立的限制。因此,如何强制执行限制取决于您在kubernetes中拥有的容器运行时。假设您正在使用Docker。然后进入您的节点并检查Docker如何为您的Pod建立限制。 例如内存限制: docker inspect -f“ {{.HostConfig.Memory}}”

答案 1 :(得分:2)

资源请求仅影响pod在节点上的放置。在您的示例中,该节点上具有100%CPU请求的Pod值,因此(假设该节点有1个CPU)其他节点都无法在那里调度。

CPU 限制限制进程运行。如果B处于某种繁忙的循环中,它将永远不会获得超过80%的CPU。即使它只请求60%的资源,而其他预定的Pod要求另外40%的资源,它也可以使用全部80%的CPU;这里只有限制很重要。如果A也尝试使用40%或100%,它的收益可能会减少;内核将根据自己的策略分配内容。

(内存的工作原理类似,不同之处在于,如果系统超负荷使用,内核将无法对内存进行时间分片,因此它将杀死任意进程,通常是内存使用率最高的进程。)