Mit dem Google Kubernetes Engine (GKE)-Knoten-Arbeitsspeicheraustausch können GKE-Knoten Festplattenspeicher als virtuellen Arbeitsspeicher verwenden, wenn der physische Arbeitsspeicher erschöpft ist. Der Knoten-Arbeitsspeicheraustausch kann die Anwendungsresilienz verbessern und Fehler aufgrund von Arbeitsspeichermangel (Out-of-Memory, OOM) für bestimmte Arbeitslasten verhindern.
Wann sollte der Knoten-Arbeitsspeicheraustausch verwendet werden?
Verwenden Sie den Knoten-Arbeitsspeicheraustausch, um einen Puffer gegen OOM-Fehler für speicherintensive Anwendungen bereitzustellen, insbesondere bei unerwarteten Nutzungsspitzen. Der Knoten-Arbeitsspeicheraustausch kann die Resilienz Ihrer Arbeitslasten verbessern, z. B. in den folgenden Szenarien:
- Arbeitslasten mit unvorhersehbaren Arbeitsspeichermustern ausführen.
- Das Risiko von Anwendungsabstürzen aufgrund von Arbeitsspeichermangel auf Knoten reduzieren.
- Kosten optimieren, indem Sie keinen zusätzlichen Arbeitsspeicher für gelegentliche Spitzen bereitstellen müssen.
Funktionsweise des Knoten-Arbeitsspeicheraustauschs
Wenn Sie den Knoten-Arbeitsspeicheraustausch aktivieren, konfiguriert GKE das Betriebssystem des Knotens so, dass Festplattenspeicher als virtueller Arbeitsspeicher verwendet wird. Dieser Prozess bietet einen Puffer für Anwendungen, bei denen es zu vorübergehendem Arbeitsspeicherdruck kommt.
GKE berechnet die Container-Austauschlimits basierend auf den Arbeitsspeicher -Ressourcenlimits des Containers und dem Gesamtarbeitsspeicher des Knotens.
Sie können den Austausch für verschiedene Speichertypen konfigurieren, um Leistung und Kosten auszugleichen:
- Bootlaufwerk: Verwendet das Bootlaufwerk des Knotens für den Austauschspeicher.
- Sitzungsspezifische lokale SSD: Verwendet eine lokale SSD, die auch für den sitzungsspezifischen Speicher des Pods freigegeben ist.
- Dedizierte lokale SSD: Reserviert eine oder mehrere lokale SSDs ausschließlich für den Austausch.
Zum Schutz vertraulicher Daten verschlüsselt GKE den Austauschspeicher standardmäßig mit einem sitzungsspezifischen Schlüssel.
Anforderungen und Einschränkungen
Für den Knoten-Arbeitsspeicheraustausch gelten die folgenden Anforderungen und Einschränkungen:
- GKE-Cluster müssen die Version
1.34.1-gke.1341000oder höher haben. - Nur Pods mit der Dienstqualitätsklasse (Quality of Service, QoS)
Burstablekönnen den Knoten-Arbeitsspeicheraustausch verwenden. Weitere Informationen zu QoS-Klassen finden Sie in der Kubernetes Dokumentation unter Pod-Dienstqualitätsklassen. - Wenn Sie die Größe der Arbeitsspeicherressourcen von Containern ändern möchten, müssen Sie die
Richtlinie zur Größenänderung des Containers auf
RestartContainerfestlegen. - Wenn Sie den Knoten-Arbeitsspeicheraustausch so konfigurieren, dass ein Bootlaufwerk verwendet wird, darf die Austauschgröße 50% der Gesamtkapazität des Bootlaufwerks nicht überschreiten.
Wenn Sie den Knoten-Arbeitsspeicheraustausch so konfigurieren, dass eine lokale SSD verwendet wird, müssen die folgenden Anforderungen erfüllt sein:
- Der Maschinentyp muss lokale SSDs unterstützen. Sie können keinen Rohblockspeicher mit einer lokalen SSD verwenden.
- Knoten müssen mit lokalen SSDs bereitgestellt werden. Die Bereitstellungsmethode hängt von der Maschinenserie ab:
- Legen Sie für Maschinenserien der ersten oder zweiten Generation das Flag
--ephemeral-storage-local-ssd=countfest. - Wählen Sie für Maschinenserien der dritten oder vierten Generation einen Maschinentyp aus, der lokale SSDs bündelt.
- Legen Sie für Maschinenserien der ersten oder zweiten Generation das Flag
- Der Standardmaschinentyp
e2-mediumunterstützt keine lokalen SSDs. Sie müssen also einen anderen Maschinentyp auswählen. - Eine Anleitung zum Erstellen oder Aktualisieren eines Clusters, sodass lokale SSDs bereitgestellt werden, finden Sie unter Sitzungsspezifischen lokalen SSD-gestützten Speicher bereitstellen und verwenden.
Best Practices
Der Knoten-Arbeitsspeicheraustausch ist als Sicherheitsnetz für unvorhersehbare Arbeitsspeicherspitzen gedacht und ersetzt nicht ausreichend physischen Arbeitsspeicher. Eine Anleitung zur Optimierung von Arbeitslasten finden Sie unter Größe von GKE-Arbeitslasten in großem Maßstab anpassen.
Beachten Sie außerdem die folgenden Best Practices, wenn Sie den Knoten-Arbeitsspeicheraustausch verwenden:
- Isolieren Sie Knoten, für die der Knoten-Arbeitsspeicheraustausch aktiviert ist, indem Sie dem Knotenpool eine Markierung hinzufügen, z. B.
, und eine entsprechende Toleranz zu den
Arbeitslasten hinzufügen, die den Austausch verwenden sollen.
gke-swap=enabled:NoSchedule - Passen Sie die Größe des Knoten-Arbeitsspeicheraustauschs entsprechend an. Ein unzureichender Knoten-Arbeitsspeicheraustausch kann OOM-Fehler möglicherweise nicht verhindern und eine übermäßige Nutzung kann die Leistung beeinträchtigen.
- Überwachen Sie die Nutzung des Knoten-Arbeitsspeicheraustauschs für Ihre Arbeitslasten. Eine häufige Nutzung des Knoten-Arbeitsspeicheraustauschs kann ein Hinweis auf Arbeitsspeicherdruck sein.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten,
installieren und dann
initialisieren Sie die
gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste
Version mit dem
gcloud components updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
Knoten-Arbeitsspeicheraustausch aktivieren
Sie können den Knoten-Arbeitsspeicheraustausch auf Cluster- oder Knotenpoolebene aktivieren. Erstellen oder aktualisieren Sie zum Aktivieren des Knoten-Arbeitsspeicheraustauschs eine system-config.yaml-Datei mit der gewünschten Konfiguration für den Knoten-Arbeitsspeicheraustausch. Im folgenden Beispiel wird der Knoten-Arbeitsspeicheraustausch mit den Standardeinstellungen aktiviert:
linuxConfig:
swapConfig:
enabled: true
Es gibt weitere Einstellungen, die Sie konfigurieren können. In diesem Beispiel wird der unverschlüsselte Austausch so konfiguriert, dass 30% des Speichers einer sitzungsspezifischen lokalen SSD verwendet werden:
linuxConfig:
swapConfig:
enabled: true
encryptionConfig:
disabled: true
ephemeralLocalSsdProfile:
swapSizePercent: 30
Eine Liste der optionalen Felder, die Sie konfigurieren können, finden Sie in der LinuxNodeConfig API-Dokumentation.
Knoten-Arbeitsspeicheraustausch in einem Cluster aktivieren
Führen Sie einen der folgenden Schritte aus, um den Knoten-Arbeitsspeicheraustausch in einem Cluster zu aktivieren:
Führen Sie den folgenden Befehl aus, um einen neuen Cluster mit aktiviertem Knoten-Arbeitsspeicheraustausch zu erstellen:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=1.34.1-gke.1341000 \ --system-config-from-file=system-config.yamlErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name des neuen Clusters.LOCATION: Die Region oder Zone für Ihren Cluster.
Führen Sie den folgenden Befehl aus, um einen vorhandenen Cluster zu aktualisieren und den Knoten-Arbeitsspeicheraustausch zu aktivieren:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name des neuen Clusters.LOCATION: Die Region oder Zone für Ihren Cluster.
Knoten-Arbeitsspeicheraustausch in einem Knotenpool aktivieren
Führen Sie einen der folgenden Schritte aus, um den Knoten-Arbeitsspeicheraustausch in einem Knotenpool zu aktivieren:
Führen Sie den folgenden Befehl aus, um einen neuen Knotenpool mit aktiviertem Knoten-Arbeitsspeicheraustausch zu erstellen:
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --node-version=1.34.1-gke.1293000 \ --system-config-from-file=system-config.yaml \ --machine-type=MACHINE_TYPEErsetzen Sie Folgendes:
NODEPOOL_NAMEist der Name des neuen Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: Die Region oder Zone für Ihren Cluster.MACHINE_TYPE: Ein kompatibler Maschinentyp. Wählen Sie für lokale SSDs einen Maschinentyp aus, der lokale SSDs bündelt, z. B.n1-standard-1.
Führen Sie den folgenden Befehl aus, um einen vorhandenen Knotenpool zu aktualisieren und den Knoten-Arbeitsspeicheraustausch zu aktivieren:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlErsetzen Sie Folgendes:
NODEPOOL_NAME: Der Name des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: Die Region oder Zone für Ihren Cluster.
Konfiguration prüfen
So prüfen Sie, ob der Knoten-Arbeitsspeicheraustausch aktiviert ist:
Prüfen Sie mit dem folgenden Befehl, ob die
system-config.yaml-Datei mit denswapConfig-Einstellungen angewendet wurde:gcloud container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'Prüfen Sie mit dem folgenden Befehl, ob die kubelet-Konfiguration auf dem Knoten vorhanden ist:
kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/configz" | jq .kubeletconfig.memorySwap
Nutzung des Arbeitsspeicheraustauschs überwachen
Sie können den Knotenspeicher mit Cloud Monitoring oder kubectl überwachen.
Monitoring
Die folgenden Systemmesswerte sind standardmäßig verfügbar, um die Nutzung des Arbeitsspeicheraustauschs zu beobachten:
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
GKE bietet auch Messwerte zur Nutzung des Arbeitsspeicheraustauschs auf Containerebene über cAdvisor. Wenn Sie diese Messwerte verwenden möchten, aktivieren Sie cAdvisor im Cluster:
prometheus.googleapis.com/container_memory_swap/gauge
kubectl
Führen Sie die folgenden Schritte aus, um die Nutzung des Arbeitsspeicheraustauschs mit kubectl-Befehlen zu überwachen:
Prüfen Sie mit dem folgenden Befehl die Bedingung
SwapDetectedfür das Knotenobjekt:kubectl get node NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Swap")]}' | jq .Die Ausgabe sieht etwa so aus:
{ "lastHeartbeatTime": "2025-07-11T00:14:52Z", "lastTransitionTime": "2025-06-25T05:20:10Z", "message": "Swap is active: Total=49Gi Used=0B Free=49Gi", "reason": "SwapDetected", "status": "True", "type": "Swap" }Prüfen Sie mit dem folgenden Befehl die Austauschkapazität:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'Die Ausgabe sieht etwa so aus:
{"capacity":53687087104}
Knoten-Arbeitsspeicheraustausch deaktivieren
Führen Sie die folgenden Schritte aus, um den Knoten-Arbeitsspeicheraustausch zu deaktivieren und die Datei system-config.yaml zu aktualisieren:
Aktualisieren Sie die Datei
system-config.yaml, umswapConfig.enabledauffalsezu setzen:linuxConfig: swapConfig: enabled: falseAktualisieren Sie den Knotenpool mit der neuen Konfiguration:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yaml
Nächste Schritte
- Weitere Informationen zum Anpassen der Knotensystemkonfiguration.
- Weitere Informationen zu GKE-Speicheroptionen.