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

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.1341000 oder höher haben.
  • Nur Pods mit der Dienstqualitätsklasse (Quality of Service, QoS) Burstable kö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 RestartContainer festlegen.
  • 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=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 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 update Befehl 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.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 Knoten-Arbeitsspeicheraustausch 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.

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_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 Knoten-Arbeitsspeicheraustausch 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 Knoten-Arbeitsspeicheraustausch 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 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_bytes
  • kubernetes.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:

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

  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