Knoten für die Verwendung von Festplattenspeicher als virtuellen Arbeitsspeicher konfigurieren

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.1341000 oder höher haben.
  • Nur Pods mit der Dienstqualitätsklasse (Quality of Service, QoS) Burstable kö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 RestartContainer festlegen.
  • 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=count fest.
    • Wählen Sie für Maschinenserien der dritten oder vierten Generation einen Maschinentyp aus, der lokale SSDs bündelt.
  • Der Standardmaschinentyp e2-medium unterstü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:

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 update Befehl 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.yaml
    

    Ersetzen 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.yaml
    

    Ersetzen 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_TYPE
    

    Ersetzen Sie Folgendes:

    • NODEPOOL_NAME ist 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.yaml
    

    Ersetzen 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:

  1. Prüfen Sie mit dem folgenden Befehl, ob die system-config.yaml-Datei mit den swapConfig-Einstellungen angewendet wurde:

    gcloud container node-pools describe NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --format='yaml(config.linuxNodeConfig.swapConfig)'
    
  2. 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_bytes
  • kubernetes.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:

  1. Prüfen Sie mit dem folgenden Befehl die Bedingung SwapDetected fü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"
    }
    
  2. 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:

  1. Aktualisieren Sie die Datei system-config.yaml, um swapConfig.enabled auf false zu setzen:

    linuxConfig:
      swapConfig:
        enabled: false
    
  2. Aktualisieren 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