我深入研究了Kubernetes的资源限制,很难理解CPU limits
是用来干什么的。我知道Kubernetes将requests
和limits
向下传递到(在我的例子中) Docker运行时。
示例:我有1个节点,1个CPU和2个Pods,CPU、requests: 500m
和limits: 800m
。在Docker中,这会导致(500m -> 0.5 * 1024 = 512
) --cpu-shares=512
和(800m -> 800 * 100
) --cpu-quota=80000
。limits
由Kube调度器分配,因为pod和不超过节点容量的100%;就pod而言,节点是过度使用的。
上面的设置允许每个容器每100ms周期获得80ms的CPU时间(默认)。一旦CPU使用率达到100%,就会根据容器的权重在容器之间共享CPU时间,以CPU份额表示。根据基值1024和每个容器的512份额,这将是每个容器的50%。在这一点上-在我的理解- limits
没有更多的相关性,因为没有任何容器可以再得到它的80ms。他们都会得到50毫秒。因此,无论我定义了多少limits
,当使用率达到关键的100%时,它无论如何都会被requests
分区。
这让我想知道:为什么我首先要定义CPU limits
,过量使用会有什么不同吗?另一方面,requests
在“当所有东西都在使用时,我能获得多少份额”方面是完全可以理解的。
发布于 2019-12-25 06:01:22
仅cpu占有率没有上限。如果有空闲周期,您可以自由使用它们。设置了限制,这样一个恶意进程就不会永远占用资源。应该有一些公平的安排。CFS通过此处配置的limit属性强制使用cpu配额和cpu周期。
总之,这种属性确保了当我安排您的任务时,您至少有50毫秒的时间来完成它。如果您需要更多时间,那么如果没有人在队列中等待,我会让您再运行几次,但不会超过80毫秒。
https://stackoverflow.com/questions/48907371
复制相似问题