当我kubectl top nodes
在具有 Windows 节点的 Azure Kubernetes 服务群集上运行时,我得到了一个返回值MEMORY(bytes)
:
PS >kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
...
akswinxxxxxxxxx 163m 8% 2407Mi 55%
...
这个号码 (2407英里)不是已分配返回的值kubectl describe node
(转换为相同单位时)为2084英里:
PS > kubectl describe node akswinxxxxxxxxx
...
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1070m (56%) 500m (26%)
memory 2134435Ki (48%) 2412Mi (56%)
ephemeral-storage 0 (0%) 0 (0%)
(我在其他情况下看到了更大的差异。)
它也不同于工作集的总和(6398英里)或私人记忆(3822英里)节点上运行的进程:
PS C:\C\6428530b2b53f975bb582acc2f12458ca138075069d33d663f3b9e2ec70edbaf> (get-process |Measure-Object WorkingSet64 -Sum).Sum / 1024 / 1024
6397.7109375
PS C:\C\6428530b2b53f975bb582acc2f12458ca138075069d33d663f3b9e2ec70edbaf> (get-process |Measure-Object PrivateMemorySize64 -Sum).Sum / 1024 / 1024
3822.328125
它也不是 Pod 内存的总和,正如crictl stats
(1531英里):
PS >crictl stats
CONTAINER CPU % MEM DISK INODES
2bdfd79f404af 0.00 33.39MB 71.3MB 0
32ea5bc86bacf 0.00 34.36MB 37.75MB 0
511eb449bc0ae 0.00 37.55MB 71.3MB 0
52a1bd98c3558 3.09 222MB 147.8MB 0
6428530b2b53f 0.00 73.54MB 37.75MB 0
6bd5050e8bb4c 0.00 37.68MB 37.75MB 0
78a51582874ec 0.00 241.5MB 104.9MB 0
bb1224de3c87e 0.00 34.14MB 71.3MB 0
e19566f08ca1e 0.00 38.27MB 37.75MB 0
e633436686347 0.00 329.5MB 172MB 0
f82c4306b4692 0.00 34.79MB 37.75MB 0
fa36b455d852f 0.00 235.8MB 104.9MB 0
fe7d9f0193f17 0.00 178MB 306.2MB 0
它也不匹配节点上的“总内存减去可用物理内存”(5101米):
PS >$OS = Get-WmiObject -Class WIN32_OperatingSystem
PS> ($OS.TotalVisibleMemorySize - $OS.FreePhysicalMemory)/1024
5101.25390625
正如Kubernetes 文档,该值用于指示节点的工作集。那么,这是什么意思,如何测量?如何使用它来监控节点的健康状况或可用资源?
(注:在互联网上,我经常找到对 Kubernetes 的指标服务器。但是,它似乎没有在我的 AKS Windows 节点上运行。)
更新 2022-12-05:我知道这个数字一般用来表示当前节点的内存使用量。但是,我真的想知道更多有关它的详细信息。由于它与 Pod 内存数字不匹配,因此它似乎包括系统进程,对吗?那么,它如何与可分配(MEMORY%
百分比),Pod 可用的空间是多少?为什么它与节点上直接报告的数字不匹配(见上文)?简而言之,我想知道这个数字实际上是如何计算的——在 Windows 上。
答案1
这 ”内存(字节)“ 显示的值kubectl top nodes
与“ 不同已分配显示的值kubectl describe <node>
。“已分配”值表示 Kubernetes 调度程序根据为节点上运行的 Pod 设置的内存请求和限制为节点分配的内存量。内存(字节)另一方面," 值表示kubectl top nodes
运行命令时节点上运行的进程实际使用的内存量。
您可以使用“内存(字节)显示的“值”kubectl top nodes
来监控节点的运行状况,并确保它们有足够的内存来运行其工作负载。如果该值始终接近“已分配“值,则可能表明该节点内存不足,可能需要调整大小或重新分配其资源。