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.
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.)
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 Volumes, die für die vom StatefulSet verwalteten Pods bereitgestellt werden, dauerhaft ändern möchten, müssen Sie das StatefulSet-Objekt mit der im Feld volumeClaimTemplates angegebenen aktualisierten Größe löschen und neu erstellen.
Beachten Sie, dass dabei die alten Pods und die zugehörigen PVCs gelöscht werden. Je nach ReclaimPolicy wird möglicherweise auch der zugrunde liegende Speicher gelöscht.
Sie können die folgenden Schritte ausführen, um die ursprünglichen Pods aktiv zu halten, während Sie das StatefulSet anpassen, um zukünftige Replikate mit der neuen Volume-Größe bereitzustellen.
Speichern Sie den vorhandenen StatefulSet in einer Datei:
Entfernen Sie das StatefulSet-Objekt aus dem Cluster und behalten Sie die Ausführung der Pods als eigenständige Pods bei:
kubectldeletestsstatefulset-name--cascade=orphan
Bearbeiten Sie die neue Volume-Speichergröße in der lokal gespeicherten sts-backup.yaml-Datei, insbesondere den Wert von spec.volumeClaimTemplates.spec.resources.requests.storage.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2024-11-21 (UTC)."],[],[],null,["# Using volume expansion\n\n[Autopilot](/kubernetes-engine/docs/concepts/autopilot-overview) [Standard](/kubernetes-engine/docs/concepts/choose-cluster-mode)\n\n*** ** * ** ***\n\nIn Google Kubernetes Engine (GKE) version 1.24 or later, you can use the Kubernetes\nvolume expansion feature to change a persistent volume's capacity after\nits creation.\n\nFor more information on volume expansion, see the open source\n[Kubernetes documentation](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims).\n\nPrerequisites\n-------------\n\nVolume expansion has the following prerequisites:\n\n- If the volume you want to resize is managed by a CSI Driver:\n - Ensure the GKE cluster version is 1.16 or later. If the cluster has Windows node pools, ensure the GKE cluster version is 1.18 or later. If you are using the managed [GKE Filestore CSI driver](/kubernetes-engine/docs/how-to/persistent-volumes/filestore-csi-driver), the cluster version must be 1.21 or later.\n - Check your storage vendor's documentation to verify your CSI driver supports volume expansion. The Compute Engine Persistent Disk CSI driver and the Filestore CSI driver support volume expansion.\n- If the volume you want to resize is managed by an in-tree volume plugin:\n - Ensure the GKE cluster version is 1.11 or greater. While GKE cluster versions 1.11-1.14 support expansion of volumes managed by in-tree plugins, they require all Pods using the volume to be terminated and recreated to complete volume expansion.\n - Check your storage vendor's documentation to verify your in-tree volume plugin supports volume expansion (the Compute Engine Persistent Disk in-tree plugin does).\n- You can't use volume expansion when using [`ReadOnlyMany` access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes).\n\nUsing volume expansion\n----------------------\n\n| **Note:** To avoid errors using volume expansion, ensure that you complete the steps in this section in the right sequence.\n\nTo use volume expansion, perform the following tasks:\n\n1. Add `allowVolumeExpansion: true` to your StorageClass, if your StorageClass\n doesn't already have the field. For example:\n\n apiVersion: storage.k8s.io/v1\n kind: StorageClass\n metadata:\n name: standard\n provisioner: my.driver\n ...\n allowVolumeExpansion: true\n\n2. Request a change in volume capacity by editing your PersistentVolumeClaim's\n `spec.resources.requests.storage` field.\n\n kubectl edit pvc \u003cvar translate=\"no\"\u003epvc-name\u003c/var\u003e\n\n For example, you could change the\n following PVC from having a 30 gibibyte (GiB) disk to having a 40 GiB disk.\n\n Before editing: \n\n # pvc-demo.yaml\n apiVersion: v1\n kind: PersistentVolumeClaim\n metadata:\n name: pvc-demo\n spec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 30Gi\n\n After editing: \n\n # pvc-demo.yaml\n apiVersion: v1\n kind: PersistentVolumeClaim\n metadata:\n name: pvc-demo\n spec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 40Gi\n\n3. Verify the change by viewing PVC. To view your PVC, run the following command:\n\n kubectl get pvc \u003cvar translate=\"no\"\u003epvc-name\u003c/var\u003e -o yaml\n\n Eventually, you should see the new volume in the `status.capacity` field.\n For example: \n\n ...\n spec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 40Gi\n storageClassName: standard\n volumeMode: Filesystem\n volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c\n status:\n accessModes:\n - ReadWriteOnce\n capacity:\n storage: 40Gi\n ...\n\n| **Note:** Don't edit the capacity of the PersistentVolume object directly. If you edit the capacity of a PersistentVolume, and then change the size of the corresponding PersistentVolumeClaim to the same value, volume expansion won't happen. Kubernetes will assume that the backing volume was manually resized, and that no expansion is required.\n\nIf the capacity of a PersistentVolume is modified directly, this could lead the\ncontainer file system to be incorrect. To fix these issues, see\n[troubleshoot volume expansion changes](/kubernetes-engine/docs/troubleshooting/troubleshooting-gke-storage#volume_expansion_changes_not_reflecting_in_the_container_filesystem).\n\nManaging volume expansions in StatefulSets\n------------------------------------------\n\nIf you need to increase the size of volumes used by Pods within a\n[StatefulSet](https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#creating-a-statefulset)\nin Kubernetes, you should adjust the `spec.resources.requests.storage` field\nof the PersistentVolumeClaims (PVCs) associated with the Pods. Attempting to\nmodify the `volumeClaimTemplates` field directly in the StatefulSet\nobject will cause an error.\n\nAdditionally, if you increase the replica count of the StatefulSet,\nit will still create PVCs of the original size. To permanently change the\nsize of the volumes provisioned for the Pods managed by the StatefulSet,\nyou must delete and recreate the StatefulSet object with the updated size\nthat's specified in the `volumeClaimTemplates` field.\n\nYou can perform the following steps in order to keep the original Pods up and\nrunning while adjusting the StatefulSet to provision future replicas with the\nnew volume size.\n\n1. Save the existing StatefulSet to a file:\n\n kubectl get StatefulSet \u003cvar translate=\"no\"\u003estatefulset-name\u003c/var\u003e -o yaml \u003e sts-backup.yaml\n\n2. For each PersistentVolumeClaim in the StatefulSet, open the\n `PersistentVolumeClaim` object in a text editor:\n\n kubectl edit pvc \u003cvar translate=\"no\"\u003ePVC_NAME\u003c/var\u003e\n\n3. Update the `spec.resources.requests.storage` field to the new volume size,\n like in the following example:\n\n apiVersion: v1\n kind: PersistentVolumeClaim\n metadata:\n # lines omitted for clarity\n spec:\n resources:\n requests:\n storage: 14Gi\n # lines omitted for clarity\n\n For details, see [Expanding Persistent Volumes Claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims).\n4. Save your edits and close the text editor. Wait for Kubernetes to update the\n PersistentVolumeClaim with your changes.\n\n5. Remove the StatefulSet object from the cluster while keeping the Pods\n running as standalone Pods:\n\n kubectl delete sts \u003cvar translate=\"no\"\u003estatefulset-name\u003c/var\u003e --cascade=orphan\n\n6. Edit the new volume storage size in the locally saved `sts-backup.yaml`\n file, specifically the value of `spec.volumeClaimTemplates.spec.resources.requests.storage`\n\n7. Recreate the StatefulSet back in the cluster:\n\n kubectl apply -f sts-backup.yaml\n\nWhat's next\n-----------\n\n- Learn more about [volumes](https://kubernetes.io/docs/concepts/storage/volumes/).\n- Learn more about [Resizing Persistent Volumes using Kubernetes](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/)."]]