即使有足够的资源,K8s 也无法将新的 pods 调度到工作节点
K8s cannot schedule new pods to worker nodes even though there are enough resources
目前,当 K8s 在旧部署上扩展新 pods 并且 Rancher 显示卡在调度 pods 到 K8s 工作节点时,我遇到了一个问题。它最终会被安排但需要一些时间,据我了解是等待调度程序找到适合资源请求的节点。
在该部署的事件部分,它显示:
Warning FailedScheduling 0/8 nodes are available: 5 Insufficient memory, 3 node(s) didn't match node selector.
然后我去节点选项卡检查工作节点上是否有内存不足,它显示我的工作节点是这样的:
STATE NAME ROLES VERSION CPU RAM POD
Active worker-01 Worker v1.19.5 14/19 Cores 84.8/86.2 GiB 76/110
Active worker-02 Worker v1.19.5 10.3/19 Cores 83.2/86.2 GiB 51/110
Active worker-03 Worker v1.19.5 14/19 Cores 85.8/86.2 GiB 63/110
Active worker-04 Worker v1.19.5 13/19 Cores 84.4/86.2 GiB 53/110
Active worker-05 Worker v1.19.5 12/19 Cores 85.2/86.2 GiB 68/110
但是当我进入每台服务器并使用 top 和 free 命令检查内存时,它们在 worker-1 节点上输出类似这样的结果:
top:
Tasks: 827 total, 2 running, 825 sleeping, 0 stopped, 0 zombie
%Cpu(s): 34.9 us, 11.9 sy, 0.0 ni, 51.5 id, 0.0 wa, 0.0 hi, 1.7 si, 0.0 st
KiB Mem : 98833488 total, 2198412 free, 81151568 used, 15483504 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 17101808 avail Mem
free -g:
total used free shared buff/cache available
Mem: 94 77 1 0 14 16
Swap: 0 0 0
因此节点中的可用内存大约为 16-17 GB,但仍然无法将新的 pod 调度到其中。所以我想知道是什么导致了这种内存编号冲突,是 86.2(在 Rancher GUI 上)和 94(在服务器上)之间的数量用于 OS 和其他进程吗?以及为什么 Rancher 显示 K8s 工作负载目前大约需要 83-85 GB,但在服务器中可用内存大约为 16-17GB。有什么办法可以更深入地检查吗?
我还在学习 K8s,所以如果可以的话请详细解释一下或者讨论这个话题。
提前致谢!
工作节点上的实际资源消耗是多少并不重要。
真正重要的是资源请求。
请求是容器保证得到的。如果容器请求资源,Kubernetes 只会将其调度到可以为它提供该资源的节点上。
阅读更多关于 Resource Management for Pods and Containers
but my wonder is why it shows almost full of 86.2 GB when the actual
memory is 94GB
使用 kubectl describe node <node name>
查看在特定节点 kubelet
上有多少内存可用
你会看到类似
的内容
Capacity:
cpu: 8
ephemeral-storage: 457871560Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32626320Ki
pods: 110
Allocatable:
cpu: 8
ephemeral-storage: 457871560Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32626320Ki
pods: 110
......
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 100m (1%) 100m (1%)
memory 50Mi (0%) 50Mi (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
K8s workload currently takes about 83-85 GB but in server the memory
available is about 16-17GB.
从所讨论的 free
的输出来看,这不是真的
KiB Mem : 98833488 total, 2198412 free, 81151568 used, 15483504 buff/cache
2198412 free
即 ~2GB 而你在 buff/cache.
中有~1.5GB
您可以使用 cat /proc/meminfo
获取有关 OS-level 内存信息的更多详细信息。
目前,当 K8s 在旧部署上扩展新 pods 并且 Rancher 显示卡在调度 pods 到 K8s 工作节点时,我遇到了一个问题。它最终会被安排但需要一些时间,据我了解是等待调度程序找到适合资源请求的节点。 在该部署的事件部分,它显示:
Warning FailedScheduling 0/8 nodes are available: 5 Insufficient memory, 3 node(s) didn't match node selector.
然后我去节点选项卡检查工作节点上是否有内存不足,它显示我的工作节点是这样的:
STATE NAME ROLES VERSION CPU RAM POD
Active worker-01 Worker v1.19.5 14/19 Cores 84.8/86.2 GiB 76/110
Active worker-02 Worker v1.19.5 10.3/19 Cores 83.2/86.2 GiB 51/110
Active worker-03 Worker v1.19.5 14/19 Cores 85.8/86.2 GiB 63/110
Active worker-04 Worker v1.19.5 13/19 Cores 84.4/86.2 GiB 53/110
Active worker-05 Worker v1.19.5 12/19 Cores 85.2/86.2 GiB 68/110
但是当我进入每台服务器并使用 top 和 free 命令检查内存时,它们在 worker-1 节点上输出类似这样的结果:
top:
Tasks: 827 total, 2 running, 825 sleeping, 0 stopped, 0 zombie
%Cpu(s): 34.9 us, 11.9 sy, 0.0 ni, 51.5 id, 0.0 wa, 0.0 hi, 1.7 si, 0.0 st
KiB Mem : 98833488 total, 2198412 free, 81151568 used, 15483504 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 17101808 avail Mem
free -g:
total used free shared buff/cache available
Mem: 94 77 1 0 14 16
Swap: 0 0 0
因此节点中的可用内存大约为 16-17 GB,但仍然无法将新的 pod 调度到其中。所以我想知道是什么导致了这种内存编号冲突,是 86.2(在 Rancher GUI 上)和 94(在服务器上)之间的数量用于 OS 和其他进程吗?以及为什么 Rancher 显示 K8s 工作负载目前大约需要 83-85 GB,但在服务器中可用内存大约为 16-17GB。有什么办法可以更深入地检查吗?
我还在学习 K8s,所以如果可以的话请详细解释一下或者讨论这个话题。
提前致谢!
工作节点上的实际资源消耗是多少并不重要。 真正重要的是资源请求。
请求是容器保证得到的。如果容器请求资源,Kubernetes 只会将其调度到可以为它提供该资源的节点上。
阅读更多关于 Resource Management for Pods and Containers
but my wonder is why it shows almost full of 86.2 GB when the actual memory is 94GB
使用 kubectl describe node <node name>
查看在特定节点 kubelet
上有多少内存可用
你会看到类似
的内容Capacity:
cpu: 8
ephemeral-storage: 457871560Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32626320Ki
pods: 110
Allocatable:
cpu: 8
ephemeral-storage: 457871560Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32626320Ki
pods: 110
......
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 100m (1%) 100m (1%)
memory 50Mi (0%) 50Mi (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
K8s workload currently takes about 83-85 GB but in server the memory available is about 16-17GB.
从所讨论的 free
的输出来看,这不是真的
KiB Mem : 98833488 total, 2198412 free, 81151568 used, 15483504 buff/cache
2198412 free
即 ~2GB 而你在 buff/cache.
您可以使用 cat /proc/meminfo
获取有关 OS-level 内存信息的更多详细信息。