本指南說明如何使用 GKE Volume Populator,在動態佈建期間,從 Cloud Storage bucket 將大量資料預先載入 Google Kubernetes Engine (GKE) Hyperdisk ML 磁碟區。詳情請參閱「關於 GKE Volume Populator」。
本指南適用於儲存空間專家,可協助他們建立及分配儲存空間,並管理資料安全和存取權。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
使用 Hyperdisk ML 的 GKE Volume Populator 節點集區管理
有效調整節點集區大小、佈建及調度資源,是順利執行 GKE Volume Populator 建立的資料轉移作業,以填入 Hyperdisk ML 磁碟區的關鍵。您可以使用運算類別,為這些特定資料移轉工作定義節點需求,例如機器類型和大小。您可以透過運算類別控管資料傳輸程序的成本和效能。詳情請參閱「自訂運算類別的優點」。
如要選擇最適合資料傳輸作業的叢集,請瞭解運算類別如何搭配不同叢集類型使用 Hyperdisk ML。
目標
在本指南中,您會執行下列工作:
- 設定 GKE 叢集環境,支援使用 GKE Volume Populator 進行資料轉移,包括建立叢集、定義運算類別,以及設定權限。
- 建立
GCPDataSource
自訂資源,指定來源 Cloud Storage bucket。 - 為 Hyperdisk ML 定義
StorageClass
。 - 建立參照
GCPDataSource
的PersistentVolumeClaim
,觸發資料填入 Hyperdisk ML 磁碟區。 - 驗證資料轉移。
- 在 Pod 中使用已填入資料的磁碟區。
- 清除資源。
事前準備
請確認您已完成下列工作:
啟用 GKE 和 Cloud Storage API。
請確認您已為Google Cloud 專案啟用計費功能。
下載並安裝 Google Cloud CLI 指令列工具,或使用 Cloud Shell 執行
gcloud CLI
和kubectl
指令。Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。並預先安裝 gcloud 和 kubectl 指令列工具。建立或使用現有的 Cloud Storage bucket。本指南假設您已在 Cloud Storage 值區中填入模型訓練資料。
如果現有 Standard 叢集可能已明確停用驅動程式,請啟用 Compute Engine Persistent Disk CSI 驅動程式。對於新的 Autopilot 和 Standard 叢集,GKE 預設會啟用驅動程式。您建立的目的地 Hyperdisk ML 儲存空間必須由 Compute Engine Persistent Disk CSI 驅動程式管理。
在叢集上啟用 Workload Identity Federation for GKE。這樣一來,GKE Volume Populator 就能使用 Kubernetes 服務帳戶存取來源 Cloud Storage 值區。詳情請參閱「設定必要權限」。
需求條件
如要使用 GKE Volume Populator 轉移資料,請符合下列規定:
- GKE 叢集必須執行
1.33.2-gke.4780000
以上版本。 GCPDataSource
自訂資源必須與 GKE 工作負載位於相同命名空間。系統不支援跨不同命名空間的資料來源。- 建立運算級別時,請選取支援的 VM。確認專案有足夠配額,可供所選機器類型使用。
gcs-to-hdml-compute-class
計算類別名稱已預先定義給轉移作業,建立計算類別時必須準確指定。
費用
使用 GKE Volume Populator 不會直接產生費用,但儲存空間和資料移轉會產生帳單費用。相關的間接成本包括:
- GKE 使用的 Compute Engine 執行個體:用於執行資料移轉作業的節點費用。節點管理和費用影響會因叢集類型而異。詳情請參閱「建立 GKE 叢集」一文中的各叢集類型。
- 轉移作業節點大小:為獲得最佳轉移效能,轉移作業預設會將節點擴充至 24 個 vCPU。這項設定適用於所有叢集類型。如要調整特定成本或效能最佳化的節點大小和類型,可以在建立運算級別時進行。
- Cloud Storage 值區中使用的儲存空間:詳情請參閱 Cloud Storage 定價。
- Hyperdisk ML 磁碟區費用:包括您建立的 Hyperdisk ML 磁碟區儲存容量和效能 (IOPS/處理量)。詳情請參閱「Hyperdisk 定價」。
準備環境
在本節中,您將建立具有適當硬體的 GKE 叢集基礎架構,並設定存取 Cloud Storage 中資料的必要權限。
建立叢集以搭配 Hyperdisk ML 使用 GKE Volume Populator 之前,請先瞭解如何將運算類別套用至不同類型的叢集,以及節點管理員 (GKE 或您)。
運算類別如何搭配不同叢集類型使用 Hyperdisk ML
GKE Volume Populator 會使用自訂的運算類別,判斷資料傳輸作業要使用的節點類型。下表說明運算類別的行為,取決於叢集設定:
需求考量 | GKE Autopilot 和 GKE Standard 搭配節點自動佈建功能 | GKE Standard 不含節點自動佈建功能 |
---|---|---|
運算級別設定 | 已啟用 nodePoolAutoCreation |
已停用「nodePoolAutoCreation 」功能 |
節點管理 | GKE 會自動建立及管理節點。 | 您手動建立及管理節點。 |
節點資源調度 | 自動 | 手動 |
節點標籤 | 不適用 | 您必須使用 cloud.google.com/compute-class=gcs-to-hdml-compute-class 為節點加上標籤 |
更多資訊 | 節點自動佈建和運算類別 | 設定手動建立的節點集區 |
GKE 會在為 PersistentVolumeClaim
佈建 PersistentVolume
後,啟動資料移轉工作。如要填入 Hyperdisk ML 磁碟區,這個 PersistentVolumeClaim
必須參照 GCPDataSource
,後者會定義 Cloud Storage 中的來源資料。
建立 GKE 叢集
您可以選擇使用 GKE 1.33.2-gke.4780000
以上版本的Standard 或 Autopilot 叢集,部署資料移轉管道。每種叢集類型各有優點,計費模式也不同。
- 選擇 Autopilot,輕鬆管理叢集、提高成本效益及自動調度資源。
- 如要啟用自動調度資源功能,並進一步控管節點佈建作業,請選擇「Standard」(標準) 並啟用節點自動佈建功能。
- 如果您需要最大程度的控制權,且能輕鬆管理節點佈建、資源調度和維護的所有層面,請選擇「Standard」(標準) 並停用節點自動佈建功能。
Autopilot
在 GKE Autopilot 叢集中,GKE 會自動處理資料移轉作業所需的節點建立和刪除作業。轉移作業完成後,節點資源會自動縮減。您不需要手動刪除轉移 Pod 或 Pod 執行的節點。
如要建立新的 Autopilot 叢集,請執行下列指令:
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --cluster-version=CLUSTER_VERSION
更改下列內容:
CLUSTER_NAME
:您要建立的叢集名稱。LOCATION
:叢集的運算區域。例如:us-central1
。CLUSTER_VERSION
:叢集的 GKE 版本。本指南使用1.33.2-gke.4780000
。
標準 (含節點自動佈建功能)
在啟用節點自動佈建功能的 GKE Standard 叢集中,GKE 會自動處理資料移轉工作所需的節點建立和刪除作業。轉移作業完成後,節點資源會自動縮減。您不需要手動刪除轉移 Pod 或 Pod 執行的節點。
如要建立已啟用節點自動佈建功能的新 Standard 叢集,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=LOCATION \ --project=PROJECT_ID \ --workload-pool=PROJECT_ID.svc.id.goog \ --enable-autoprovisioning \ --min-cpu MINIMUM_CPU \ --min-memory MINIMUM_MEMORY \ --max-cpu MAXIMUM_CPU \ --max-memory MAXIMUM_MEMORY \ --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only
更改下列內容:
CLUSTER_NAME
:您要建立的叢集名稱,且已啟用節點自動佈建功能。CLUSTER_VERSION
:叢集的 GKE 版本。本指南使用1.33.2-gke.4780000
。LOCATION
:叢集的運算可用區或區域。例如us-central1-a
或us-central1
。PROJECT_ID
:您的 Google Cloud 專案 ID。MINIMUM_CPU
:自動佈建的 vCPU 數量下限。例如:10
。MINIMUM_MEMORY
:自動佈建的最低記憶體量 (以 GiB 為單位)。例如:200
。MAXIMUM_CPU
:自動佈建的 vCPU 數量上限。例如,100
。這項限制是所有現有手動建立的節點集區,以及 GKE 可能自動建立的所有節點集區的 CPU 資源總和。MAXIMUM_MEMORY
:自動佈建的記憶體上限。例如,1000
。這項限制是所有現有手動建立的節點集區,以及 GKE 可能自動建立的所有節點集區的記憶體資源總和。
標準 (不含節點自動佈建功能)
如要在未啟用節點自動佈建功能的標準叢集上使用 GKE Volume Populator,可以採用現有的節點集區,或是建立專用的轉移節點集區。節點必須有容量來執行轉移作業,且標籤必須與 compute-class
相符。
建立叢集和節點集區時,請將 gcs-to-hdml-compute-class
運算類別指定為節點標籤。請注意,計算類別名稱 gcs-to-hdml-compute-class
是為移轉工作預先定義,且必須完全指定。
如要建立沒有節點自動佈建功能的新 Standard 叢集,以及該叢集中的新節點集區,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=LOCATION \ --num-nodes=1 \ --project=PROJECT_ID \ --workload-pool=PROJECT_ID.svc.id.goog gcloud container node-pools create NODE_POOL_NAME\ --cluster=CLUSTER_NAME \ --location=LOCATION \ --num-nodes=1 \ --machine-type=c3-standard-44 \ --node-labels="cloud.google.com/compute-class=gcs-to-hdml-compute-class" \ --node-taints="cloud.google.com/compute-class=gcs-to-hdml-compute-class:NoSchedule"
更改下列內容:
CLUSTER_NAME
:您要建立的叢集名稱,且未啟用節點自動佈建功能。CLUSTER_VERSION
:叢集的 GKE 版本。本指南使用1.33.2-gke.4780000
。LOCATION
:叢集的運算區域。例如us-central1-a
或us-central1
。PROJECT_ID
專案 ID。 Google CloudNODE_POOL_NAME
:您要在新叢集中建立的節點集區名稱。GKE Volume Populator 會使用這個節點集區部署暫時的資料移轉工作。
為避免產生不必要的費用,請在資料轉移完成後執行 gcloud container node-pools delete
指令,刪除所有手動建立的轉移節點集區。
建立運算類別
如要建立運算類別,指定並優先處理可做為叢集節點的 VM 類型,請按照下列步驟操作:
- 將下列資訊清單儲存為
computeclass.yaml
:使用節點自動佈建功能
如果是 Autopilot 叢集,以及啟用節點自動佈建功能的 Standard 叢集,請使用
nodePoolAutoCreation
區段定義運算級別,如下所示。啟用節點自動佈建功能後,GKE 會自動建立具有gcs-to-hdml-compute-class
計算類別標籤的新節點集區。apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: gcs-to-hdml-compute-class spec: priorities: - machineFamily: c3 - machineFamily: c3d nodePoolAutoCreation: enabled: true whenUnsatisfiable: DoNotScaleUp
不使用節點自動佈建功能
如果 Standard 叢集未啟用節點自動佈建功能,請不要使用
nodePoolAutoCreation
區段定義運算級別,如下所示。請確認您已使用gcs-to-hdml-compute-class
計算類別標籤建立節點集區。apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: gcs-to-hdml-compute-class spec: priorities: - machineFamily: c3 - machineFamily: c3d whenUnsatisfiable: DoNotScaleUp
您可以指定任何相容的
machineFamily
,滿足資料轉移需求。如要進一步瞭解如何選取合適的機型,請參閱支援 Hyperdisk ML 的機型系列。 - 如要建立運算類別,請套用資訊清單:
kubectl apply -f computeclass.yaml
設定必要權限
如要從 Cloud Storage 值區移轉資料,請為 GKE 設定 Workload Identity Federation 的必要權限。只要具備適當權限,GKE Volume Populator 建立的轉移作業就能存取 Cloud Storage bucket。本指南假設您已在 Cloud Storage 值區中填入要轉移的模型訓練資料。
建立 Kubernetes 命名空間:
kubectl create namespace NAMESPACE
請將
NAMESPACE
改成您希望工作負載執行的命名空間。如果使用現有命名空間,請略過這個步驟。
建立 Kubernetes 服務帳戶:
kubectl create serviceaccount KSA_NAME \ --namespace=NAMESPACE
更改下列內容:
KSA_NAME
:您將在GCPDataSource
資源中指定的 Kubernetes 服務帳戶名稱。GKE Volume Populator 建立的移轉作業會使用這個服務帳戶向 API 進行驗證。 Google CloudNAMESPACE
:您在上一步中建立的 Kubernetes 命名空間。
授予 IAM 服務帳戶適當的角色,以便存取 Cloud Storage 值區:
gcloud storage buckets \ add-iam-policy-binding gs://GCS_BUCKET \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE"
更改下列內容:
GCS_BUCKET
:您的 Cloud Storage bucket 名稱。PROJECT_NUMBER
:您建立叢集的 Google Cloud 專案的數值 ID。如要找出專案編號,請參閱「識別專案」。PROJECT_ID
:您的 Google Cloud 專案 ID。NAMESPACE
:您先前建立的命名空間,工作負載將在其中執行。KSA_NAME
:您在GCPDataSource
資源中指定的 Kubernetes 服務帳戶名稱。GKE Volume Populator 建立的移轉作業會使用這個服務帳戶向 API 進行驗證。 Google CloudROLE
:要授予服務帳戶的 IAM 角色。為了配合本指南,請授予roles/storage.objectViewer
角色,允許從值區讀取資料。
PROJECT_NUMBER
、PROJECT_ID
、NAMESPACE
和KSA_NAME
用於建構專案的 Workload Identity Federation for GKE 主體 ID。
建立預先載入資料的 Hyperdisk ML 磁碟區
請按照下列步驟設定 GKE 基礎架構和設定,以便建立 Hyperdisk ML 磁碟區,並使用 GKE Volume Populator 觸發及管理自動資料移轉程序:
- 建立
GCPDataSource
自訂資源,定義資料來源。 - 建立 StorageClass,定義要使用的永久儲存空間類型 (Hyperdisk ML 磁碟區)。
- 建立 PersistentVolumeClaim,啟用儲存空間的動態佈建,並啟用對新佈建 Hyperdisk ML 磁碟區的存取權。
- (選用) 查看資料轉移進度。
- 建立並部署 Pod,以使用 Hyperdisk ML 磁碟區。
建立 GCPDataSource
自訂資源
在 GKE 中建立GCPDataSource
自訂資源,指定來源 Cloud Storage bucket 的位置,以及具備存取該 bucket 必要權限的服務帳戶。這個自訂資源定義 (CRD) 專屬於 GKE Volume Populator。
將下列資訊清單儲存為
gcpdatasource.yaml
。apiVersion: datalayer.gke.io/v1 kind: GCPDataSource metadata: name: GCP_DATA_SOURCE namespace: NAMESPACE spec: cloudStorage: serviceAccountName: KSA_NAME uri: gs://GCS_BUCKET/
替換下列值:
- GCP_DATA_SOURCE:
GCPDataSource
CRD 的名稱,其中包含 Cloud Storage bucket 的參照。詳情請參閱GCPDataSource
CRD 參考資料。 - NAMESPACE:工作負載執行的相同命名空間。系統會在該命名空間中建立
GCPDataSource
自訂資源。 - KSA_NAME:您在
GCPDataSource
資源中指定的 Kubernetes 服務帳戶名稱。GKE Volume Populator 建立的移轉作業會使用這個服務帳戶向 API 進行驗證。 Google CloudcloudStorage.serviceAccountName
值是您在「設定必要權限」一節中,為 GKE 適用的 Workload Identity 聯盟設定的 Kubernetes 服務帳戶。 - GCS_BUCKET:您的 Cloud Storage bucket 名稱。
uri
欄位會指定來源資料。- 如要複製整個值區,請使用
gs://GCS_BUCKET/
。 - 如要從值區內的特定資料夾複製資料,請使用
gs://GCS_BUCKET/PATH_INSIDE_BUCKET/
格式。舉例來說,如要從my-project-llm-models
值區內的gemma/v1.0/weights/
資料夾複製資料,URI 會是gs://my-project-llm-models/gemma/v1.0/weights/
。請確認路徑結尾有斜線,表示這是資料夾。
- 如要複製整個值區,請使用
- GCP_DATA_SOURCE:
如要建立
GCPDataSource
資源,請套用資訊清單:kubectl apply -f gcpdatasource.yaml
建立 Hyperdisk ML StorageClass
建立使用 pd.csi.storage.gke.io 佈建程式的 StorageClass,在所選區域中佈建 Hyperdisk ML 磁碟區。如要讓資料副本在多個可用區中都能存取,可以建立多可用區 StorageClass。以下是多區域 StorageClass 的範例。
將下列資訊清單儲存為
hdml-class.yaml
。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hyperdisk-ml-single-zone parameters: type: hyperdisk-ml provisioned-throughput-on-create: "2400Mi" provisioner: pd.csi.storage.gke.io allowVolumeExpansion: false reclaimPolicy: Delete volumeBindingMode: Immediate allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE
將
ZONE
替換為您要建立 Hyperdisk ML 磁碟區的目標可用區:- 如果 GKE Standard 叢集未啟用節點自動佈建功能,
ZONE
的值必須是您建立節點的位置。 - 如果是使用節點自動佈建的 GKE Autopilot 或 Standard 叢集,
ZONE
的值必須是叢集可視需要擴充及建立新節點的位置。
- 如果 GKE Standard 叢集未啟用節點自動佈建功能,
(選用) 如要列出叢集的節點位置,請執行下列指令:
gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(locations)"
更改下列內容:
CLUSTER_NAME
:叢集名稱。LOCATION
:叢集的運算可用區或區域。例如us-central1-a
或us-central1
。
如要建立 StorageClass,請套用資訊清單:
kubectl apply -f hdml-class.yaml
建立 PersistentVolumeClaim 來存取磁碟區
下列資訊清單範例說明如何以 ReadOnlyMany 存取模式建立 PersistentVolumeClaim,並參照您先前建立的 StorageClass。
將下列資訊清單儲存為
volume-populator-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: PVC_NAME namespace: NAMESPACE spec: accessModes: - ReadOnlyMany storageClassName: hyperdisk-ml-single-zone resources: requests: storage: DISK_SIZE dataSourceRef: apiGroup: datalayer.gke.io kind: GCPDataSource name: GCP_DATA_SOURCE
替換下列值:
PVC_NAME
:要轉移資料的 PersistentVolumeClaim 名稱。NAMESPACE
:工作負載的執行命名空間。DISK_SIZE
:建立磁碟的大小 (以 GB 為單位),用於填入資料。如要順利填入資料,請確認要求的磁碟大小大於模型資料在 Cloud Storage bucket 中的大小。為符合 Hyperdisk ML 磁碟區的支援範圍,DISK_SIZE
的值必須大於 4 Gi。詳情請參閱「Hyperdisk 磁碟區大小限制」。GCP_DATA_SOURCE
:GCPDataSource
CRD 的名稱,其中包含 Cloud Storage bucket 的參照。
您可以為 PVC 新增選用註解,自訂資料轉移作業。這些註解會影響基礎轉移作業的行為,該作業會將資料複製到 Hyperdisk ML 磁碟區。
volume-populator.datalayer.gke.io/cpu-request
:使用這項註解,為轉移作業Job
指定不同的 CPU 資源要求。如未指定其他 CPU 資源要求,PVC 預設會要求 24 個 vCPU,以盡量提升傳輸效能。volume-populator.datalayer.gke.io/transfer-path
:使用這項註解指定新磁碟區內的目的地路徑,該路徑將儲存從GCPDataSource
資源複製的資料。如未指定其他路徑,資料會複製到 Hyperdisk ML 磁碟區的根路徑。
如要建立 PVC,請套用此資訊清單:
kubectl apply -f volume-populator-pvc.yaml
請注意下列事項:
- 如果您將 StorageClass 中的
volumeBindingMode
欄位設為immediate
,部署 PVC 後就會立即觸發資料轉移作業。 - 如果將 StorageClass 中的
volumeBindingMode
欄位設為WaitForFirstConsumer
,只有在部署要求 PVC 的 Pod,且該 Pod 成功排定至節點後,才會觸發資料移轉。雖然可以排定 Pod 的時間,但容器會等到資料轉移完成,且磁碟區準備就緒後才會啟動。
如要查看資料轉移進度,請參閱「查看資料轉移進度」。如果在資源佈建或資料轉移期間發生錯誤,請參閱「排解 GKE Volume Populator 資料轉移問題」。
(選用) 查看資料轉移進度
本節說明如何追蹤資料從 Cloud Storage 值區轉移至 Hyperdisk ML 磁碟區的進度和成功率。
如要驗證 PersistentVolumeClaim 的狀態,請執行下列指令。如果 PersistentVolumeClaim 繫結作業耗時過長,您也可以執行這項指令。
kubectl describe pvc PVC_NAME -n NAMESPACE
更改下列內容:
PVC_NAME
:您在「建立 PersistentVolumeClaim 來存取磁碟區」一節中建立的 PVC 名稱。NAMESPACE
:本指南中使用的命名空間,您已在「設定必要權限」一節中建立這個命名空間。
在輸出內容中,查看 PersistentVolumeClaim 事件,監控資料轉移進度。GKE 大約每分鐘會記錄一次事件。輸出結果會與下列內容相似:
Name: vp-pvc Namespace: default StorageClass: hyperdisk-ml-single-zone Status: Bound Volume: pvc-f7ae2ee2-106d-4b87-b458-481a3ff82b62 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io volume.kubernetes.io/storage-provisioner: pd.csi.storage.gke.io Finalizers: [kubernetes.io/pvc-protection] Capacity: 200Gi Access Modes: ROX VolumeMode: Filesystem DataSource: APIGroup: datalayer.gke.io Kind: GCPDataSource Name: vp-gds Used By: verify-data-665cfd4dbf-mwc7t verify-data-665cfd4dbf-n7xw9 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 9m8s persistentvolume-controller Error saving claim: Operation cannot be fulfilled on persistentvolumeclaims "vp-pvc": the object has been modified; please apply your changes to the latest version and try again Normal Provisioning 9m5s pd.csi.storage.gke.io_gke-f110123a1cbd44cdaa7a-921b-b1f4-vm_1a100bd9-5231-4f20-8e65-1f8e995a03c0 External provisioner is provisioning volume for claim "default/vp-pvc" Normal Provisioning 9m5s external-provisioner Assuming an external populator will provision the volume Normal PopulateOperationStartSuccess 8m58s gkevolumepopulator-populator populateFn: Populate operation started for zone us-central1-c Normal TransferInProgress 8m58s (x2 over 8m58s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f in zone us-central1-c waiting for pod to get created Normal TransferInProgress 6m10s (x14 over 8m57s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job in zone us-central1-c with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f is still active with pod status as - Phase: Pending Normal ExternalProvisioning 3m35s (x24 over 9m5s) persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'pd.csi.storage.gke.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. Normal TransferJobCompleted 3m24s (x2 over 3m26s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, job with request ID populator-job-2304531e-4937-4534-a1a4-3eb11e5cb39f for zone us-central1-c completed successfully Normal TransferJobCompleted 3m24s (x2 over 3m26s) gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, transfer job for all zones have completed successfully Normal PopulateOperationFinished 3m24s (x2 over 3m26s) gkevolumepopulator-populator Populate operation finished Normal PopulatorFinished 3m19s (x3 over 3m20s) gkevolumepopulator-populator Populator finished
視資料大小而定,填入作業可能需要幾分鐘才會開始。如果幾分鐘後仍未看到任何資料移轉進度,請參閱「排解 GKE Volume Populator 資料移轉問題」一文。
如果是多可用區 Hyperdisk ML 磁碟區資料轉移作業,只有在資料成功轉移至 StorageClass 中指定「所有」可用區時,系統才會將工作標示為完成。如果一或多個區域的移轉工作失敗,只要 PVC 存在,GKE Volume Populator 就會無限期重試移轉資料。
建立及部署會耗用磁碟區的 Pod
如要建立 Pod 來驗證已填入資料的 PVC 內容,請執行下列操作:
將下列資訊清單儲存為
verify-data.yaml
:apiVersion: v1 kind: Pod metadata: name: verify-data namespace: NAMESPACE spec: nodeSelector: cloud.google.com/compute-class: gcs-to-hdml-compute-class containers: - name: verify-data image: busybox command: - sleep - infinity volumeMounts: - mountPath: /models name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: PVC_NAME
更改下列內容:
NAMESPACE
:PVC 所在的命名空間,以及您要建立verify-data
Pod 的位置。PVC_NAME
:您在「建立 PersistentVolumeClaim 來存取磁碟區」一節中,為資料填入作業建立的 PVC 名稱。
使用下列指令建立 Pod:
kubectl create -f verify-data.yaml
如要列出檔案,請執行下列指令:
kubectl exec -it verify-data -- /bin/sh # cd /models && ls
如果指令成功執行,您可以在 Cloud Storage bucket 的 /models
目錄中找到填入的資料。
清除所用資源
為避免產生不必要的費用,並移除任何設定錯誤或無主的資源,請按照步驟正常刪除 PersistentVolumeClaim。
在動態佈建期間刪除 PersistentVolumeClaim
如果您需要在動態佈建期間刪除 PersistentVolumeClaim,請按照下列步驟進行正常刪除。從容刪除作業可能需要一段時間才能完成。
在刪除過程中,請替換下列相關變數:
POD_NAME
:您在「建立及部署會耗用磁碟區的 Pod」一節中建立的 Pod 名稱。NAMESPACE
:PVC 所在的命名空間。PVC_NAME
:您在「使用 PersistentVolumeClaim 存取磁碟區」一節中建立的 PVC 名稱。GCP_DATA_SOURCE
:您在「建立GCPDataSource
自訂資源」一節中建立的GCPDataSource
自訂資源名稱。
刪除工作負載 Pod:
kubectl delete pod POD_NAME -n NAMESPACE
找出暫時性 PersistentVolumeClaim 的名稱:
# Store the relevant environment variables export PVC_NAME=PVC_NAME export NAMESPACE=NAMESPACE
# Check the status export PVC_UID=$(kubectl get pvc ${PVC_NAME} -n ${NAMESPACE} -o jsonpath='{.metadata.uid}') export TEMP_PVC=prime-${PVC_UID} echo ${TEMP_PVC}
刪除在命名空間中建立的 PVC:
kubectl delete pvc PVC_NAME -n NAMESPACE
PVC 可能會停留在
Terminating
狀態:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE vp-pvc Terminating hyperdisk-ml <unset> 7m23s
如果是,請移除 PVC 的終結器,手動清除 PVC:
kubectl patch pvc PVC_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
請務必先刪除 PVC,再刪除
GCPDataSource
資源。如果先刪除GCPDataSource
資源,PVC 刪除作業就會卡住。kubectl delete gcpdatasource GCP_DATA_SOURCE -n NAMESPACE
確認已刪除臨時資源。
後續步驟
- 瞭解 GKE Volume Populator。
- 如需資料移轉問題的相關協助,請參閱「排解 GKE Volume Populator 資料移轉問題」。
- 如需進階 Hyperdisk ML 工作負載範例,請參閱「使用 Hyperdisk ML 加速 AI/機器學習資料載入作業」。