Identifizieren der Speichersättigung in AKS-Clustern

Die Speichersättigung tritt auf, wenn mindestens eine Anwendung oder ein Prozess mehr Arbeitsspeicher benötigt, als ein Containerhost bereitstellen—kann, oder wenn der verfügbare Speicher erschöpft ist. Ein hoher Speicherverbrauch kann auf verschiedene Arten auftreten, wird aber in der Regel durch Benutzeraktionen oder Anwendungen verursacht. Wenn ein Host seine Speichergrenzen erreicht oder erreicht, gibt es verschiedene potenzielle Symptome. Möglicherweise sind Sie nicht in der Lage, weitere Pods zu planen. Oder Sie können Out-of-Memory (OOM)-Kill-Ereignisse erleben, die Workloads abtöten, um zu verhindern, dass der Host instabil wird.

Führen Sie die folgenden Kubectl-Befehle aus, um die Speichersättigung über Namespaces und Container hinweg zu identifizieren. Mit diesen Befehlen wird der in Byte festgelegte Arbeitsspeicher ausgewertet. Diese Methode erfordert weitere Zuordnungen, um den Hostingknoten zu bestimmen.

Identifizieren der Speichersättigung über alle Namespaces hinweg

kubectl top pods --sort-by=memory -A

Die Speicherspalte (Bytes) in der Ausgabe zeigt die Pods mit dem höchsten Arbeitsspeicher in Bytes am oberen Rand.

Namespace Name CPU (Kerne) Arbeitsspeicher (Bytes)
default memory-demo-3 319 m 1026 Mi
kube-system omsagent-7ppjm 11 m 340 Mi
kube-system omsagent-ddnvb 10 m 335 Mi

Identifizieren der Speichersättigung für alle Namespaces für alle Container

kubectl top pods -A –-containers

Das Feld "Name " in der Ausgabe gibt den Namen des Containers an. Es wird empfohlen, die Spalten nicht zu sortieren. Beim Sortieren kann die Namespacereihenfolge aufgegliedert werden, sodass die Containeransicht weniger als ideal ist.

In der Spalte "Arbeitsspeicher " wird der in Bytes festgelegte Arbeitsspeicher angezeigt, um anzuzeigen, was den meisten Arbeitsspeicher beansprucht.

Namespace Pod Name CPU (Kerne) Arbeitsspeicher (Bytes)
azure-arc metrics-agent-7f5d48b7f9-d8njw metrics-agent 1 m 3 Mi
default memory-demo-3 memory-demo-2-ctr 338 m 1026 Mi
gatekeeper-system gatekeeper-audit-7dc44b8dbc-stfml gatekeeper-audit-container 2 m 50 Mi
gatekeeper-system gatekeeper-controller-d7c45bc7d7pn24 gatekeeper-controller-container 11 m 49 Mi

Nachdem wir nun zwei Möglichkeiten zum Sammeln eines Speicherverbrauchers mit hohem Speicher gesehen haben, müssen wir ermitteln, welcher Knoten ihn hosten soll.

Identifizieren, welcher Knoten den Pod hosten soll

kubectl get pod memory-demo-3 –o wide

Das Knotenfeld zeigt Ihnen, welcher Knoten den Pod hosten soll.

Name Bereit Status Neustart Alter IP Knoten
memory-demo-3 1/1 Wird ausgeführt 0 2 Minuten, 15 Sekunden 172.31.255.255 aks-agentpool-19575414-vmss000032

Identifizieren der Speichersättigung in einem AKS-Cluster mithilfe von Containererkenntnissen

Containererkenntnisse sind ein Azure Kubernetes Service-Feature (AKS), das die Leistung von Containerworkloads überwachen soll. Es wird als skalierbare Lösung empfohlen, um den Ressourcenverbrauch eines Clusters zu überwachen.

So verwenden Sie Containererkenntnisse, um Container oder Pods zu identifizieren, die die Speichersättigung steuern:

  1. Navigieren Sie auf der Azure-Portal zum Cluster.
  2. Wählen Sie unter "Überwachung" die Option "Insights" aus.
  3. Legen Sie den entsprechenden Zeitraum fest.
  4. Wählen Sie Container aus.
  5. Wählen Sie für die Metrik " Arbeitsspeicherarbeitssatz" aus, und legen Sie das Beispiel auf "Max" fest.

Im folgenden Beispiel ist ein Container namens "myapp-maxmem " innerhalb des Maxmem-Test-Pods 14 Minuten lang abgelaufen und sättigt den Hostknoten mit Speicheranforderungen stark.

Screenshot einer Container Insights-Leistungsüberwachungstabelle mit acht Spalten mit entsprechenden Daten. Spalten haben den Titel "Name", "Status", "Max %", "Max", "Pod", "Node", "Restarts" und "UpTime".

Warum verwenden wir den Arbeitssatz?

Der Arbeitsspeicherarbeitssatz umfasst sowohl den residenten Speicher als auch den virtuellen Speicher (Cache), sodass die Anwendung insgesamt verwendet wird. Die Größe des Speicherresidentensatzes (RSS) zeigt nur den Hauptspeicher an (d. h. den residenten Speicher). Die RSS-Metrik des Arbeitsspeichers zeigt die tatsächliche Kapazität des verfügbaren Arbeitsspeichers an. Was ist der Unterschied zwischen dem residenten Speicher und dem virtuellen Speicher?

  • Resident memory or main memory is the actual amount of machine memory available to the nodes of the cluster.
  • Virtueller Speicher ist reservierter Festplattenspeicher (Cache), der vom Betriebssystem verwendet wird, um Daten aus dem residenten Speicher in den Datenträgercache zu tauschen, wenn er unter Arbeitsspeicherdruck steht. Das Betriebssystem ruft die Daten bei Bedarf wieder in den residenten Speicher ab.

Nächste Schritte

Wir empfehlen die Verwendung von Grenzwertbereichen, Ressourcenkontingenten oder Ressourcenanforderungen und -beschränkungen , um den Ressourcenverbrauch für Pods und Container zu steuern. Sie können diese Einstellungen verwenden, um zu verhindern, dass Szenarien mit hoher Sättigung auftreten, die eine Arbeitsauslastung möglicherweise unbrauchbar machen.

Wie sieht es mit Szenarien aus, in denen der Speicher entwurfsbedingt ungebunden ist und fast die Grenzen seines Hostingknotens erreicht? In diesem Fall würden die vorherigen Empfehlungen nichts erreichen, aber es gibt andere Ansätze, die verfolgt werden können. Beispielsweise ist es möglich, nodeSelectors und Affinity/Anti-Affinity-Tags in einer YAML-Datei zu verwenden, in der die Workload auf bestimmten Knoten isoliert werden könnte. Diese Tags verhindern, dass andere Workloads Pods für sie planen, und stellen sicher, dass alles wie erwartet ausgeführt wird.

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Weitere Informationen

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support.