當我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 的參考指標伺服器。但是,它似乎沒有在我的 AKS Windows 節點上運行。
2022年12月5日更新:我知道該數字通常表示當前正在使用節點的記憶體量。不過,我真的很想了解更多細節。由於它與 Pod 記憶體編號不匹配,它似乎包括系統進程,對吧?那麼,如何比較可分配(MEMORY%
百分比),Pod 可用的是什麼?為什麼它與節點上直接報告的數字不符(見上文)?簡而言之,我想知道這個數字是如何在 Windows 上實際計算的。
答案1
這 ”記憶體(位元組)" 顯示的值kubectl top nodes
與 " 不同已分配” 值顯示kubectl describe <node>
。“已分配”值表示 Kubernetes 調度程序根據為節點上運行的 Pod 設定的內存請求和限制分配給節點的內存量。“記憶體(位元組)另一方面,「值表示命令kubectl top nodes
運行時節點上運行的進程正在使用的實際記憶體量。
您可以使用“記憶體(位元組)“ 顯示的值用於kubectl top nodes
監視節點的運行狀況並確保它們有足夠的記憶體可用於運行其工作負載。如果該值始終接近“已分配”值,它可能表明節點記憶體不足,可能需要調整大小或重新分配其資源。