我有以下用例:
-
假设
node1 has 4GB RAM
和node2 has 4GB RAM.
-
pod1
请求了2GB的"resources.requests"。 -
pod2
请求了2GB的"resources.requests"。 -
假设"调度程序"在节点 1 上发送两个 Pod。
-
pod1
占用 250MB,pod2
在节点 1 上占用 250MB。 -
现在,
pod3 comes
,它没有资源声明。 -
假设"调度程序"也在节点 1 上发送 pod3。
在这里,如果 pod3 开始占用空间并获得 2GB 空间,则节点 1 上只剩下 1.5GB 可用空间。
会发生什么?
它会从节点 1 中逐出pod1
和pod2
并将它们移动到节点 2 吗?
在您描述的情况下,实际内存使用情况为
pod | 内存请求 | 的内存已用 |
---|---|---|
1 | 2.0 GiB | 0.25 GiB |
2.0 GiB | 0.25 GiB | |
3 | 0.0 GiB | 2.0 GiB |
免费 | 0.0 GiB | 1.5 GiB |
为了解决您的查询,答案是否定的,pod 1
和pod 2
不会被踢出node 1
并重新定位到node 2
。由于node 1
仍然可以容纳您指定的用例中pod 3
所需的 2GB 资源,因此在pod 1
和pod 2
各自占用 500mb 后,pod 3
将继续占用node 1
,剩下node 1
3.5GB。
根据我对 Kubernetes 的理解,首先部署到node
的pod
将被优先考虑,使用必要的资源,而不是重新定位或转移到其他节点。如果生成了新的pod
并且节点没有足够的内存,调度程序会将新 Pod 分配给具有足够内存的节点。假设没有创建其他节点,则该pod
将被标记为不可调度。
这意味着pod 1
和pod 2
将保留在node 1
上,并且pod 3
也将部署在那里,除非node 1
无法提供所需的内存,在这种情况下,pod 3
将被重新定位到node 2
。
注意:此处的所有图都用作本主题中的示例,在现实生活中并非如此,因为运行的其他服务也会消耗资源。