Sitzungsspezifischen lokalen SSD-gestützten Speicher bereitstellen und verwenden


Auf dieser Seite wird erläutert, wie Sie lokalen SSD-Speicher in GKE-Clustern (Google Kubernetes Engine) bereitstellen und Arbeitslasten konfigurieren, um Daten aus lokalem, SSD-gestützten Speicher zu nutzen, der an Knoten in Ihrem Cluster angehängt ist.

Weitere Informationen zur Unterstützung lokaler SSDs in GKE finden Sie unter Lokaler SSD-Speicher.

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 diese Aufgabe 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 gcloud components update ab.

Cluster oder Knotenpool mit sitzungsspezifischem lokalen SSD-Speicher erstellen

Verwenden Sie die Google Cloud CLI, um einen Cluster oder Knotenpool mit sitzungsspezifischem lokalem SSD-Speicher zu erstellen.

Verwenden Sie die Option --ephemeral-storage-local-ssd, um vollständig verwalteten lokalen sitzungsspezifischen Speicher, der von lokalen SSD-Volumes unterstützt wird, anzuhängen. Dieser Speicher ist an den Lebenszyklus Ihrer Pods gebunden. Wenn Ihre Pods sitzungsspezifischen Speicher anfordern, plant GKE sie zur Ausführung auf Knoten, für die lokale SSD-Volumes als sitzungsspezifischer Speicher konfiguriert sind. Wenn Sie eine speziellere oder detailliertere Kontrolle über Ihre lokalen SSDs wünschen, empfehlen wir stattdessen die Verwendung von lokalem SSD-gestützten Rohblockspeicher.

Wenn Cluster-Autoscaling aktiviert ist, skaliert GKE Ihre Knoten automatisch, wenn der Cluster sitzungsspezifischen Speicherplatz benötigt. Ihre Pods können über das Volume emptyDir auf Daten auf lokalen SSD-Volumes zugreifen.

Welche gcloud-Befehlszeile Sie zum Erstellen des Clusters oder Knotenpools ausführen, hängt davon ab, welche Maschinenserie des ausgewählten Maschinentyps erstellt wird. Beispielsweise gehören N1- und N2-Maschinentypen zu einer Maschinenserie der ersten oder zweiten Generation, während C3-Maschinentypen zu einer Maschinenserie der dritten Generation gehören.

Cluster mit lokaler SSD erstellen

1. oder 2. Generation

Wenn Sie einen Maschinentyp aus einer Maschinenserie der ersten oder zweiten Generation verwenden, erstellen Sie den Cluster durch Angabe der Option --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS. Mit dieser Option wird die angegebene Anzahl von lokalen SSD-Volumes auf jedem Knoten bereitgestellt, die für den sitzungsspezifischen Kubelet-Speicher verwendet werden sollen.

Diese Einstellungen gelten nur für den Standardknotenpool. Wenn nachfolgende Knotenpools eine lokale SSD benötigen, geben Sie dies während der Knotenpoolerstellung an.

Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen, der auf GKE-Version 1.25.3-gke.1800 oder höher ausgeführt wird, in dem der Standardpool lokale SSD-Volumes verwendet:

gcloud container clusters create CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE \
    --release-channel CHANNEL_NAME

Ersetzen Sie Folgendes:

  • CLUSTER_NAME ist der Name des Clusters.
  • NUMBER_OF_DISKS ist die Anzahl der lokalen SSD-Volumes, die auf jedem Knoten bereitgestellt werden sollen. Diese Volumes werden während der Knoteneinrichtung zu einem logischen Volume zusammengefasst. Die maximale Anzahl der Volumes variiert je nach Maschinentyp und Region. Beachten Sie, dass ein Teil der lokalen SSD-Kapazität für die Systemnutzung reserviert ist.
  • MACHINE_TYPE ist der zu verwendende Maschinentyp. Dieses Feld ist erforderlich, da lokale SSDs nicht mit dem Standardtyp e2-medium verwendet werden können.
  • CHANNEL_NAME: Eine Release-Version, die GKE-Versionen nach 1.25.3-gke.1800 enthält. Wenn Sie keine Release-Version verwenden möchten, können Sie statt --release-channel auch das Flag --cluster-version verwenden und eine gültige Version nach 1.25.3-gke.1800 angeben. Verwenden Sie den Befehl gcloud container get-server-config, um die gültigen Versionen zu ermitteln.

3. Generation

Wenn Sie einen Maschinentyp aus einer Maschinenserie der dritten Generation verwenden, müssen Sie beim Erstellen eines Clusters keine lokalen SSD-Optionen angeben. Die Anzahl der Laufwerke, die an jeden Knoten angehängt sind, hängt vom Maschinentyp ab.

Führen Sie den folgenden Befehl aus, um einen Cluster zu erstellen:

gcloud container clusters create CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --cluster-version CLUSTER_VERSION

Ersetzen Sie Folgendes:

  • CLUSTER_NAME ist der Name des Clusters.
  • MACHINE_TYPE ist der zu verwendende Maschinentyp aus einer Maschinenserie der dritten Generation.
  • CLUSTER_VERSION ist eine GKE-Clusterversion, die lokale SSDs auf Maschinentypen aus der Maschinenserie einer dritten Generation unterstützt.

Knotenpool mit lokaler SSD erstellen

1. oder 2. Generation

Führen Sie den folgenden Befehl aus, um einen Knotenpool zu erstellen, der auf GKE-Version 1.25.3-gke.1800 oder höher ausgeführt wird und lokale SSD-Volumes verwendet:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE

Ersetzen Sie Folgendes:

  • POOL_NAME ist der Name des neuen Knotenpools.
  • CLUSTER_NAME ist der Name des Clusters.
  • NUMBER_OF_DISKS ist die Anzahl der lokalen SSD-Volumes, die auf jedem Knoten bereitgestellt werden sollen. Diese Volumes werden während der Knoteneinrichtung zu einem logischen Volume zusammengefasst. Die maximale Anzahl der Volumes variiert je nach Maschinentyp und Region. Beachten Sie, dass ein Teil der lokalen SSD-Kapazität für die Systemnutzung reserviert ist.
  • MACHINE_TYPE ist der zu verwendende Maschinentyp. Dieses Feld ist erforderlich, da lokale SSDs nicht mit dem Standardtyp e2-medium verwendet werden können.

3. Generation

Wenn Sie einen Maschinentyp aus einer Maschinenserie einer dritten Generation verwenden, müssen Sie beim Erstellen eines Knotenpools keine lokalen SSD-Optionen angeben. Die Anzahl der Volumes, die an jeden Knoten angehängt sind, hängt vom Maschinentyp ab.

Führen Sie den folgenden Befehl aus, um einen Knotenpool zu erstellen:

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --node-version NODE_VERSION

Ersetzen Sie Folgendes:

  • POOL_NAME: der Name des neuen Knotenpools.
  • CLUSTER_NAME ist der Name des Clusters.
  • MACHINE_TYPE ist der zu verwendende Maschinentyp aus einer Maschinenserie der dritten Generation.
  • NODE_VERSION: Eine GKE-Knotenpoolversion, die lokale SSDs auf Maschinentypen aus der Maschinenserie einer dritten Generation unterstützt.

Knoten im Knotenpool werden mit dem Label cloud.google.com/gke-ephemeral-storage-local-ssd=true erstellt. Sie können die Berechtigungen mit dem folgenden Befehl prüfen:

kubectl describe node NODE_NAME

Sitzungsspezifischen lokalen SSD-gestützten Speicher mit Autopilot-Clustern verwenden

Sie können lokale SSDs in den folgenden Autopilot-Compute-Klassen verwenden:

  • Performance
  • Accelerator

Folgen Sie für die Klasse Performance der Anleitung zur Verwendung lokaler SSDs in Pods der Leistungsklasse.

Für die Compute-Klasse Accelerator können Sie lokale SSDs für sitzungsspezifischen Speicher verwenden, wenn Sie NVIDIA L4-GPUs verwenden und die GKE-Patchversion 1.28.6-gke.1369000 und höher oder 1.29.1-gke.1575000 und höher ausführen. NVIDIA H100-GPUs (80 GB) und NVIDIA A100-GPUs (80 GB) verwenden immer lokale SSDs für sitzungsspezifischen Speicher. Sie können den folgenden Knotenselektor für diese GPUs nicht angeben.

Wenn Sie eine lokale SSD für sitzungsspezifischen Speicher verwenden möchten, fügen Sie Ihrem Arbeitslastmanifest den nodeSelector cloud.google.com/gke-ephemeral-storage-local-ssd: "true" hinzu. Ihre Pod-Spezifikation sollte in etwa so aussehen:

apiVersion: v1
kind: Pod
metadata:
  name: l4-localssd-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      requests:
        cpu: 16
        memory: 64Gi
        ephemeral-storage: 800Gi
      limits:
       cpu: 16
       memory: 64Gi
       ephemeral-storage: 800Gi
       nvidia.com/gpu: 8
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-l4
    cloud.google.com/compute-class: Accelerator
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"

Legacy-API-Parameter verwenden

Die Option --local-ssd-count ist ein Legacy-API-Parameter, der die SCSI Local SSD unterstützt. Die Compute Engine-Maschinenserie der dritten Generation unterstützt kein SCSI und nur NVMe. Sie sollten diese Option nur mit Windows Server-Clustern verwenden. Wenn Sie derzeit den Legacy-API-Parameter für Linux-Cluster verwenden, empfehlen wir stattdessen die Verwendung der Option --ephemeral-storage-local-ssd.

Lokale SSD auf Windows Server-Clustern

Bei der Verwendung lokaler SSDs mit Ihren Clustern, auf denen Windows Server-Knotenpools ausgeführt werden, müssen Sie sich beim Knoten anmelden und das Laufwerk formatieren, bevor Sie es verwenden können. Im folgenden Beispiel wird das lokale SSD-Laufwerk mit dem NTFS-Dateisystem formatiert. Sie können auch Verzeichnisse unter dem Volume erstellen. In diesem Beispiel befinden sich die Verzeichnisse unter Laufwerk D.

PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd

Auf lokale SSD-Volumes zugreifen

Das folgende Beispiel zeigt, wie Sie auf den lokalen SSD-gestützten Speicher zugreifen können.

Flüchtiger Speicher als emptyDir-Volume

Ein GKE-Knotenpool kann für die Verwendung lokaler SSDs für sitzungsspezifischen Speicher, einschließlich emptyDir-Volumes, konfiguriert werden.

Das folgende Pod-Manifest verwendet ein emptyDir und den Knotenselektor cloud.google.com/gke-ephemeral-storage-local-ssd. Sie können eine ähnliche Technik für Deployment-Manifeste oder StatefulSet-Manifeste anwenden.

Berücksichtigen Sie bei der Auswahl der Anfrage für sitzungsspezifische Speicherressourcen die lokale SSD-Kapazität, die für die Systemnutzung reserviert ist.

apiVersion: v1
kind: Pod
metadata:
  name: POD_NAME
spec:
  containers:
    - name: CONTAINER_NAME
      image: "registry.k8s.io/pause"
      resources:
        requests:
          ephemeral-storage: "200Gi"
      volumeMounts:
        - mountPath: /cache
          name: scratch-volume
  nodeSelector:
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
  volumes:
    - name: scratch-volume
      emptyDir: {}

Fehlerbehebung

Eine Anleitung zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Speicherproblemen in GKE.

Nächste Schritte