Managed Lustre-Speicher in GKE skalieren

In diesem Dokument wird beschrieben, wie Sie die Speicherkapazität von Managed Lustre-Volumes für Ihre zustandsorientierten Arbeitslasten in Google Kubernetes Engine (GKE) dynamisch erhöhen können, ohne Ihre Anwendungen zu unterbrechen.

Wenn beispielsweise für Ihre lang andauernden KI/ML-Trainingsjobs dynamische und unvorhersehbare Speicheranforderungen bestehen, aktivieren Sie die Managed Lustre-Volume-Erweiterung, um die Speicherkapazität Ihres vorhandenen nichtflüchtigen Managed Lustre-Volumes (PersistentVolume, PV) zu erhöhen.

Dieses Dokument richtet sich an Plattformadministratoren und ‑operatoren, DevOps-Experten, Speicheradministratoren und ML-Entwickler (Machine Learning), die den Speicher für zustandsorientierte Arbeitslasten in GKE verwalten.

Wenn Sie ein Volume erweitern, erhöhen sich Ihre Kosten entsprechend der neuen, größeren Kapazität gemäß der Standard-Cloud de Confiance by S3NS Managed Lustre-Preisgestaltung.

Hinweis

Bereiten Sie Ihre Umgebung vor.

Voraussetzungen

Sie müssen die folgenden Anforderungen erfüllen:

  • Sie benötigen einen GKE-Cluster der Version 1.35.0-gke.2331000 oder höher.
  • Sie müssen den Managed Lustre-CSI-Treiber auf einem vorhandenen Cluster aktivieren. Der Treiber ist in Standard- und Autopilot-Clustern standardmäßig deaktiviert.

Beschränkungen

  • Sie können die Größe eines vorhandenen Volumes nur erhöhen, aber nicht verringern.
  • Sie können die Volume-Erweiterung nicht mit dem Zugriffsmodus ReadOnlyMany verwenden.
  • Wenn Sie die Größe von Lustre-Volumes ändern, müssen Sie die von der Leistungsstufe Ihres Volumes festgelegten Mindest- und Höchstgrenzen für die Kapazität sowie die Schrittgrößen einhalten. Weitere Informationen finden Sie unter Überlegungen zur Leistung.
  • Geben Sie die Größen von Lustre-Volumes in GiB als Vielfache von 1.000 an. Kubernetes wandelt Einheiten wie Ti in Binärwerte um (z. B. werden 18 Ti als 18.432 GiB interpretiert), was dazu führt, dass die Lustre API die Anfrage ablehnt.

Volume-Erweiterung für eine StorageClass aktivieren

  1. Prüfen Sie, ob Ihre StorageClass die Volume-Erweiterung unterstützt:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    Ersetzen Sie STORAGECLASS_NAME durch den Namen Ihrer StorageClass.

    Wenn der Befehl keine Ausgabe erzeugt oder false zurückgibt, müssen Sie die StorageClass-Konfiguration explizit aktualisieren, um die Erweiterung zuzulassen.

  2. Öffnen Sie die StorageClass-Konfiguration zur Bearbeitung:

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. Fügen Sie im Editor das Feld allowVolumeExpansion: true zu Ihrer StorageClass-Konfiguration hinzu:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-sc
    provisioner: lustre.csi.storage.gke.io
    ...
    allowVolumeExpansion: true

PersistentVolumeClaim erweitern

Wenn Sie die Volume-Erweiterung starten möchten, bearbeiten Sie Ihren PersistentVolumeClaim (PVC), um eine Erhöhung der Volume-Größe anzufordern.

  1. Ermitteln Sie die neue, gültige Größe für die Erweiterung, wie unter Gültige Erweiterungsgrößen ermitteln beschrieben.
  2. Öffnen Sie die PVC-Konfiguration zur Bearbeitung:

    kubectl edit pvc PVC_NAME
    

    Ersetzen Sie PVC_NAME durch den Namen Ihres PVC.

  3. Aktualisieren Sie im Editor das Feld spec.resources.requests.storage mit der gültigen Erweiterungsgröße. Wenn Sie beispielsweise ein Volume von 9000Gi auf 18000Gi erweitern möchten, ändern Sie das Feld storage so:

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

Volume-Erweiterung prüfen

  1. Überwachen Sie den Fortschritt der Erweiterung, indem Sie die Ereignisse des PVC prüfen:

    kubectl describe pvc PVC_NAME
    

    Die folgenden Ereignisse in der Ausgabe des PVK geben den aktuellen Fortschritt oder das Ergebnis der Volume-Erweiterungsanfrage an:

    • ExternalExpanding: Gibt an, dass Kubernetes darauf wartet, dass external-resizer den PVC erweitert.
    • Resizing: Gibt an, dass der Vorgang zur Größenänderung ausgeführt wird. Bei größeren Kapazitätserhöhungen kann dieser Vorgang bis zu 90 Minuten dauern.
    • VolumeResizeSuccessful: Bestätigt, dass das Volume erfolgreich erweitert wurde.
    • VolumeResizeFailed: Gibt an, dass ein Fehler aufgetreten ist. Die Ereignisnachricht enthält Details aus der Google Cloud Managed Lustre API. Dieser Status kann vorübergehend sein und sich von selbst beheben.
  2. Prüfen Sie nach Abschluss der Erweiterung die aktualisierte Konfiguration des PVC:

    kubectl get pvc PVC_NAME -o yaml
    
  3. Prüfen Sie, ob das Feld status.capacity die neue, erhöhte Größe widerspiegelt.

Wenn während des Erweiterungsvorgangs Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung.

Gültige Erweiterungsgrößen ermitteln

Um die neue Volume-Größe zu ermitteln, müssen Sie zuerst die Leistungsstufe Ihres Volumes und die entsprechende Schrittgröße ermitteln.

Leistungsstufe des Volumes ermitteln

Sie können die Leistungsstufe Ihres Volumes mit einer der folgenden Optionen ermitteln:

StorageClass

Führen Sie den folgenden Befehl aus und suchen Sie nach dem Wert perUnitStorageThroughput (z. B. 1000). Dieser Wert gibt die Leistungsstufe in MB/s pro TiB an.

kubectl get sc STORAGECLASS_NAME -o yaml

Ersetzen Sie STORAGECLASS_NAME durch den Namen Ihrer StorageClass.

Lustre-Instanz

Ermitteln Sie die Leistungsstufe Ihres Volumes, indem Sie die Eigenschaften der zugrunde liegenden Managed Lustre-Instanz direkt prüfen:

  1. Suchen Sie den Namen des PV, der an Ihren PVC gebunden ist:

    kubectl get pvc PVC_NAME
    

    Ersetzen Sie PVC_NAME durch den Namen Ihres PVC.

    Die entsprechende Ausgabe sieht etwa so aus: Notieren Sie den PV -Namen in der Spalte VOLUME, z. B. pv-lustre.

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-lustre   Bound    pv-lustre   9000Gi     RWX            lustre-rwx     <unset>                 26m
    
  2. Suchen Sie den Standort und den Instanznamen des Volumes im Feld volumeHandle:

    kubectl get pv PV_NAME -o yaml
    

    Ersetzen Sie PV_NAME durch den PV-Namen aus dem vorherigen Schritt.

    Der Wert volumeHandle ist im Format PROJECT_ID/LOCATION/INSTANCE_NAME formatiert. Notieren Sie sich INSTANCE_NAME und LOCATION für den nächsten Schritt.

  3. Prüfen Sie die Eigenschaften der Leistungsstufe, indem Sie die Managed Lustre-Instanz beschreiben:

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    Ersetzen Sie INSTANCE_NAME und LOCATION durch die Werte aus dem vorherigen Schritt.

    Suchen Sie in der Ausgabe nach dem Feld perUnitStorageThroughput. Dieser Wert gibt die Leistungsstufe in MB/s pro TiB an.

Kapazitätslimits und Schrittgrößen

Nachdem Sie die Leistungsstufe ermittelt haben, finden Sie in der folgenden Tabelle die zugehörigen Kapazitätslimits und die erforderliche Schrittgröße.

Stufe (perUnitStorageThroughput) Minimale Kapazität Maximale Kapazität Schrittgröße
1.000 MB/s pro TiB 9.000 GiB 954.000 GiB (~1 PiB) 9.000 GiB
500 MB/s pro TiB 18.000 GiB 1.908.000 GiB (~2 PiB) 18.000 GiB
250 MB/s pro TiB 36.000 GiB 3.816.000 GiB (~4 PiB) 36.000 GiB
125 MB/s pro TiB 72.000 GiB 7.632.000 GiB (~8 PiB) 72.000 GiB

Volumes müssen entsprechend der Schrittgröße erhöht werden, die ihrer Stufe zugewiesen ist. Jede Erhöhung der Kapazität muss ein Vielfaches dieser Schrittgröße sein. Wenn Ihr Volume der Stufe 1.000 MB/s beispielsweise eine Kapazität von 9.000 GiB hat, können Sie es auf 18.000 GiB, 27.000 GiB und andere Vielfache erhöhen.

Fehlerbehebung

In diesem Abschnitt finden Sie Lösungen für häufige Probleme, die beim Erweitern von Lustre-Volumes auftreten können.

Erweiterung schlägt mit dem Fehler „Invalid Argument“ fehl

Symptom

  • Der PVC wechselt in den Status Resizing, schlägt dann aber fehl.
  • Wenn Sie den Befehl kubectl describe pvc PVC_NAME ausführen, wird ein Fehler ähnlich dem folgenden angezeigt: VolumeResizeFailed: rpc error: code = InvalidArgument desc = ....

Ursache

Dieser Fehler bedeutet in der Regel, dass die angeforderte Speichergröße aus einem der folgenden Gründe für die Leistungsstufe des Lustre-Volumes ungültig ist:

  • Die angeforderte Größe ist kein Vielfaches der erforderlichen Schrittgröße für die Stufe.
  • Die angeforderte Größe liegt unter der Mindest- oder über der Höchstkapazität für die Stufe.

Lösung

  1. Unter Kapazitätslimits und Schrittgrößen finden Sie die gültigen Schrittgrößen und Kapazitätslimits für die Leistungsstufe Ihres Volumes.
  2. Bearbeiten Sie den PVC noch einmal, um eine gültige Speichergröße anzufordern, die die Schrittgröße und die Kapazitätslimits erfüllt.

Erweiterung schlägt mit dem Fehler „Internal Error“ fehl

Symptom

  • Die Größenänderung des PVC schlägt fehl.
  • Wenn Sie den Befehl kubectl describe pvc PVC_NAME ausführen, wird möglicherweise ein Ereignis VolumeResizeFailed mit einer Fehlermeldung angezeigt, die code = Internal enthält.

Ursache

Dieser Fehler weist auf ein Problem mit dem zugrunde liegenden Managed Lustre-Dienst hin.

Lösung

  1. Wiederholen Sie die Erweiterung, indem Sie das PVC-Manifest noch einmal mit der neuen, angeforderten Größe anwenden. Dadurch können vorübergehende Backend-Probleme behoben werden.
  2. Wenn der Wiederholungsversuch fehlschlägt, wenden Sie sich an Cloud Customer Care.

Erweiterung bleibt im Status „Resizing“ hängen

Symptom

  • Der PVC bleibt für längere Zeit im Status Resizing (mehr als 30 Minuten bei kleineren Erweiterungen oder mehr als 90 Minuten bei größeren Erweiterungen).
  • Möglicherweise wird ein VolumeResizeFailed-Ereignis mit der Fehlermeldung DEADLINE_EXCEEDED angezeigt.

Ursache

Dieses Problem kann bei großen Kapazitätserhöhungen auftreten, die bis zu 90 Minuten dauern können. Für die Komponente csi-external-resizer kann es zu einem Zeitüberschreitungsfehler kommen, während sie auf eine Antwort von der Google Cloud Managed Lustre API wartet, obwohl der zugrunde liegende Erweiterungsvorgang noch läuft.

Lösung

  • Die Komponente csi-external-resizer wiederholt den Vorgang nach einer Backoff-Zeit automatisch. Behalten Sie die PVC-Ereignisse im Blick, um nach einem VolumeResizeSuccessful-Ereignis zu suchen.
  • Wenn der PVC länger als 90 Minuten im Status Resizing bleibt, wenden Sie sich an Cloud Customer Care.

Erweiterung wird nicht gestartet oder bleibt im Status „ExternalExpanding“ hängen

Symptom

  • Sie aktualisieren das Feld spec.resources.requests.storage in Ihrem PVC, aber der PVC-Status ändert sich nicht in Resizing.
  • Wenn Sie den Befehl kubectl describe pvc PVC_NAME ausführen, wird im Ereignislog nur der Status ExternalExpanding angezeigt und es wird nicht zum Status Resizing übergegangen:
Events:
  Type    Reason             Age                From             Message
  ----    ------             ----               ----             -------
  Normal  ExternalExpanding  21m (x2 over 58m)  volume_expand    waiting for an external controller to expand this PVC

Ursache

Dieses Verhalten weist in der Regel auf eines der folgenden Probleme hin:

  • Die mit dem PVC verknüpfte StorageClass lässt keine Volume-Erweiterung zu.
  • Es gibt ein Problem mit dem Sidecar-Container csi-external-resizer, der für das Starten der Erweiterung zuständig ist.

Lösung

  1. Prüfen Sie die StorageClass-Konfiguration und vergewissern Sie sich, dass das Feld allowVolumeExpansion: true festgelegt ist:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. Wenn allowVolumeExpansion fehlt oder auf false festgelegt ist, aktualisieren Sie die StorageClass, um die Volume-Erweiterung zuzulassen.

  3. Wenn die StorageClass korrekt konfiguriert ist, liegt das Problem wahrscheinlich bei den GKE-Steuerungsebenenkomponenten, die den Vorgang zur Größenänderung verwalten. Wenden Sie sich an Cloud Customer Care.

Erweiterung schlägt aufgrund eines Kontingent- oder Kapazitätsproblems fehl

Symptom

  • Die Größenänderung des PVC schlägt fehl und im PVC wird ein VolumeResizeFailed-Ereignis angezeigt.
  • Wenn Sie den kubectl describe pvc PVC_NAME Befehl ausführen, weist die Ereignisnachricht vom Managed Lustre-Backend auf ein Kontingent- oder Kapazitätsproblem hin.

Ursache

Die angeforderte gültige Erweiterung kann nicht ausgeführt werden, da sie die Gesamtkapazität oder das Gesamtkontingent überschreitet, die für den Managed Lustre-Dienst in Ihrem Projekt oder Ihrer Region verfügbar sind.

Lösung

  • Bearbeiten Sie den PVC noch einmal und fordern Sie eine geringere Speichererhöhung an.
  • Wenden Sie sich an den Administrator Ihrer Organisation Cloud de Confiance by S3NS , um eine Erhöhung der Gesamtkontingente oder der Gesamtkapazität des Lustre-Dienstes für Ihr Projekt anzufordern.

Bereinigen

Löschen Sie den PVC, damit Ihnen die in diesem Dokument verwendeten Ressourcen nicht in Rechnung gestellt werden, um Gebühren für Ihr Cloud de Confiance by S3NS Konto zu vermeiden. Bei diesem Vorgang werden auch der zugehörige PV und die zugrunde liegende Managed Lustre-Instanz gelöscht, wenn reclaimPolicy auf Delete festgelegt ist.

kubectl delete pvc PVC_NAME

Ersetzen Sie PVC_NAME durch den Namen Ihres PVC.

Nächste Schritte