Mit dem GKE-Knotenspeicher-Swap können GKE-Knoten Festplattenspeicher als virtuellen Arbeitsspeicher verwenden, wenn der physische Arbeitsspeicher erschöpft ist. Durch das Auslagern von Arbeitsspeicher auf Knoten kann die Ausfallsicherheit von Anwendungen verbessert und für bestimmte Arbeitslasten Fehler aufgrund von unzureichendem Arbeitsspeicher (OOM-Fehler) verhindert werden.
Wann sollte der Knotenspeicher-Swap verwendet werden?
Verwenden Sie den Knotenspeicher-Swap, um einen Puffer gegen OOM-Fehler für speicherintensive Anwendungen zu schaffen, insbesondere bei unerwarteten Nutzungsspitzen. Der Knotenspeicher-Swap kann die Resilienz Ihrer Arbeitslasten verbessern, z. B. in den folgenden Szenarien:
- Arbeitslasten mit unvorhersehbaren Speichermustern ausführen
- Das Risiko von Anwendungsabstürzen aufgrund von Arbeitsspeichermangel auf Knoten wird verringert.
- Optimieren Sie die Kosten, indem Sie vermeiden, dass Sie Arbeitsspeicher für gelegentliche Spitzen überprovisionieren müssen.
Funktionsweise des Knotenspeicherswaps
Wenn Sie den Knotenspeicher-Swap aktivieren, konfiguriert GKE das Betriebssystem des Knotens so, dass Festplattenspeicher als virtueller Speicher verwendet wird. Dieser Prozess bietet einen Puffer für Anwendungen, bei denen es zu vorübergehendem Arbeitsspeicherdruck kommt.
GKE berechnet Container-Swap-Limits basierend auf den Speicherressourcenlimits des Containers und dem Gesamtspeicher des Knotens.
Sie können Swap auf verschiedenen Speichertypen konfigurieren, um Leistung und Kosten auszugleichen:
- Bootdisk: verwendet die Bootdisk des Knotens als Auslagerungsspeicher.
- Sitzungsspezifische lokale SSD: Hier wird eine lokale SSD verwendet, die auch für den sitzungsspezifischen Pod-Speicher 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 temporären Schlüssel.
Anforderungen und Einschränkungen
Für den Knotenspeicher-Swap gelten die folgenden Anforderungen und Einschränkungen:
- GKE-Cluster müssen mindestens Version
1.34.1-gke.1341000haben. - Nur Pods mit der QoS-Klasse
Burstablekönnen den Knotenspeicher-Swap verwenden. Weitere Informationen zu QoS-Klassen finden Sie in der Kubernetes-Dokumentation unter Pod-Dienstqualitätsklassen. - Wenn Sie den Knotenspeicher-Swap aktivieren, muss die Richtlinie zum Ändern der Containergröße auf
RestartContainerfestgelegt werden. - 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 für die Verwendung einer lokalen SSD konfigurieren, 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 enthält.
- 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, damit lokale SSDs bereitgestellt werden, finden Sie unter Lokalen SSD-gestützten sitzungsspezifischen Speicher bereitstellen und verwenden.
Best Practices
Der Knotenspeicher-Swap ist als Sicherheitsnetz für unvorhersehbare Arbeitsspeicherspitzen gedacht und nicht als Ersatz für ausreichend physischen Arbeitsspeicher. Eine Anleitung zum Optimieren 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 mit aktiviertem Swap-Speicher, indem Sie eine Markierung auf den Knotenpool anwenden, z. B.
gke-swap=enabled:NoSchedule, und den Arbeitslasten, die Swap verwenden sollen, eine entsprechende Toleranz hinzufügen. - Passen Sie die Größe des Auslagerungsspeichers für den Knotenspeicher entsprechend an. Unzureichender Swap-Speicher für Knoten kann OOM-Fehler nicht verhindern und eine übermäßige Nutzung kann die Leistung beeinträchtigen.
- Überwachen Sie die Verwendung von Knotenspeicher-Swap für Ihre Arbeitslasten. Die häufige Verwendung von Node-Arbeitsspeicherswap kann ein Hinweis auf Arbeitsspeicherdruck sein.
Hinweise
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, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Knotenspeicher-Swap aktivieren
Sie können den Knotenspeicher-Swap auf Cluster- oder Knotenpoolebene aktivieren. Wenn Sie den Knotenspeicher-Swap aktivieren möchten, erstellen oder aktualisieren Sie eine system-config.yaml-Datei, die die gewünschte Knotenspeicher-Swap-Konfiguration enthält. Im folgenden Beispiel wird der Knotenspeicher-Swap mit Standardeinstellungen aktiviert:
linuxConfig:
swapConfig:
enabled: true
Es gibt weitere Einstellungen, die Sie konfigurieren können. In diesem Beispiel wird unverschlüsselter 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 API-Dokumentation zu LinuxNodeConfig.
Swap-Speicher für Knoten in einem 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 beta 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 beta 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.
Swap-Speicher für Knoten in einem 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 beta 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. Achten Sie bei lokalen SSDs darauf, dass Sie einen Maschinentyp auswählen, der lokale SSDs enthält, 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 beta 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.yamlmit denswapConfig-Einstellungen angewendet wird:gcloud beta 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
Swap-Speicher-Nutzung ü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 über cAdvisor auch Messwerte zur Swap-Nutzung auf Containerebene. Wenn Sie diese Messwerte verwenden möchten, aktivieren Sie cAdvisor im Cluster:
prometheus.googleapis.com/container_memory_swap/gauge
kubectl
So überwachen Sie die Swap-Nutzung mit kubectl-Befehlen:
Prüfen Sie den
SwapDetected-Zustand des Knotenobjekts mit dem folgenden Befehl: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 die Swap-Kapazität mit dem folgenden Befehl:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'Die Ausgabe sieht etwa so aus:
{"capacity":53687087104}
Swap-Speicher für Knoten deaktivieren
So deaktivieren Sie den Knotenspeicher-Swap:system-config.yaml
Aktualisieren Sie die Datei
system-config.yaml, umswapConfig.enabledauffalsefestzulegen:linuxConfig: swapConfig: enabled: falseAktualisieren Sie den Knotenpool mit der neuen Konfiguration:
gcloud beta 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