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

Panduan ini menjelaskan cara memuat data dalam jumlah besar dari bucket Cloud Storage ke volume Hyperdisk ML Google Kubernetes Engine (GKE) selama penyediaan dinamis menggunakan GKE Volume Populator. Untuk mengetahui informasi selengkapnya, lihat Tentang Pengisi Volume GKE.

Panduan ini ditujukan bagi spesialis penyimpanan yang membuat dan mengalokasikan penyimpanan, serta mengelola keamanan dan akses data. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Trusted Cloud 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 ML Hyperdisk. 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 kelas 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 dan Cloud Storage API.

    Aktifkan API

  2. Pastikan penagihan diaktifkan untuk Trusted Cloud 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 Trusted Cloud 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 sudah 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 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 persis saat Anda membuat class komputasi.

Biaya

Meskipun tidak ada biaya langsung untuk menggunakan GKE Volume Populator, penyimpanan dan transfer data akan menimbulkan 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 dan performa penyimpanan (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 kelas 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 penyediaan otomatis node GKE Standard tanpa penyediaan otomatis node
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 Penyediaan otomatis node dan class komputasi Mengonfigurasi node pool yang dibuat secara manual

GKE memulai Tugas transfer data setelah menyediakan PersistentVolume untuk PersistentVolumeClaim. Untuk mengisi volume ML Hyperdisk, 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 penyediaan otomatis node diaktifkan jika Anda memerlukan penskalaan otomatis dengan kontrol lebih besar atas penyediaan node.
  • Pilih Standard tanpa pengaktifan penyediaan otomatis node 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 penyediaan otomatis node)

Di cluster GKE Standard dengan penyediaan otomatis node 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 penyediaan otomatis node diaktifkan, jalankan perintah berikut:

    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
    

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang Anda buat dengan penyediaan otomatis node yang 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: Trusted Cloud 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 penyediaan otomatis node)

Untuk menggunakan Pengisi Volume GKE di cluster Standard yang tidak mengaktifkan penyediaan otomatis node, 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 penyediaan otomatis node, 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.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 penyediaan otomatis node.
  • 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 Trusted Cloud 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 penyediaan otomatis node

    Untuk cluster Autopilot, dan cluster Standard dengan penyediaan otomatis node diaktifkan, tentukan class komputasi Anda dengan bagian nodePoolAutoCreation sebagai berikut. Jika penyediaan otomatis node 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 penyediaan otomatis node

    Untuk cluster Standar tanpa penyediaan otomatis node 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 Trusted Cloud by S3NS API.
    • NAMESPACE: namespace Kubernetes yang Anda buat di langkah sebelumnya.
  3. Berikan peran yang sesuai ke 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.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 project tempat Anda membuat cluster. Trusted Cloud by S3NS Untuk menemukan nomor project Anda, lihat Mengidentifikasi project.
    • PROJECT_ID: Trusted Cloud 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 Trusted Cloud 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 ML Hyperdisk, serta untuk memicu dan mengelola proses transfer data otomatis menggunakan GKE Volume Populator:

  1. Buat resource kustom GCPDataSource 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 GKE Volume Populator.

  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 CRD GCPDataSource 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 Trusted Cloud 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 adalah 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 penyediaan otomatis node, nilai ZONE harus berupa lokasi tempat Anda membuat node.
    • Untuk cluster GKE Autopilot atau Standard dengan penyediaan otomatis node, nilai ZONE harus berupa lokasi tempat cluster Anda dapat melakukan penskalaan 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 GCPDataSource CRD yang menyimpan referensi ke bucket Cloud Storage Anda.

    Anda dapat menyesuaikan transfer data dengan menambahkan anotasi opsional ke PVC. Anotasi ini memengaruhi perilaku Tugas transfer pokok yang menyalin data ke volume ML Hyperdisk 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 ML Hyperdisk.

  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 saat 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 ML Hyperdisk.

  1. Untuk memverifikasi status PersistentVolumeClaim, jalankan perintah berikut. Anda juga dapat menjalankan perintah ini jika operasi pengikatan 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 satu kali 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
    

Mungkin perlu 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 multizona, 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 terjebak dalam status Terminating:

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

    Jika ya, 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