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:
- Navigieren Sie auf der Azure-Portal zum Cluster.
- Wählen Sie unter "Überwachung" die Option "Insights" aus.
- Legen Sie den entsprechenden Zeitraum fest.
- Wählen Sie Container aus.
- 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.
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.