在 Google Kubernetes Engine (GKE) 1.24 以上版本中,您可以使用 Kubernetes 磁碟區擴充功能,在建立永久磁碟區後變更其容量。
如要進一步瞭解磁碟區擴充功能,請參閱開放原始碼的 Kubernetes 說明文件。
必要條件
擴充磁碟區有下列先決條件:
- 如要調整大小的磁碟區是由 CSI 驅動程式管理:
- 確認 GKE 叢集版本為 1.16 以上。如果叢集有 Windows 節點集區,請確認 GKE 叢集版本為 1.18 以上。如果使用代管 GKE Filestore CSI 驅動程式,叢集版本必須為 1.21 以上。如果使用 Managed Lustre CSI 驅動程式,叢集版本必須為
1.35.0-gke.2331000以上。 - 請參閱儲存空間供應商的說明文件,確認 CSI 驅動程式是否支援擴充磁碟區。Compute Engine Persistent Disk CSI 驅動程式、Filestore CSI 驅動程式和 Managed Lustre CSI 驅動程式都支援擴充磁碟區。
- 確認 GKE 叢集版本為 1.16 以上。如果叢集有 Windows 節點集區,請確認 GKE 叢集版本為 1.18 以上。如果使用代管 GKE Filestore CSI 驅動程式,叢集版本必須為 1.21 以上。如果使用 Managed Lustre CSI 驅動程式,叢集版本必須為
- 如果要調整大小的磁碟區是由樹狀結構內磁碟區外掛程式管理:
- 確認 GKE 叢集版本為 1.11 以上。雖然 GKE 叢集 1.11-1.14 版支援擴充由樹狀結構內外掛程式管理的磁碟區,但必須終止並重新建立所有使用該磁碟區的 Pod,才能完成磁碟區擴充。
- 請參閱儲存空間供應商的說明文件,確認樹狀結構內磁碟區外掛程式是否支援擴充磁碟區 (Compute Engine Persistent Disk 樹狀結構內外掛程式支援)。
- 使用
ReadOnlyMany存取模式時,無法擴充磁碟區。
使用磁碟區擴充功能
如要使用磁碟區擴充功能,請執行下列工作:
如果 StorageClass 尚未包含
allowVolumeExpansion: true欄位,請將該欄位新增至 StorageClass。例如:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: true如要變更磁碟區容量,請編輯 PersistentVolumeClaim 的
spec.resources.requests.storage欄位。kubectl edit pvc pvc-name舉例來說,您可以將下列 PVC 從 30 GiB 磁碟變更為 40 GiB 磁碟。
編輯前:
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi編輯後:
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi查看 PVC,確認變更。如要查看 PVC,請執行下列指令:
kubectl get pvc pvc-name -o yaml最後,您應該會在
status.capacity欄位中看到新磁碟區。 例如:... spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi storageClassName: standard volumeMode: Filesystem volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c status: accessModes: - ReadWriteOnce capacity: storage: 40Gi ...
如果直接修改 PersistentVolume 的容量,可能會導致容器檔案系統錯誤。如要修正這些問題,請參閱「排解磁碟區擴充變更問題」。
管理 StatefulSet 中的磁碟區擴充作業
如要增加 Kubernetes 中 StatefulSet 內 Pod 使用的磁碟區大小,請調整與 Pod 相關聯的 PersistentVolumeClaim (PVC) 的 spec.resources.requests.storage 欄位。嘗試直接在 StatefulSet 物件中修改 volumeClaimTemplates 欄位會導致錯誤。
此外,如果增加 StatefulSet 的副本數量,系統仍會建立原始大小的 PVC。如要永久變更為 StatefulSet 管理的 Pod 佈建的磁碟區大小,您必須刪除 StatefulSet 物件,並使用 volumeClaimTemplates 欄位中指定的新大小重新建立。
您可以執行下列步驟,在調整 StatefulSet 時,讓原始 Pod 維持運作,以便使用新的磁碟區大小佈建未來的副本。
將現有的 StatefulSet 儲存到檔案:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml針對 StatefulSet 中的每個 PersistentVolumeClaim,在文字編輯器中開啟
PersistentVolumeClaim物件:kubectl edit pvc PVC_NAME將
spec.resources.requests.storage欄位更新為新的磁碟區大小,如下列範例所示:apiVersion: v1 kind: PersistentVolumeClaim metadata: # lines omitted for clarity spec: resources: requests: storage: 14Gi # lines omitted for clarity詳情請參閱「擴充永久磁碟區要求」。
儲存編輯內容並關閉文字編輯器。等待 Kubernetes 根據您的變更更新 PersistentVolumeClaim。
從叢集中移除 StatefulSet 物件,同時讓 Pod 以獨立 Pod 的形式繼續執行:
kubectl delete sts statefulset-name --cascade=orphan編輯本機儲存的
sts-backup.yaml檔案中的新磁碟區儲存空間大小,具體來說就是spec.volumeClaimTemplates.spec.resources.requests.storage的值在叢集中重新建立 StatefulSet:
kubectl apply -f sts-backup.yaml
後續步驟
- 進一步瞭解磁碟區。
- 進一步瞭解如何使用 Kubernetes 調整永久磁碟區大小。