Mit dem GKE-Knotenspeicher-Swap können GKE-Knoten Festplattenspeicher als virtuellen Arbeitsspeicher verwenden, wenn der physische Arbeitsspeicher erschöpft ist. Der Knotenspeicher-Swap kann die Anwendungsresilienz verbessern und Fehler aufgrund von Arbeitsspeichermangel (Out-of-Memory, OOM) für bestimmte Arbeitslasten verhindern.
Wann sollte der Knotenspeicher-Swap verwendet werden?
Verwenden Sie den Knotenspeicher-Swap, um einen Puffer gegen OOM-Fehler für speicherintensive Anwendungen bereitzustellen, insbesondere bei unerwarteten Nutzungsspitzen. Der Knotenspeicher-Swap 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 Knotenspeicher-Swap
Wenn Sie den Knotenspeicher-Swap 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 Swap-Limits für Container basierend auf den Arbeitsspeicher- Ressourcenlimits des Containers und dem Gesamtarbeitsspeicher des Knotens.
Sie können den Swap für verschiedene Speichertypen konfigurieren, um Leistung und Kosten auszugleichen:
- Bootlaufwerk: Verwendet das Bootlaufwerk des Knotens für den Swap-Speicher.
- 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 Swap.
Zum Schutz vertraulicher Daten verschlüsselt GKE den Swap-Speicher standardmäßig mit einem sitzungsspezifischen Schlüssel.
Anforderungen und Einschränkungen
Für den Knotenspeicher-Swap 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 Knotenspeicher-Swap 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 von Containern auf
RestartContainerfestlegen. - Wenn Sie den Knotenspeicher-Swap so konfigurieren, dass ein Bootlaufwerk verwendet wird, darf die Swap-Größe 50% der Gesamtkapazität des Bootlaufwerks nicht überschreiten.
Wenn Sie den Knotenspeicher-Swap 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 daher 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 Knotenspeicher-Swap 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 Knotenspeicher-Swap verwenden:
- Isolieren Sie Knoten, für die der Knotenspeicher-Swap aktiviert ist, indem Sie dem Knotenpool eine Markierung zuweisen, z. B., und fügen Sie den Arbeitslasten, die den Swap verwenden sollen, eine entsprechende Toleranz hinzu.
gke-swap=enabled:NoSchedule - Passen Sie die Größe des Knotenspeicher-Swap-Speichers entsprechend an. Ein unzureichender Knotenspeicher-Swap-Speicher verhindert möglicherweise keine OOM-Fehler und eine übermäßige Nutzung kann die Leistung beeinträchtigen.
- Überwachen Sie die Nutzung des Knotenspeicher-Swap für Ihre Arbeitslasten. Eine häufige Nutzung des Knotenspeicher-Swap 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.
Knotenspeicher-Swap aktivieren
Sie können den Knotenspeicher-Swap auf Cluster- oder Knotenpoolebene aktivieren. Erstellen oder aktualisieren Sie dazu eine system-config.yaml-Datei, die die gewünschte Knotenspeicher-Swap-Konfiguration enthält. Im folgenden Beispiel wird der Knotenspeicher-Swap mit den Standardeinstellungen aktiviert:
linuxConfig:
swapConfig:
enabled: true
Es gibt weitere Einstellungen, die Sie konfigurieren können. In diesem Beispiel wird der unverschlüsselte Swap 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.
Knotenspeicher-Swap für einen Cluster aktivieren
Führen Sie einen der folgenden Schritte aus, um den Knotenspeicher-Swap für einen Cluster zu aktivieren:
Führen Sie den folgenden Befehl aus, um einen neuen Cluster mit aktiviertem Knotenspeicher-Swap 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 Knotenspeicher-Swap 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.
Knotenspeicher-Swap für einen Knotenpool aktivieren
Führen Sie einen der folgenden Schritte aus, um den Knotenspeicher-Swap für einen Knotenpool zu aktivieren:
Führen Sie den folgenden Befehl aus, um einen neuen Knotenpool mit aktiviertem Knotenspeicher-Swap 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 Knotenspeicher-Swap 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 Knotenspeicher-Swap 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 Knotenspeicher-Swap überwachen
Sie können den Knotenspeicher mit Cloud Monitoring oder kubectl überwachen.
Monitoring
Die folgenden Systemmesswerte sind standardmäßig verfügbar, um die Swap-Nutzung zu beobachten:
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
GKE bietet auch Messwerte zur Swap-Nutzung 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 Swap-Nutzung 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 Swap-Kapazität:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'Die Ausgabe sieht etwa so aus:
{"capacity":53687087104}
Knotenspeicher-Swap deaktivieren
Wenn Sie den Knotenspeicher-Swap deaktivieren möchten, aktualisieren Sie die Datei system-config.yaml. Führen Sie dazu die folgenden Schritte aus:
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.