使用 GKE Volume Populator 自動將資料從 Cloud Storage 傳輸至 Hyperdisk ML 磁碟區


本指南說明如何使用 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

目標

在本指南中,您會執行下列工作:

事前準備

請確認您已完成下列工作:

  1. 啟用 GKE 和 Cloud Storage API。

    啟用 API

  2. 請確認您已為Google Cloud 專案啟用計費功能。

  3. 下載並安裝 Google Cloud CLI 指令列工具,或使用 Cloud Shell 執行 gcloud CLIkubectl 指令。Cloud Shell 是殼層環境,用於管理託管在 Google Cloud的資源。並預先安裝 gcloudkubectl 指令列工具。

  4. 設定預設地區和區域

  5. 建立或使用現有的 Cloud Storage bucket。本指南假設您已在 Cloud Storage 值區中填入模型訓練資料。

  6. 如果現有 Standard 叢集可能已明確停用驅動程式,請啟用 Compute Engine Persistent Disk CSI 驅動程式。對於新的 Autopilot 和 Standard 叢集,GKE 預設會啟用驅動程式。您建立的目的地 Hyperdisk ML 儲存空間必須由 Compute Engine Persistent Disk CSI 驅動程式管理。

  7. 在叢集上啟用 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-aus-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-aus-central1
  • PROJECT_ID 專案 ID。 Google Cloud
  • NODE_POOL_NAME:您要在新叢集中建立的節點集區名稱。GKE Volume Populator 會使用這個節點集區部署暫時的資料移轉工作。

為避免產生不必要的費用,請在資料轉移完成後執行 gcloud container node-pools delete 指令,刪除所有手動建立的轉移節點集區。

建立運算類別

如要建立運算類別,指定並優先處理可做為叢集節點的 VM 類型,請按照下列步驟操作:

  1. 將下列資訊清單儲存為 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 的機型系列

  2. 如要建立運算類別,請套用資訊清單:
    kubectl apply -f computeclass.yaml

設定必要權限

如要從 Cloud Storage 值區移轉資料,請為 GKE 設定 Workload Identity Federation 的必要權限。只要具備適當權限,GKE Volume Populator 建立的轉移作業就能存取 Cloud Storage bucket。本指南假設您已在 Cloud Storage 值區中填入要轉移的模型訓練資料。

  1. 建立 Kubernetes 命名空間:

    kubectl create namespace NAMESPACE
    

    請將 NAMESPACE 改成您希望工作負載執行的命名空間。

    如果使用現有命名空間,請略過這個步驟。

  2. 建立 Kubernetes 服務帳戶:

    kubectl create serviceaccount KSA_NAME \
        --namespace=NAMESPACE
    

    更改下列內容:

    • KSA_NAME:您將在 GCPDataSource 資源中指定的 Kubernetes 服務帳戶名稱。GKE Volume Populator 建立的移轉作業會使用這個服務帳戶向 API 進行驗證。 Google Cloud
    • NAMESPACE:您在上一步中建立的 Kubernetes 命名空間。
  3. 授予 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 Cloud
    • ROLE:要授予服務帳戶的 IAM 角色。為了配合本指南,請授予 roles/storage.objectViewer 角色,允許從值區讀取資料。

    PROJECT_NUMBERPROJECT_IDNAMESPACEKSA_NAME 用於建構專案的 Workload Identity Federation for GKE 主體 ID。

建立預先載入資料的 Hyperdisk ML 磁碟區

請按照下列步驟設定 GKE 基礎架構和設定,以便建立 Hyperdisk ML 磁碟區,並使用 GKE Volume Populator 觸發及管理自動資料移轉程序:

  1. 建立GCPDataSource自訂資源,定義資料來源。
  2. 建立 StorageClass,定義要使用的永久儲存空間類型 (Hyperdisk ML 磁碟區)。
  3. 建立 PersistentVolumeClaim,啟用儲存空間的動態佈建,並啟用對新佈建 Hyperdisk ML 磁碟區的存取權。
  4. (選用) 查看資料轉移進度
  5. 建立並部署 Pod,以使用 Hyperdisk ML 磁碟區。

建立 GCPDataSource 自訂資源

在 GKE 中建立GCPDataSource自訂資源,指定來源 Cloud Storage bucket 的位置,以及具備存取該 bucket 必要權限的服務帳戶。這個自訂資源定義 (CRD) 專屬於 GKE Volume Populator。

  1. 將下列資訊清單儲存為 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_SOURCEGCPDataSourceCRD 的名稱,其中包含 Cloud Storage bucket 的參照。詳情請參閱 GCPDataSource CRD 參考資料
    • NAMESPACE:工作負載執行的相同命名空間。系統會在該命名空間中建立 GCPDataSource 自訂資源。
    • KSA_NAME:您在 GCPDataSource 資源中指定的 Kubernetes 服務帳戶名稱。GKE Volume Populator 建立的移轉作業會使用這個服務帳戶向 API 進行驗證。 Google Cloud cloudStorage.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/。請確認路徑結尾有斜線,表示這是資料夾。
  2. 如要建立 GCPDataSource 資源,請套用資訊清單:

    kubectl apply -f gcpdatasource.yaml
    

建立 Hyperdisk ML StorageClass

建立使用 pd.csi.storage.gke.io 佈建程式的 StorageClass,在所選區域中佈建 Hyperdisk ML 磁碟區。如要讓資料副本在多個可用區中都能存取,可以建立多可用區 StorageClass。以下是多區域 StorageClass 的範例

  1. 將下列資訊清單儲存為 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 的值必須是叢集可視需要擴充及建立新節點的位置。
  2. (選用) 如要列出叢集的節點位置,請執行下列指令:

    gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(locations)"
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • LOCATION:叢集的運算可用區或區域。例如 us-central1-aus-central1
  3. 如要建立 StorageClass,請套用資訊清單:

    kubectl apply -f hdml-class.yaml
    

建立 PersistentVolumeClaim 來存取磁碟區

下列資訊清單範例說明如何以 ReadOnlyMany 存取模式建立 PersistentVolumeClaim,並參照您先前建立的 StorageClass。

  1. 將下列資訊清單儲存為 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_SOURCEGCPDataSource 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 磁碟區的根路徑。

  2. 如要建立 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 磁碟區的進度和成功率。

  1. 如要驗證 PersistentVolumeClaim 的狀態,請執行下列指令。如果 PersistentVolumeClaim 繫結作業耗時過長,您也可以執行這項指令。

    kubectl describe pvc PVC_NAME -n NAMESPACE
    

    更改下列內容:

  2. 在輸出內容中,查看 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 內容,請執行下列操作:

  1. 將下列資訊清單儲存為 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
    

    更改下列內容:

  2. 使用下列指令建立 Pod:

    kubectl create -f verify-data.yaml
    
  3. 如要列出檔案,請執行下列指令:

    kubectl exec -it verify-data -- /bin/sh
    # cd /models && ls
    

如果指令成功執行,您可以在 Cloud Storage bucket 的 /models 目錄中找到填入的資料。

清除所用資源

為避免產生不必要的費用,並移除任何設定錯誤或無主的資源,請按照步驟正常刪除 PersistentVolumeClaim。

在動態佈建期間刪除 PersistentVolumeClaim

如果您需要在動態佈建期間刪除 PersistentVolumeClaim,請按照下列步驟進行正常刪除。從容刪除作業可能需要一段時間才能完成。

在刪除過程中,請替換下列相關變數:

  1. 刪除工作負載 Pod:

    kubectl delete pod POD_NAME -n NAMESPACE
    
  2. 找出暫時性 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}
    
  3. 刪除在命名空間中建立的 PVC:

    kubectl delete pvc PVC_NAME -n NAMESPACE
    
  4. 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}}'
    
  5. 請務必先刪除 PVC,再刪除 GCPDataSource 資源。如果先刪除 GCPDataSource 資源,PVC 刪除作業就會卡住。

    kubectl delete gcpdatasource GCP_DATA_SOURCE -n NAMESPACE
    
  6. 確認已刪除臨時資源

後續步驟