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.)
- Im
ReadOnlyMany
-Zugriffsmodus können Sie die Volume-Erweiterung nicht verwenden.
Volume-Erweiterung verwenden
Führen Sie folgende Schritte aus, um die Volume-Erweiterung zu verwenden:
Fügen Sie Ihrer StorageClass
allowVolumeExpansion: true
hinzu, wenn Ihre StorageClass das Feld noch nicht enthält. Beispiele:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: true
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
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 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:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
Entfernen Sie das StatefulSet-Objekt aus dem Cluster und behalten Sie die Ausführung der Pods als eigenständige Pods bei:
kubectl delete sts statefulset-name --cascade=orphan
Bearbeiten Sie die neue Volume-Speichergröße in der lokal gespeicherten
sts-backup.yaml
-Datei, insbesondere den Wert vonspec.volumeClaimTemplates.spec.resources.requests.storage
.Erstellen Sie das StatefulSet wieder im Cluster:
kubectl apply -f sts-backup.yaml
Nächste Schritte
- Weitere Informationen zu Volumes
- Größe nichtflüchtiger Volumes mit Kubernetes anpassen