如果“所有者”不使用这些资源,但是另一个Pod需要它们,那么在实践中如何处理Kubernetes资源请求?将它们暂时授予其他资源还是导致闲置状态?
示例:给定两个Pod / Deployments(在同一节点上):
Pod A在内部崩溃,因此永远不会使用任何资源(实际使用量为0%)。 问题:
我还没有找到任何文档对此进行详细解释(他们只谈论基于资源的计划),任何链接将不胜感激...背景/动机:我在Pod上有一个非常慢的节点应用程序,我怀疑这已实现为资源请求/限制...非常感谢!
答案 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%,它的收益可能会减少;内核将根据自己的策略分配内容。
(内存的工作原理类似,不同之处在于,如果系统超负荷使用,内核将无法对内存进行时间分片,因此它将杀死任意进程,通常是内存使用率最高的进程。)