Kubernetes:了解资源请求/限制和调度

时间:2018-11-05 07:10:56

标签: kubernetes

我试图了解时间表在某些情况下的行为方式/原因。有人可以解释在这些情况下调度程序会做什么(为什么)吗?

假设我有一个10GB的存储盒

我有一个容器,其内存请求设置为1G。我运行了10个副本,我希望所有10个副本都在同一个盒子上(对于这种情况,请忽略任何kube系统样式的pod)

现在假设我还将添加的内存限制设置为2G。怎么了?对我来说,这对调度程序说:“此Pod要求1G,但可以增长到2G” —调度程序是否仍将所有10个设备放在同一个盒子中,知道它很可能必须将其中的一半踢掉?还是会分配2G,因为这就是上述限制?

如果假设我不声明限制,那么该Pod将会增长,直到节点内存耗尽,然后杀死超出其请求资源的Pod吗?还是会采用某种默认设置?

2 个答案:

答案 0 :(得分:1)

请求是需要在节点上专门提供给该pod进行调度的内容。这是从可用资源计数中扣除的。极限就是极限。吊舱使用量将限于该值。

因此,如果您有10G节点,并希望容纳在其上的req: 1G, limit: 2G吊舱中,则可以容纳其中的10个,并且如果有足够的空间,它们可以增加2G的内存使用量来自其他设备的未使用内存(即,您请求1G,但实际上使用700M,这大约为您提供了3G的请求,但没有可用的空间,这些空间可用于Pod扩展到2G的限制。

答案 1 :(得分:1)

@Radek的解释当然是正确的。要回答您的后续问题,如果您确实声明资源且没有限制,则tf.string_split会说明可用的方案: 如果节点可用,则容器能够超出其请求内存。但不允许使用超过限制的数量。因此,这里有您的用例-

  

如果容器分配的内存超出其限制,则   容器成为终止的候选者。如果集装箱   继续消耗超出其限制的内存,容器是   终止。如果终止的容器可以重新启动,则kubelet   与其他任何类型的运行时失败一样,重新启动它。

如果没有限制:

  • 其中之一实际上就是您编写的内容,如果没有限制,它们可能会增长,直到它使用Node上可用的内存为止。
  • 如果容器在具有默认内存限制的命名空间中运行,则它将自动具有该默认限制。

要完全掌握该主题,我认为了解限制已设置为可以防止突发事件非常重要,因此,在一定时间范围内,如果您的容器处于峰值状态,您仍将保留其余资源组件,不会有严重的灾难发生。

我强烈建议您尝试使用官方文档(documentationCPU)中的一些用例,以便您可以测试自己的方案并更好地理解它。例如,您可以使用minikube立即完成此操作。