我试图了解时间表在某些情况下的行为方式/原因。有人可以解释在这些情况下调度程序会做什么(为什么)吗?
假设我有一个10GB的存储盒
我有一个容器,其内存请求设置为1G。我运行了10个副本,我希望所有10个副本都在同一个盒子上(对于这种情况,请忽略任何kube系统样式的pod)
现在假设我还将添加的内存限制设置为2G。怎么了?对我来说,这对调度程序说:“此Pod要求1G,但可以增长到2G” —调度程序是否仍将所有10个设备放在同一个盒子中,知道它很可能必须将其中的一半踢掉?还是会分配2G,因为这就是上述限制?
如果假设我不声明限制,那么该Pod将会增长,直到节点内存耗尽,然后杀死超出其请求资源的Pod吗?还是会采用某种默认设置?
答案 0 :(得分:1)
请求是需要在节点上专门提供给该pod进行调度的内容。这是从可用资源计数中扣除的。极限就是极限。吊舱使用量将限于该值。
因此,如果您有10G节点,并希望容纳在其上的req: 1G, limit: 2G
吊舱中,则可以容纳其中的10个,并且如果有足够的空间,它们可以增加2G的内存使用量来自其他设备的未使用内存(即,您请求1G,但实际上使用700M,这大约为您提供了3G的请求,但没有可用的空间,这些空间可用于Pod扩展到2G的限制。
答案 1 :(得分:1)
@Radek的解释当然是正确的。要回答您的后续问题,如果您确实声明资源且没有限制,则tf.string_split
会说明可用的方案:
如果节点可用,则容器能够超出其请求内存。但不允许使用超过限制的数量。因此,这里有您的用例-
如果容器分配的内存超出其限制,则 容器成为终止的候选者。如果集装箱 继续消耗超出其限制的内存,容器是 终止。如果终止的容器可以重新启动,则kubelet 与其他任何类型的运行时失败一样,重新启动它。
如果没有限制:
要完全掌握该主题,我认为了解限制已设置为可以防止突发事件非常重要,因此,在一定时间范围内,如果您的容器处于峰值状态,您仍将保留其余资源组件,不会有严重的灾难发生。
我强烈建议您尝试使用官方文档(documentation,CPU)中的一些用例,以便您可以测试自己的方案并更好地理解它。例如,您可以使用minikube立即完成此操作。