Mengotomatiskan transfer data dari Cloud Storage ke volume Hyperdisk ML menggunakan GKE Volume Populator

Dokumen ini menunjukkan cara memuat data set terlebih dahulu dari bucket Cloud Storage ke volume ML Hyperdisk Google Cloud menggunakan Volume Populator Google Kubernetes Engine (GKE) selama penyediaan dinamis. Untuk mengetahui informasi selengkapnya, lihat Tentang Pengelola Volume GKE.

Saat Anda melatih model machine learning di GKE, akses cepat ke data dalam volume Hyperdisk ML sangat penting untuk performa. Pengisi Volume GKE mempercepat alur kerja machine learning dengan memuat otomatis set data besar dari bucket Cloud Storage ke volume Hyperdisk ML Anda selama penyediaan dinamis. Proses ini mengoptimalkan akses data dan menyederhanakan operasi untuk aplikasi AI/ML, yang dapat meningkatkan kecepatan pengembangan dan menghasilkan layanan yang lebih efisien.

Dokumen ini ditujukan untuk engineer ML dan spesialis penyimpanan yang membuat dan mengalokasikan penyimpanan, mengelola keamanan dan akses data, serta menyesuaikan infrastruktur pelatihan AI/ML di GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Cloud de Confiance by S3NS konten, lihat Peran dan tugas pengguna GKE umum.

Pengelolaan node pool untuk GKE Volume Populator dengan Hyperdisk ML

Penentuan ukuran, penyediaan, dan penskalaan kumpulan node yang efisien sangat penting untuk berhasil menjalankan Tugas transfer data yang dibuat oleh GKE Volume Populator untuk mengisi volume Hyperdisk ML. Anda menggunakan kelas komputasi untuk menentukan persyaratan node, seperti jenis dan ukuran mesin, untuk Tugas transfer data tertentu ini. Dengan kelas komputasi, Anda dapat mengontrol biaya dan performa proses transfer data. Untuk mengetahui informasi selengkapnya, lihat Manfaat class komputasi kustom.

Untuk memilih cluster yang paling sesuai untuk Tugas transfer data Anda, pahami cara kerja class komputasi dengan berbagai jenis cluster untuk Hyperdisk ML.

Tujuan

Dalam panduan ini, Anda akan melakukan tugas-tugas berikut:

Sebelum memulai

Pastikan Anda telah melakukan tugas berikut:

  1. Aktifkan GKE API dan Cloud Storage API.

    Mengaktifkan API

  2. Pastikan penagihan diaktifkan untuk Cloud de Confiance by S3NS project Anda.

  3. Download dan instal alat command line Google Cloud CLI, atau gunakan Cloud Shell untuk menjalankan perintah gcloud CLI dan kubectl. Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Cloud de Confiance by S3NS. Cloud Shell telah diinstal lebih dulu dengan alat command line gcloud dan kubectl.

  4. Tetapkan region dan zona default.

  5. Buat, atau gunakan bucket Cloud Storage yang ada. Panduan ini mengasumsikan bahwa Anda sudah memiliki bucket Cloud Storage yang diisi dengan data pelatihan model Anda.

  6. Aktifkan driver CSI Persistent Disk Compute Engine pada cluster Standard yang ada yang mungkin telah menonaktifkan driver secara eksplisit. Di cluster Autopilot dan Standard baru, GKE mengaktifkan driver secara default. Penyimpanan ML Hyperdisk tujuan yang Anda buat harus dikelola oleh driver CSI Persistent Disk Compute Engine.

  7. Aktifkan Workload Identity Federation for GKE di cluster Anda. Hal ini memungkinkan akun layanan Kubernetes yang digunakan oleh GKE Volume Populator untuk mengakses bucket Cloud Storage sumber. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan izin yang diperlukan.

Persyaratan

Untuk mentransfer data menggunakan GKE Volume Populator, penuhi persyaratan berikut:

  • Cluster GKE Anda harus menjalankan versi 1.33.2-gke.4780000 atau yang lebih baru.
  • Resource kustom GCPDataSource Anda harus berada di namespace yang sama dengan beban kerja GKE Anda. Sumber data yang mencakup namespace yang berbeda tidak didukung.
  • Pilih VM yang didukung saat Anda membuat class komputasi. Pastikan project Anda memiliki kuota yang cukup untuk jenis mesin yang Anda pilih.
  • Nama class komputasi gcs-to-hdml-compute-class telah ditentukan sebelumnya untuk Tugas transfer, dan harus ditentukan secara persis saat Anda membuat class komputasi.

Biaya

Meskipun tidak ada biaya langsung untuk menggunakan GKE Volume Populator, penyimpanan dan transfer data akan dikenai biaya penagihan. Biaya tidak langsung terkait mencakup hal berikut:

  • Instance Compute Engine yang digunakan oleh GKE: biaya node yang digunakan untuk menjalankan Tugas transfer data. Implikasi biaya dan pengelolaan node bervariasi menurut jenis cluster. Untuk mengetahui informasi selengkapnya, lihat jenis cluster masing-masing di Membuat cluster GKE.
  • Ukuran node Tugas Transfer: untuk performa transfer yang optimal, Tugas transfer secara default menskalakan node dengan 24 vCPU. Hal ini berlaku untuk semua jenis cluster. Jika ingin menyesuaikan ukuran dan jenis node untuk pengoptimalan biaya atau performa tertentu, Anda dapat melakukannya saat membuat class komputasi.
  • Penyimpanan yang digunakan di bucket Cloud Storage Anda: untuk mengetahui informasi selengkapnya, lihat Harga Cloud Storage.
  • Biaya volume Hyperdisk ML: ini mencakup kapasitas penyimpanan dan performa (IOPS/throughput) volume Hyperdisk ML yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Harga Hyperdisk.

Menyiapkan lingkungan Anda

Di bagian ini, Anda akan membuat infrastruktur cluster GKE dengan hardware yang sesuai, dan menyiapkan izin yang diperlukan untuk mengakses data Anda di Cloud Storage.

Sebelum membuat cluster untuk menggunakan GKE Volume Populator dengan Hyperdisk ML, pahami cara menerapkan class komputasi ke berbagai jenis cluster, dan siapa yang bertanggung jawab atas pengelolaan node--GKE atau Anda.

Cara kerja class komputasi dengan berbagai jenis cluster untuk Hyperdisk ML

Pengisi Volume GKE menggunakan class komputasi kustom untuk menentukan jenis node yang akan digunakan untuk Tugas transfer data. Tabel berikut menjelaskan perilaku class komputasi Anda, bergantung pada konfigurasi cluster Anda:

Pertimbangan GKE Autopilot, dan GKE Standard dengan node auto-provisioning GKE Standard tanpa node auto-provisioning
Setelan class compute nodePoolAutoCreation diaktifkan nodePoolAutoCreation dinonaktifkan
Pengelolaan node GKE secara otomatis membuat dan mengelola node. Anda membuat dan mengelola node secara manual.
Penskalaan node Otomatis Manual
Pelabelan node Tidak berlaku Anda harus memberi label pada node dengan cloud.google.com/compute-class=gcs-to-hdml-compute-class
Informasi selengkapnya Node auto-provisioning dan class komputasi Mengonfigurasi node pool yang dibuat secara manual

GKE memulai Tugas transfer data setelah menyediakan PersistentVolume untuk PersistentVolumeClaim. Untuk mengisi volume Hyperdisk ML, PersistentVolumeClaim ini harus mereferensikan GCPDataSource, yang menentukan data sumber di Cloud Storage.

Buat cluster GKE Anda

Anda dapat memilih untuk men-deploy pipeline transfer data menggunakan cluster Standard atau Autopilot dengan GKE versi 1.33.2-gke.4780000 atau yang lebih baru. Setiap jenis cluster memiliki kelebihan dan model harganya sendiri.

  • Pilih Autopilot untuk pengelolaan cluster yang lebih mudah, efisiensi biaya, dan penskalaan otomatis.
  • Pilih Standard dengan node auto-provisioning diaktifkan jika Anda memerlukan penskalaan otomatis dengan kontrol lebih besar atas penyediaan node.
  • Pilih Standard tanpa node auto-provisioning yang diaktifkan jika Anda memerlukan kontrol maksimum dan merasa nyaman mengelola semua aspek penyediaan, penskalaan, dan pemeliharaan node.

Autopilot

Di cluster Autopilot GKE, GKE secara otomatis menangani pembuatan dan penghapusan node yang diperlukan untuk Tugas transfer data. Setelah Job transfer selesai, resource node akan otomatis diturunkan skalanya. Anda tidak perlu menghapus Pod transfer atau node tempat Pod berjalan secara manual.

Untuk membuat cluster Autopilot baru, jalankan perintah berikut:

  gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=CLUSTER_VERSION
  

Ganti kode berikut:

  • CLUSTER_NAME: nama untuk cluster yang Anda buat.
  • LOCATION: region komputasi untuk cluster Anda. Contoh, us-central1.
  • CLUSTER_VERSION: versi GKE untuk cluster. Gunakan 1.33.2-gke.4780000 dalam panduan ini.

Standard (dengan node auto-provisioning)

Di cluster GKE Standard dengan node auto-provisioning diaktifkan, GKE secara otomatis menangani pembuatan dan penghapusan node yang diperlukan untuk Tugas transfer data. Setelah Job transfer selesai, resource node akan otomatis diturunkan skalanya. Anda tidak perlu menghapus Pod transfer atau node tempat Pod berjalan secara manual.

Untuk membuat cluster Standard baru dengan node auto-provisioning diaktifkan, jalankan perintah berikut:

  gcloud container clusters create CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --location=LOCATION \
    --project=PROJECT_ID \
    --workload-pool=PROJECT_ID.s3ns.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
  

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang Anda buat dengan node auto-provisioning diaktifkan.
  • CLUSTER_VERSION: versi GKE untuk cluster. Gunakan 1.33.2-gke.4780000 dalam panduan ini.
  • LOCATION: zona atau region komputasi untuk cluster Anda. Misalnya us-central1-a atau us-central1.
  • PROJECT_ID: Cloud de Confiance by S3NS Project ID Anda.
  • MINIMUM_CPU: jumlah minimum vCPU untuk penyediaan otomatis. Contoh, 10.
  • MINIMUM_MEMORY: jumlah minimum memori dalam GiB untuk penyediaan otomatis. Contoh, 200.
  • MAXIMUM_CPU: jumlah maksimum vCPU yang akan disediakan secara otomatis. Contoh, 100. Batas ini adalah total resource CPU di semua node pool yang dibuat secara manual dan semua node pool yang mungkin dibuat secara otomatis oleh GKE.
  • MAXIMUM_MEMORY: jumlah memori maksimum yang akan disediakan otomatis. Contoh, 1000. Batas ini adalah total resource memori di semua node pool yang ada dan dibuat secara manual serta semua node pool yang mungkin dibuat secara otomatis oleh GKE.

Standard (tanpa node auto-provisioning)

Untuk menggunakan GKE Volume Populator di cluster Standard yang tidak mengaktifkan node auto-provisioning, Anda dapat menggunakan node pool yang ada atau membuat node pool transfer khusus. Node harus memiliki kapasitas untuk menjalankan Tugas transfer dan label yang cocok dengan compute-class.

Tentukan class komputasi gcs-to-hdml-compute-class sebagai label node saat Anda membuat cluster dan node pool. Perhatikan bahwa nama class komputasi, gcs-to-hdml-compute-class, telah ditentukan sebelumnya untuk tugas transfer, dan harus ditentukan dengan tepat.

Untuk membuat cluster Standard baru tanpa node auto-provisioning, dan node pool baru dalam cluster tersebut, jalankan perintah berikut:

  gcloud container clusters create CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --location=LOCATION \
    --num-nodes=1 \
    --project=PROJECT_ID \
    --workload-pool=PROJECT_ID.s3ns.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"
  

Ganti kode berikut:

  • CLUSTER_NAME: nama untuk cluster yang Anda buat tanpa mengaktifkan node auto-provisioning.
  • CLUSTER_VERSION: versi GKE untuk cluster. Gunakan 1.33.2-gke.4780000 dalam panduan ini.
  • LOCATION: region komputasi untuk cluster Anda. Misalnya us-central1-a atau us-central1.
  • PROJECT_ID project ID Cloud de Confiance by S3NS Anda.
  • NODE_POOL_NAME: nama untuk node pool yang Anda buat di cluster baru. Node pool ini digunakan oleh GKE Volume Populator untuk men-deploy Tugas transfer data sementara.

Untuk menghindari biaya yang tidak perlu, jalankan perintah gcloud container node-pools delete untuk menghapus node pool transfer yang dibuat secara manual setelah transfer data selesai.

Buat class komputasi Anda

Untuk membuat class komputasi guna menentukan dan memprioritaskan jenis VM yang dapat digunakan sebagai node di cluster Anda, ikuti langkah-langkah berikut:

  1. Simpan manifes berikut sebagai computeclass.yaml:

    Dengan node auto-provisioning

    Untuk cluster Autopilot, dan cluster Standard dengan node auto-provisioning diaktifkan, tentukan class komputasi dengan bagian nodePoolAutoCreation sebagai berikut. Jika node auto-provisioning diaktifkan, GKE akan otomatis membuat node pool baru dengan label class komputasi 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
      

    Tanpa node auto-provisioning

    Untuk cluster Standard tanpa node auto-provisioning yang diaktifkan, tentukan class komputasi Anda tanpa bagian nodePoolAutoCreation sebagai berikut. Pastikan Anda telah membuat node pool dengan label class komputasi 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
      

    Anda dapat menentukan machineFamily yang kompatibel untuk memenuhi kebutuhan transfer data Anda. Untuk mengetahui informasi selengkapnya tentang pemilihan jenis mesin yang sesuai, lihat Dukungan seri mesin untuk Hyperdisk ML.

  2. Untuk membuat class komputasi, terapkan manifes:
    kubectl apply -f computeclass.yaml

Menyiapkan izin yang diperlukan

Untuk mentransfer data dari bucket Cloud Storage, siapkan izin yang diperlukan untuk Workload Identity Federation for GKE. Dengan izin yang sesuai, tugas transfer yang dibuat oleh GKE Volume Populator dapat mengakses bucket Cloud Storage Anda. Panduan ini mengasumsikan bahwa Anda sudah memiliki bucket Cloud Storage yang diisi dengan data pelatihan model yang ingin Anda transfer.

  1. Membuat namespace Kubernetes:

    kubectl create namespace NAMESPACE
    

    Ganti NAMESPACE dengan namespace tempat Anda ingin menjalankan beban kerja.

    Lewati langkah ini jika Anda menggunakan namespace yang sudah ada.

  2. Buat akun layanan Kubernetes.

    kubectl create serviceaccount KSA_NAME \
      --namespace=NAMESPACE
    

    Ganti kode berikut:

    • KSA_NAME: nama akun layanan Kubernetes yang akan Anda tentukan di resource GCPDataSource. Tugas transfer yang dibuat oleh GKE Volume Populator menggunakan akun layanan ini untuk melakukan autentikasi ke Cloud de Confiance by S3NS API.
    • NAMESPACE: namespace Kubernetes yang Anda buat di langkah sebelumnya.
  3. Berikan peran yang sesuai kepada akun layanan IAM) Anda untuk mengakses bucket Cloud Storage Anda:

    gcloud storage buckets \
      add-iam-policy-binding gs://GCS_BUCKET \
      --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.s3ns.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
      --role "ROLE"
    

    Ganti kode berikut:

    • GCS_BUCKET: nama bucket Cloud Storage Anda.
    • PROJECT_NUMBER: ID numerik Cloud de Confiance by S3NS project tempat Anda membuat cluster. Untuk menemukan nomor project Anda, lihat Mengidentifikasi project.
    • PROJECT_ID: Cloud de Confiance by S3NS Project ID Anda.
    • NAMESPACE: namespace yang Anda buat sebelumnya tempat workload Anda akan berjalan.
    • KSA_NAME: nama akun layanan Kubernetes yang Anda tentukan di resource GCPDataSource. Tugas transfer yang dibuat oleh GKE Volume Populator menggunakan akun layanan ini untuk melakukan autentikasi ke Cloud de Confiance by S3NS API.
    • ROLE: peran IAM yang ingin Anda berikan ke akun layanan Anda. Untuk tujuan panduan ini, berikan peran roles/storage.objectViewer untuk mengizinkan pembacaan dari bucket.

    PROJECT_NUMBER, PROJECT_ID, NAMESPACE, dan KSA_NAME digunakan untuk membuat ID utama Workload Identity Federation for GKE untuk project Anda.

Membuat volume Hyperdisk ML dengan data yang sudah dimuat sebelumnya

Lakukan langkah-langkah berikut untuk menyiapkan infrastruktur dan konfigurasi GKE yang diperlukan untuk membuat volume Hyperdisk ML, serta untuk memicu dan mengelola proses transfer data otomatis menggunakan GKE Volume Populator:

  1. Buat GCPDataSource resource kustom untuk menentukan sumber data.
  2. Buat StorageClass untuk menentukan jenis penyimpanan persisten (volume Hyperdisk ML) yang akan digunakan.
  3. Buat PersistentVolumeClaim untuk mengaktifkan penyediaan penyimpanan dinamis, dan mengaktifkan akses ke volume Hyperdisk ML yang baru disediakan.
  4. (Opsional) Lihat progres transfer data.
  5. Buat dan deploy Pod yang menggunakan volume Hyperdisk ML.

Membuat resource kustom GCPDataSource

Buat resource kustom GCPDataSource di GKE untuk menentukan lokasi bucket Cloud Storage sumber dan akun layanan dengan izin yang diperlukan untuk mengakses bucket tersebut. Definisi resource kustom (CRD) ini khusus untuk Pengisi Volume GKE.

  1. Simpan manifes berikut sebagai 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/
    

    Ganti nilai berikut:

    • GCP_DATA_SOURCE: nama GCPDataSourceCRD yang menyimpan referensi ke bucket Cloud Storage Anda. Untuk mengetahui informasi selengkapnya, lihat referensi CRD GCPDataSource.
    • NAMESPACE: namespace yang sama tempat workload Anda berjalan. Resource kustom GCPDataSource dibuat di namespace ini.
    • KSA_NAME: nama akun layanan Kubernetes yang Anda tentukan di resource GCPDataSource. Tugas transfer yang dibuat oleh GKE Volume Populator menggunakan akun layanan ini untuk melakukan autentikasi ke Cloud de Confiance by S3NS API. Nilai cloudStorage.serviceAccountName adalah akun layanan Kubernetes yang Anda siapkan untuk Workload Identity Federation for GKE di bagian Menyiapkan izin yang diperlukan.
    • GCS_BUCKET: nama bucket Cloud Storage Anda. Kolom uri menentukan data sumber.
    • Untuk menyalin seluruh bucket, gunakan gs://GCS_BUCKET/.
    • Untuk menyalin data dari folder tertentu dalam bucket, gunakan format gs://GCS_BUCKET/PATH_INSIDE_BUCKET/. Misalnya, untuk menyalin data dari folder gemma/v1.0/weights/ di dalam bucket my-project-llm-models, URI-nya adalah gs://my-project-llm-models/gemma/v1.0/weights/. Pastikan jalur diakhiri dengan garis miring untuk menunjukkan folder.
  2. Untuk membuat resource GCPDataSource, terapkan manifes:

    kubectl apply -f gcpdatasource.yaml
    

Membuat StorageClass Hyperdisk ML

Buat StorageClass yang menggunakan penyedia pd.csi.storage.gke.io untuk menyediakan volume Hyperdisk ML di zona pilihan Anda. Jika ingin salinan data Anda dapat diakses di lebih dari satu zona, Anda dapat membuat StorageClass multi-zona. Berikut contoh StorageClass multi-zona.

  1. Simpan manifes berikut sebagai 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
    

    Ganti ZONE dengan zona target tempat Anda ingin membuat volume Hyperdisk ML:

    • Untuk cluster GKE Standard tanpa node auto-provisioning, nilai ZONE harus berupa lokasi tempat Anda membuat node.
    • Untuk cluster GKE Autopilot atau Standard dengan node auto-provisioning, nilai untuk ZONE harus berupa lokasi tempat cluster Anda dapat melakukan peningkatan skala dan membuat node baru jika diperlukan.
  2. (Opsional) Untuk mencantumkan lokasi node cluster Anda, jalankan perintah berikut:

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

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: zona atau region komputasi untuk cluster Anda. Misalnya us-central1-a atau us-central1.
  3. Untuk membuat StorageClass, terapkan manifes :

    kubectl apply -f hdml-class.yaml
    

Membuat PersistentVolumeClaim untuk mengakses volume

Manifes berikut menunjukkan contoh cara membuat PersistentVolumeClaim dalam mode akses ReadOnlyMany yang mereferensikan StorageClass yang Anda buat sebelumnya.

  1. Simpan manifes berikut sebagai 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
    

    Ganti nilai berikut:

    • PVC_NAME: nama PersistentVolumeClaim tempat Anda ingin mentransfer data.
    • NAMESPACE: namespace tempat workload Anda akan berjalan.
    • DISK_SIZE: ukuran disk, dalam gigabyte, yang akan dibuat untuk mengisi data. Agar data berhasil diisi, pastikan ukuran disk yang diminta lebih besar daripada ukuran data model Anda yang ada di bucket Cloud Storage. Agar sesuai dengan rentang yang didukung untuk volume Hyperdisk ML, nilai DISK_SIZE harus lebih besar dari 4 Gi. Untuk mengetahui informasi selengkapnya, lihat Batas ukuran volume Hyperdisk.
    • GCP_DATA_SOURCE: nama CRD GCPDataSource yang menyimpan referensi ke bucket Cloud Storage Anda.

    Anda dapat menyesuaikan transfer data dengan menambahkan anotasi opsional ke PVC. Anotasi ini memengaruhi perilaku Job transfer yang mendasarinya yang menyalin data ke volume Hyperdisk ML Anda.

    • volume-populator.datalayer.gke.io/cpu-request: Gunakan anotasi ini untuk menentukan permintaan resource CPU yang berbeda untuk transfer Job. Jika Anda tidak menentukan permintaan resource CPU yang berbeda, PVC akan meminta 24 vCPU secara default untuk mengoptimalkan performa transfer.

    • volume-populator.datalayer.gke.io/transfer-path: Gunakan anotasi ini untuk menentukan jalur tujuan di dalam volume baru yang akan menyimpan data yang disalin dari resource GCPDataSource Anda. Jika Anda tidak menentukan jalur yang berbeda, data akan disalin ke jalur root dalam volume Hyperdisk ML.

  2. Untuk membuat PVC, terapkan manifes:

    kubectl apply -f volume-populator-pvc.yaml
    

Perhatikan poin-poin berikut:

  • Jika Anda menyetel kolom volumeBindingMode di StorageClass ke immediate, transfer data akan segera dipicu setelah men-deploy PVC.
  • Jika Anda menyetel kolom volumeBindingMode di StorageClass ke WaitForFirstConsumer, transfer data hanya dipicu setelah Anda men-deploy Pod yang meminta PVC dan Pod tersebut berhasil dijadwalkan ke node. Meskipun Pod Anda dapat dijadwalkan, container-nya akan menunggu untuk dimulai hingga transfer data selesai dan volume siap digunakan.

Untuk memeriksa progres transfer data Anda, lihat Melihat progres transfer data. Jika Anda mengalami error selama penyediaan resource atau transfer data, lihat Memecahkan masalah transfer data GKE Volume Populator.

(Opsional) Melihat progres transfer data

Bagian ini menunjukkan cara melacak progres dan keberhasilan transfer data dari bucket Cloud Storage ke volume Hyperdisk ML.

  1. Untuk memverifikasi status PersistentVolumeClaim, jalankan perintah berikut. Anda juga dapat menjalankan perintah ini jika operasi binding PersistentVolumeClaim Anda memerlukan waktu terlalu lama untuk diselesaikan.

    kubectl describe pvc PVC_NAME -n NAMESPACE
    

    Ganti kode berikut:

  2. Di output, tinjau peristiwa PersistentVolumeClaim untuk memantau progres transfer data. GKE mencatat peristiwa sekitar sekali per menit. Outputnya mirip dengan hal berikut ini:

    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
    

Diperlukan waktu beberapa menit agar operasi pengisian dimulai, bergantung pada ukuran data. Jika Anda tidak melihat progres transfer data setelah beberapa menit, lihat Memecahkan masalah transfer data GKE Volume Populator untuk mendapatkan bantuan.

Untuk transfer data volume Hyperdisk ML multi-zona, Tugas ditandai selesai hanya jika data berhasil ditransfer ke semua zona yang ditentukan dalam StorageClass. Jika Tugas transfer gagal untuk satu atau beberapa zona, Pengisi Volume GKE akan mencoba lagi mentransfer data tanpa batas selama PVC ada.

Buat dan deploy Pod yang menggunakan volume

Untuk membuat Pod guna memverifikasi konten PVC yang telah diisi dengan data:

  1. Simpan manifes berikut sebagai 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
    

    Ganti kode berikut:

  2. Buat Pod dengan perintah berikut:

    kubectl create -f verify-data.yaml
    
  3. Untuk mencantumkan file, jalankan perintah berikut:

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

Jika perintah berhasil, Anda dapat menemukan data yang diisi di direktori /models dalam bucket Cloud Storage Anda.

Pembersihan

Untuk menghindari biaya yang tidak perlu dan menghapus resource yang salah dikonfigurasi atau tidak memiliki pemilik, ikuti langkah-langkah untuk menghapus PersistentVolumeClaim dengan benar.

Menghapus PersistentVolumeClaim selama penyediaan dinamis

Jika Anda perlu menghapus PersistentVolumeClaim saat data masih ditransfer selama penyediaan dinamis, gunakan langkah-langkah berikut untuk penghapusan yang benar. Penghapusan yang benar dapat memerlukan waktu beberapa saat untuk diselesaikan.

Ganti variabel relevan berikut selama proses penghapusan:

  1. Hapus Pod workload:

    kubectl delete pod POD_NAME -n NAMESPACE
    
  2. Temukan nama PersistentVolumeClaim sementara:

    # 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. Hapus PVC yang dibuat di namespace:

    kubectl delete pvc PVC_NAME -n NAMESPACE
    
  4. PVC mungkin macet dalam status Terminating:

    NAME      STATUS    VOLUME  CAPACITY  ACCESS MODES  STORAGECLASS        VOLUMEATTRIBUTESCLASS  AGE
    vp-pvc  Terminating                   hyperdisk-ml  <unset>         7m23s
    

    Jika demikian, bersihkan PVC secara manual dengan menghapus finalizer-nya:

    kubectl patch pvc PVC_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
    
  5. Hapus resource GCPDataSource hanya setelah PVC dihapus. Menghapus resource GCPDataSource terlebih dahulu akan menyebabkan penghapusan PVC macet.

    kubectl delete gcpdatasource GCP_DATA_SOURCE -n NAMESPACE
    
  6. Pastikan resource sementara dihapus.

Langkah berikutnya