当您在同一个节点上调度了各种可加载的豆荚时,我正试图让我的头脑清醒一下。当节点的内核正在调度CPU,并且CPU完全负荷时,如何确保特定pod中的工作负载优先于另一个pod?在一个典型的Linux主机中,我对进程之间的争用的想法立即转到进程的“美好”上,但是我没有看到任何类似的k8s机制允许指定节点上豆荚中进程之间的CPU调度优先级。
我读过k8s提供的k8s,它(如果我正确地解释文档的话)只是提供了一种将CPU固定在荚上的机制,而这并不能真正解决我的问题。如果较高优先级的荚没有活动工作负载,同时允许更高优先级的工作负载具有CPU调度优先级(如果需要的话),我仍然希望通过“二等”荚来最大化CPU利用率。
到目前为止,由于没有找到令人满意的答案,我认为社区将选择一种架构解决方案,比如自动缩放或分离节点之间的工作负载。我认为这些并不能真正解决这个问题,但实际上只是向它扔更多的CPU,这正是我想要避免的。当你拥有空闲的CPU时,为什么会有更多的节点呢?
发布于 2019-10-09 03:42:07
CPU请求与cgroup CPU优先级相关。基本上,如果Pod A有100 M CPU的请求,而Pod B有200 M的CPU,即使在饥饿的情况下,B的运行秒也是A的两倍。
发布于 2019-10-09 04:38:29
让我首先解释一下在k8s中如何分配和使用CPU (内存有点不同)。
您可以如下所示定义CPU需求。在这里,我们将CPU定义为1000的份额。
resources:
requests:
cpu: 50m
limits:
cpu: 100m在上面的例子中,我们要求CPU份额的最小5%和最大10%。
库伯内特斯用请求来安排吊舱。如果节点有超过5%的空闲CPU,则在该节点上调度pod。
这些限制将传递给docker(或任何其他运行时),后者然后在cgroup中配置cpu.shares。
因此,如果您请求5%的CPU,而只使用1%,那么剩下的不锁定在这个吊舱和其他豆荚可以使用这个免费的CPU,以确保所有吊舱获得所需的CPU,这确保了高CPU利用率的节点。
如果您限制在10%,然后尝试使用更多,那么Linux将节流CPU的使用,但它不会杀死荚。
所以说到你的问题,你可以设定更高的极限,你的可装舱,除非所有吊舱cpu同时爆裂,你是好的。如果他们同时爆发,他们将获得同等的CPU作为avaliability。
您可以使用pod 亲和力和抗亲和力在不同的节点上调度所有可刻录的豆荚。
发布于 2019-10-09 13:08:34
如前所述,Pods中的资源管理是用requests和limits声明的。
在Kubernetes中有3个基于requests和limits配置的limits类:
从某种意义上说,它可能会消耗比所请求的资源更多的资源,这两者都可能被认为是“可扩展的”。
最适合您的情况可能是使用Burtstable类来获得更高优先级的Pods和所有其他方面的最大努力。
https://stackoverflow.com/questions/58296648
复制相似问题