在 Google Kubernetes Engine (GKE) 1.24 以上版本中,您可以使用 Kubernetes 磁碟區擴充功能,在建立永久磁碟區後變更其容量。
如要進一步瞭解磁碟區擴充功能,請參閱開放原始碼的 Kubernetes 說明文件。
必要條件
擴充磁碟區須符合下列必要條件:
- 如要調整大小的磁碟區是由 CSI 驅動程式管理:
- 請確認 GKE 叢集版本為 1.16 以上。 如果叢集有 Windows 節點集區,請確認 GKE 叢集版本為 1.18 以上。如果您使用受管理GKE Filestore CSI 驅動程式,叢集版本必須為 1.21 以上。
- 請參閱儲存空間供應商的說明文件,確認 CSI 驅動程式是否支援擴充磁碟區。Compute Engine 永久磁碟 CSI 驅動程式和 Filestore CSI 驅動程式都支援擴充磁碟區。
- 如要調整大小的磁碟區是由樹內磁碟區外掛程式管理:
- 確認 GKE 叢集版本為 1.11 以上。雖然 GKE 叢集 1.11 至 1.14 版支援擴充由樹內外掛程式管理的磁碟區,但必須終止並重新建立使用該磁碟區的所有 Pod,才能完成磁碟區擴充作業。
- 請參閱儲存空間供應商的說明文件,確認樹內磁碟區外掛程式是否支援擴充磁碟區 (Compute Engine 永久磁碟樹內外掛程式支援)。
- 使用
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 gibibyte (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 調整永久磁碟區大小。