Wenn ich kubectl top nodes
meinen Azure Kubernetes Services-Cluster mit Windows-Knoten ausführe, erhalte ich einen Wert zurück für MEMORY(bytes)
:
PS >kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
...
akswinxxxxxxxxx 163m 8% 2407Mi 55%
...
Diese Nummer (2407Mi) ist nicht derZugewiesenDer von zurückgegebene Wert kubectl describe node
(umgerechnet in die gleiche Einheit) ist2084Mi:
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%)
(In anderen Situationen habe ich viel größere Unterschiede festgestellt.)
Es ist auch nicht dasselbe wie die Summe der Arbeitssätze (6398Mi) oder privater Speicher (3822Mi) der auf dem Knoten laufenden Prozesse:
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
Es ist auch nicht die Summe des Pod-Speichers, wie berichtet von crictl stats
(1531Mi):
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
Es stimmt auch nicht mit "Gesamtspeicher abzüglich freiem physischen Speicher" auf dem Knoten überein (5101Mi):
PS >$OS = Get-WmiObject -Class WIN32_OperatingSystem
PS> ($OS.TotalVisibleMemorySize - $OS.FreePhysicalMemory)/1024
5101.25390625
Wie in derKubernetes-Dokumentesoll der Wert dieWorkingset. Was bedeutet das also und wie wird es gemessen? Wie kann ich es verwenden, um den Zustand eines Knotens oder die verfügbaren Ressourcen zu überwachen?
(Hinweis: Im Internet finde ich oft Verweise auf Kubernetes'sMetrik-Server. Dies scheint jedoch auf meinen AKS-Windows-Knoten nicht zu laufen.)
Aktualisierung 05.12.2022:Ich weiß, dass die Zahl im Allgemeinen angeben soll, wie viel Speicher des Knotens derzeit verwendet wird. Ich möchte jedoch wirklich mehr Details darüber wissen. Da es nicht mit den Pod-Speicherzahlen übereinstimmt, scheint es Systemprozesse einzuschließen, richtig? Wie kann es also verglichen werden mitZuordenbar(der MEMORY%
Prozentsatz), der für Pods verfügbar ist? Und warum stimmt er nicht mit den direkt auf dem Knoten gemeldeten Zahlen überein (siehe oben)? Kurz gesagt, ich würde gerne wissen, wie die Zahl tatsächlich berechnet wird – unter Windows.
Antwort1
Der "SPEICHER (Bytes)" Wert, der angezeigt wird, kubectl top nodes
ist nicht der gleiche wie der "Zugewiesen"-Wert, der durch angezeigt wird kubectl describe <node>
. Der Wert „Zugeordnet“ gibt die Speichermenge an, die dem Knoten vom Kubernetes-Scheduler zugewiesen wurde, basierend auf den Speicheranforderungen und -grenzen, die für die auf dem Knoten ausgeführten Pods festgelegt wurden. Der „SPEICHER (Bytes)"-Wert gibt dagegen die tatsächliche Speichermenge an, die von den Prozessen verwendet wird, die zum Zeitpunkt der kubectl top nodes
Ausführung des Befehls auf dem Knoten ausgeführt werden.
Du kannst den ... benutzen "SPEICHER (Bytes)"-Wert, der angezeigt wird, kubectl top nodes
um den Zustand Ihrer Knoten zu überwachen und sicherzustellen, dass sie über ausreichend Speicher verfügen, um ihre Arbeitslasten auszuführen. Wenn der Wert konstant nahe dem "Zugewiesen"-Wert, kann dies darauf hinweisen, dass der Knoten nicht mehr genügend Arbeitsspeicher hat und seine Größe angepasst oder seine Ressourcen neu zugewiesen werden müssen.