Volume-Erweiterung verwenden

In der Google Kubernetes Engine (GKE) Version 1.24 oder höher können Sie mit dem Volume-Feature von Kubernetes die Kapazität eines nichtflüchtigen Volumes nach dessen Erstellung ändern.

Weitere Informationen zur Volume-Erweiterung finden Sie in der Open-Source-Dokumentation zu Kubernetes.

Vorbereitung

Für die Volume-Erweiterung gelten die folgenden Voraussetzungen:

  • Wenn das Volume, dessen Größe Sie anpassen möchten, von einem CSI-Treiber verwaltet wird:
    • Achten Sie darauf, dass die GKE-Clusterversion 1.16 oder höher ist. Wenn der Cluster Windows-Knotenpools hat, muss die GKE-Clusterversion 1.18 oder höher sein. Wenn Sie den verwalteten GKE Filestore-CSI-Treiber verwenden, muss die Clusterversion 1.21 oder höher sein.
    • Prüfen Sie in der Dokumentation Ihres Speicheranbieters, ob Ihr CSI-Treiber die Volume-Erweiterung unterstützt. Der Compute Engine Persistent Disk-CSI-Treiber und der Filestore-CSI-Treiber unterstützen die Volume-Erweiterung.
  • Wenn das Volume, dessen Größe Sie anpassen möchten, von einem integrierten Volume-Plug-in verwaltet wird:
    • Achten Sie darauf, dass die GKE-Clusterversion 1.11 oder höher ist. Die GKE-Clusterversionen 1.11–1.14 unterstützen zwar die Erweiterung von Volumes, die von integrierten Plug-ins verwaltet werden, erfordern jedoch, dass alle Pods, die das Volume verwenden, beendet und neu erstellt werden, um die Volume-Erweiterung abzuschließen.
    • Lesen Sie in der Dokumentation Ihres Speicheranbieters nach, ob Ihr integriertes Volume-Plug-in die Volume-Erweiterung unterstützt. (Das integrierte Volume-Plug-in für Compute Engine Persistent Disk tut dies.)
  • Die Lautstärkeerweiterung kann nicht verwendet werden, wenn der ReadOnlyMany-Zugriffsmodus verwendet wird.

Volume-Erweiterung verwenden

Führen Sie folgende Schritte aus, um die Volume-Erweiterung zu verwenden:

  1. Fügen Sie Ihrer StorageClass allowVolumeExpansion: true hinzu, wenn Ihre StorageClass das Feld noch nicht enthält. Beispiel:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. Fordern Sie eine Änderung der Volumenkapazität an, indem Sie das Feld spec.resources.requests.storage Ihres PersistentVolumeClaim bearbeiten.

     kubectl edit pvc pvc-name
    

    Sie können beispielsweise den folgenden PVC so ändern, dass sein Speicher von 30 Gibibyte (GiB) auf 40 GiB vergrößert wird.

    Vor der Bearbeitung:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    Nach der Bearbeitung:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. Prüfen Sie die Änderung durch Aufrufen des PVC. Führen Sie den folgenden Befehl aus, um den PVC aufzurufen:

    kubectl get pvc pvc-name -o yaml
    

    Schließlich sollte das neue Volume im Feld status.capacity angezeigt werden. Beispiele:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

Wenn die Kapazität eines PersistentVolume direkt geändert wird, kann dies dazu führen, dass das Containerdateisystem falsch ist. Informationen zur Behebung dieser Probleme finden Sie unter Fehlerbehebung bei Änderungen an der Volume-Erweiterung.

Volume-Erweiterungen in StatefulSets verwalten

Wenn Sie die Größe der Volumes erhöhen müssen, die von Pods in einem StatefulSet in Kubernetes verwendet werden, sollten Sie das Feld spec.resources.requests.storage der den Pods zugeordneten PersistentVolumeClaims (PVCs) anpassen. Der Versuch, das Feld volumeClaimTemplates direkt im StatefulSet-Objekt zu ändern, führt zu einem Fehler.

Wenn Sie die Anzahl der Replikate des StatefulSet erhöhen, werden weiterhin PVCs der ursprünglichen Größe erstellt. Wenn Sie die Größe der für die von StatefulSet verwalteten Pods bereitgestellten Volumes dauerhaft ändern möchten, müssen Sie das StatefulSet-Objekt löschen und mit der aktualisierten Größe neu erstellen, die im Feld volumeClaimTemplates angegeben ist.

Sie können die folgenden Schritte ausführen, um die ursprünglichen Pods am Laufen zu halten und gleichzeitig das StatefulSet so anzupassen, dass zukünftige Replikate mit der neuen Volumegröße bereitgestellt werden.

  1. Speichern Sie das vorhandene StatefulSet in einer Datei:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Öffnen Sie für jeden PersistentVolumeClaim im StatefulSet das PersistentVolumeClaim-Objekt in einem Texteditor:

    kubectl edit pvc PVC_NAME
    
  3. Aktualisieren Sie das Feld spec.resources.requests.storage auf die neue Volume-Größe, wie im folgenden Beispiel:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    # lines omitted for clarity
    spec:
      resources:
        requests:
          storage: 14Gi
    # lines omitted for clarity
    

    Weitere Informationen finden Sie unter Ansprüche auf nichtflüchtige Volumes erweitern.

  4. Speichern Sie die Änderungen und schließen Sie den Texteditor. Warten Sie, bis Kubernetes den PersistentVolumeClaim mit Ihren Änderungen aktualisiert hat.

  5. Entfernen Sie das StatefulSet-Objekt aus dem Cluster, während die Pods als eigenständige Pods ausgeführt werden:

    kubectl delete sts statefulset-name --cascade=orphan
    
  6. Bearbeiten Sie die Speichergröße des neuen Volumes in der lokal gespeicherten Datei sts-backup.yaml, insbesondere den Wert von spec.volumeClaimTemplates.spec.resources.requests.storage.

  7. Erstellen Sie das StatefulSet im Cluster neu:

    kubectl apply -f sts-backup.yaml
    

Nächste Schritte