本文說明如何在 Google Kubernetes Engine (GKE) 中,動態增加有狀態工作負載的 Managed Lustre 磁碟區儲存空間容量,而不影響應用程式。
舉例來說,如果長時間執行的 AI/ML 訓練工作儲存空間需求動態且無法預測,請啟用 Managed Lustre 磁碟區擴充功能,增加現有 Managed Lustre PersistentVolume (PV) 的儲存空間容量。
這份文件適用於平台管理員和營運人員、DevOps、儲存空間管理員,以及在 GKE 上管理有狀態工作負載儲存空間的機器學習 (ML) 工程師。
擴充磁碟區後,費用會根據新的較大容量增加,詳情請參閱標準的 Cloud de Confiance by S3NS Managed Lustre 定價。
事前準備
準備環境。
需求條件
請確認符合下列規定:
- 您必須使用 GKE 叢集 1.35.0-gke.2331000 以上版本。
- 您必須在現有叢集上啟用 Managed Lustre CSI 驅動程式。在 Standard 和 Autopilot 叢集中,驅動程式預設為停用。
限制
- 您只能增加現有磁碟區的大小,無法縮減。
ReadOnlyMany存取模式無法使用磁碟區擴充功能。- 調整 Lustre 磁碟區大小時,請遵守磁碟區效能層級設定的容量下限和上限,以及步階大小。詳情請參閱「效能考量」。
- 以 1000 的倍數指定 Lustre 磁碟區大小 (以 GiB 為單位)。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 名稱。輸出結果大致如下。請注意
VOLUME欄中的 PV 名稱,例如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 磁碟區時可能遇到的常見問題。
擴展作業失敗,並顯示「Invalid Argument」錯誤
症狀
- 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狀態 (擴充作業較小時超過 30 分鐘,擴充作業較大時超過 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指令時,Managed Lustre 後端的事件訊息會指出配額或容量問題。
原因
要求的有效擴充作業無法完成,因為這項作業會超出專案或區域中 Managed Lustre 服務的整體容量或可用配額。
解決方法
- 再次編輯 PVC,並要求增加較小的儲存空間。
- 請與貴機構的 Cloud de Confiance by S3NS 管理員聯絡,要求提高專案的整體 Lustre 服務配額或容量。
清除所用資源
如要避免系統向您的 Cloud de Confiance by S3NS 帳戶收取本文件所用資源的費用,請刪除 PVC。如果 reclaimPolicy 設為 Delete,這項作業也會刪除相關聯的 PV 和底層的 Managed Lustre 執行個體。
kubectl delete pvc PVC_NAME
將 PVC_NAME 替換為 PVC 名稱。
後續步驟
- 進一步瞭解 GKE 叢集儲存空間。
- 請參閱 GKE 永久磁碟區和佈建的說明文件。