我已经读过关于k8s资源管理的文章,但我仍然不是很清楚。假设我们有2个k8s节点,每个节点都有22MB的内存。假设Pod A的请求为10mb,限制为15MB(但假设实际使用量为5mb)。所以这个pod被安排在节点1上。所以node1有22MB的内存,Pod A使用了5,但是如果Pod A需要更多的内存,Pod B有request 10和limit 15(基本上与Pod A相同)。所以这个pod是在节点2上调度的
因此,两个节点都有5MB的使用量,总共22mb。如果Pod C有一个5mb的请求和10mb的限制,那么这个pod会被调度到任何节点上吗?如果是,Pod C需要10m内存,而另一个pod需要15mb内存,会发生什么情况?
如果Pod C有13mb的请求和15mb的限制,会发生什么情况?在这种情况下,13( pod C的请求)+10( pod A的请求)将是23(大于22)?
k8s是否尝试确保所有pods的请求<可用内存&&所有pods的限制<可用内存?
发布于 2021-03-15 19:09:46
在帖子中回答问题:
假设Pod A有10mb的请求和15MB的限制(但假设实际使用量为5mb)。所以这个pod被安排在节点1上。所以node1有22MB的内存,Pod A使用了5,但是如果Pod A需要更多的内存,Pod B有request 10和limit 15(基本上与Pod A相同)。所以这个pod是在节点2上调度的
这不是一个真正的问题,但我认为这一部分需要一些关于如何在节点上调度Pods的观点。负责告诉Kubernetes应该在哪里调度Pod的组件是:kube-scheduler。就像你说的那样,It 可能会出现这样的情况:
Pod A, req:10M, limit: 15M Node 1, mem: 22MBPod B req:10M, limit: 15M Node 2, mem: 22MB-> ->
引用官方文档:
kube-scheduler中的
节点选择
kube-scheduler通过两步操作为pod选择一个节点:
过滤步骤找到可以调度Pod的节点集。如果列表为空,则该Pod (尚)不可调度。
在评分步骤中,调度器对其余节点进行排名,以选择最合适的Pod位置。调度器根据活动评分规则为每个在过滤中幸存下来的节点分配一个分数。
最后,kube-将Pod分配给排名最高的节点。如果有多个节点得分相等,kube-scheduler会随机选择其中之一。
--
,因此两个节点都有5MB的使用量,共22mb。如果Pod C有一个5mb的请求和10mb的限制,那么这个pod会被调度到任何节点上吗?如果是,Pod C需要10m内存,而另一个pod需要15mb内存,会发生什么情况?
假设没有其他因素会拒绝调度,则应该在( kube-scheduler选择的)一个节点上生成Pod C。为什么会这样?
resource.limits将不会拒绝Pod的调度(Pod可以高于limit will deny Pod的调度(请求不能高于内存)我鼓励您查看以下文章以获得更多参考:
在这种情况下,13( pod C的请求)+10( pod A的请求)将是23(大于22)?
在该示例中,Pod 将不会被调度为 of requests > memory (假设没有Pod优先级)。Pod将处于Pending状态。
其他资源:
https://stackoverflow.com/questions/66444436
复制相似问题