本文說明如何在 Google Kubernetes Engine (GKE) 中,動態增加有狀態工作負載的 Managed Lustre 磁碟區儲存空間容量,且不會中斷應用程式。
舉例來說,如果長時間執行的 AI/ML 訓練工作有動態且無法預測的儲存空間需求,請啟用 Managed Lustre 磁碟區擴充功能,增加現有 Managed Lustre PersistentVolume (PV) 的儲存空間容量。
本文適用於平台管理員和作業人員、DevOps、儲存空間管理員,以及管理 GKE 上有狀態工作負載儲存空間的機器學習 (ML) 工程師。
擴充磁碟區後,系統會根據新的較大容量,按照標準的 Google Cloud Managed Lustre 定價收取費用。
事前準備
準備環境。
需求條件
請確認你符合下列規定:
- 您必須使用 GKE 叢集 1.35.0-gke.2331000 以上版本。
- 您必須在現有叢集上啟用 Managed Lustre CSI 驅動程式。在 Standard 和 Autopilot 叢集中,驅動程式預設為停用。
限制
- 您只能增加現有磁碟區的大小,無法縮減大小。
- 您無法在
ReadOnlyMany存取模式下使用磁碟區擴充功能。 - 調整 Lustre 磁碟區大小時,請遵守磁碟區效能層級設定的容量下限、上限和步長。詳情請參閱「效能注意事項」。
- 以 GiB 為單位指定 Lustre 磁碟區大小,且必須是 1000 的倍數。Kubernetes 會將 Ti 等單位轉換為二進位值 (例如 18 Ti 會解讀為 18,432 GiB),導致 Lustre API 拒絕要求。
為 StorageClass 啟用磁碟區擴充功能
確認 StorageClass 是否支援擴充磁碟區:
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'將
STORAGECLASS_NAME替換為 StorageClass 名稱。如果指令未輸出任何內容或傳回
false,您必須明確更新 StorageClass 設定,才能允許擴充。開啟 StorageClass 設定進行編輯:
kubectl edit storageclass STORAGECLASS_NAME在編輯器中,將
allowVolumeExpansion: true欄位新增至 StorageClass 設定:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-sc provisioner: lustre.csi.storage.gke.io ... allowVolumeExpansion: true
擴充 PersistentVolumeClaim
如要啟動磁碟區擴充作業,請編輯 PersistentVolumeClaim (PVC),要求增加磁碟區大小。
- 如要找出新的有效擴充大小,請參閱「判斷有效的擴充大小」。
開啟 PVC 設定進行編輯:
kubectl edit pvc PVC_NAME將
PVC_NAME替換為 PVC 名稱。在編輯器中,使用有效的擴展大小更新
spec.resources.requests.storage欄位。舉例來說,如要將磁碟區從9000Gi擴充至18000Gi,請如下修改storage欄位:spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
確認磁碟區擴充作業
查看 PVC 的事件,監控擴充進度:
kubectl describe pvc PVC_NAMEPVC 輸出內容中的下列事件會指出磁碟區擴充要求的目前進度或結果:
ExternalExpanding:表示 Kubernetes 等待external-resizer擴充 PVC。Resizing:表示正在進行大小調整作業。如果容量增加幅度較大,這項作業最多可能需要 90 分鐘。VolumeResizeSuccessful:確認磁碟區已成功擴充。VolumeResizeFailed:表示發生錯誤。事件訊息包含 Google Cloud Managed Lustre API 的詳細資料。這個狀態可能是暫時性的,可能會自行解決。
擴充作業完成後,請驗證 PVC 的更新設定:
kubectl get pvc PVC_NAME -o yaml確認
status.capacity欄位反映了新的遞增大小。
如果在擴充過程中遇到任何問題,請參閱「疑難排解」一節。
判斷有效的擴展大小
如要判斷新的磁碟區大小,請先找出磁碟區的效能層級和對應的步階大小。
找出磁碟區的效能層級
您可以透過下列任一選項,查看磁碟區的效能層級:
StorageClass
執行下列指令,並尋找 perUnitStorageThroughput 值 (例如 1000)。這個值表示每 TiB 的 MBps 效能層級。
kubectl get sc STORAGECLASS_NAME -o yaml
將 STORAGECLASS_NAME 替換為 StorageClass 名稱。
Lustre 執行個體
直接檢查基礎 Managed Lustre 執行個體的屬性,找出磁碟區的效能層級:
找出繫結至 PVC 的 PV 名稱:
kubectl get pvc PVC_NAME將
PVC_NAME替換為 PVC 名稱。輸出結果大致如下。請注意「PV」名稱位於
VOLUME欄中,例如pv-lustre。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-lustre Bound pv-lustre 9000Gi RWX lustre-rwx <unset> 26m在
volumeHandle欄位中找出磁碟區位置和執行個體名稱:kubectl get pv PV_NAME -o yaml將
PV_NAME替換為上一步的 PV 名稱。volumeHandle值的格式為PROJECT_ID/LOCATION/INSTANCE_NAME。請記下INSTANCE_NAME和LOCATION,以供下一個步驟使用。說明 Managed Lustre 執行個體,即可查看效能層級屬性:
gcloud lustre instances describe INSTANCE_NAME --location=LOCATION將
INSTANCE_NAME和LOCATION替換為上一步中的值。在輸出中,找出
perUnitStorageThroughput欄位。這個值表示每 TiB 的效能層級 (以 MBps 為單位)。
容量限制和步長
找出效能層級後,請參閱下表,瞭解相關的容量限制和必要步長。
層級 (perUnitStorageThroughput) |
容量下限 | 數量上限 | 間距大小 |
|---|---|---|---|
| 每 TiB 1,000 MB/秒 | 9,000 GiB | 954,000 GiB (約 1 PiB) | 9,000 GiB |
| 每 TiB 500 MB/秒 | 18,000 GiB | 1,908,000 GiB (約 2 PiB) | 18,000 GiB |
| 每 TiB 250 MB/秒 | 36,000 GiB | 3,816,000 GiB (約 4 PiB) | 36,000 GiB |
| 每 TiB 125 MB/秒 | 72,000 GiB | 7,632,000 GiB (約 8 PiB) | 72,000 GiB |
磁碟區必須按照指派給層級的步階大小增加。容量增幅必須是該特定步幅大小的倍數。 舉例來說,如果 1,000 MBps 層級的磁碟區容量為 9,000 GiB,您可以將容量增加至 18,000 GiB、27,000 GiB 和其他倍數。
疑難排解
本節提供擴充 Lustre 磁碟區時可能遇到的常見問題解決方案。
擴充作業失敗,並顯示「引數無效」錯誤
症狀
- PVC 進入
Resizing狀態,但隨後失敗。 - 執行
kubectl describe pvc PVC_NAME指令時,系統會顯示類似VolumeResizeFailed: rpc error: code = InvalidArgument desc = ...的錯誤。
原因
這項錯誤通常表示要求的儲存空間大小不適用於 Lustre 磁碟區的效能層級,原因如下:
- 要求的尺寸不是層級所需步長的倍數。
- 要求的容量低於最低容量,或高於層級的最高容量。
解決方法
- 請參閱「容量限制和步長」,瞭解磁碟區效能層級的有效步長和容量限制。
- 再次編輯 PVC,要求符合步長和容量限制的有效儲存空間大小。
擴展作業失敗,並顯示「內部錯誤」
症狀
- PVC 大小調整失敗。
- 執行
kubectl describe pvc PVC_NAME指令時,您可能會看到VolumeResizeFailed事件,以及含有code = Internal的錯誤訊息。
原因
這項錯誤表示基礎的 Managed Lustre 服務發生問題。
解決方法
- 再次套用 PVC 資訊清單,並指定新的要求大小,即可重新嘗試擴充。這或許能解決暫時性的後端問題。
- 如果重試失敗,請與 Cloud Customer Care 團隊聯絡。
擴充作業卡在「正在調整大小」狀態
症狀
- PVC 長時間處於
Resizing狀態 (擴充較小的 PVC 超過 30 分鐘,擴充較大的 PVC 超過 90 分鐘)。 - 您可能會看到
VolumeResizeFailed事件,並顯示DEADLINE_EXCEEDED錯誤訊息。
原因
如果容量大幅增加,就可能發生這個問題,最多可能需要 90 分鐘才能完成。即使基礎擴充作業仍在進行中,csi-external-resizer 元件也可能會在等待 Google Cloud Managed Lustre API 回應時逾時。
解決方法
csi-external-resizer會在退避期間過後自動重試作業。繼續監控VolumeResizeSuccessful事件的 PVC 事件。- 如果 PVC 處於
Resizing狀態超過 90 分鐘,請與 Cloud Customer Care 團隊聯絡。
擴充作業未開始,或卡在 ExternalExpanding 狀態
症狀
- 您更新 PVC 中的
spec.resources.requests.storage欄位,但 PVC 狀態未變更為Resizing。 - 執行
kubectl describe pvc PVC_NAME指令時,事件記錄只會顯示ExternalExpanding狀態,不會進展到Resizing狀態:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalExpanding 21m (x2 over 58m) volume_expand waiting for an external controller to expand this PVC
原因
這通常表示發生下列其中一個問題:
- 與 PVC 相關聯的 StorageClass 不允許擴充磁碟區。
csi-external-resizer側車容器發生問題,這個元件負責啟動擴充作業。
解決方法
檢查 StorageClass 設定,並確認已設定
allowVolumeExpansion: true欄位:kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'如果缺少
allowVolumeExpansion或設為false,請更新 StorageClass,允許擴充磁碟區。如果 StorageClass 設定正確,問題可能出在管理大小調整作業的 GKE 控制層元件。如需協助,請與 Cloud Customer Care 團隊聯絡。
因配額或容量問題而無法擴充
症狀
- PVC 大小調整失敗,且 PVC 上會顯示
VolumeResizeFailed事件。 - 執行
kubectl describe pvc PVC_NAME指令時,受管理 Lustre 後端的事件訊息會指出配額或容量問題。
原因
要求的有效擴充作業超出專案或區域中 Managed Lustre 服務的整體容量或可用配額,因此無法完成。
解決方法
- 再次編輯 PVC,並要求增加較少的儲存空間。
- 請與貴機構的 Google Cloud 管理員聯絡,要求提高專案的整體 Lustre 服務配額或容量。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本文件所用資源的費用,請刪除 PVC。如果 reclaimPolicy 設為 Delete,這項作業也會刪除相關聯的 PV 和底層的 Managed Lustre 執行個體。
kubectl delete pvc PVC_NAME
將 PVC_NAME 替換為 PVC 名稱。
後續步驟
- 進一步瞭解 GKE 叢集的儲存空間。
- 請參閱 GKE 永久磁碟區和佈建的說明文件。