Mentransfer data dari Cloud Storage selama penyediaan dinamis menggunakan GKE Volume Populator


GKE Volume Populator hanya tersedia melalui undangan. Jika Anda ingin meminta akses ke GKE Volume Populator di project Google Cloud, hubungi Sales Rep Anda.

GKE Volume Populator memungkinkan Anda memuat data secara otomatis dari penyimpanan sumber ke PersistentVolumeClaim tujuan selama penyediaan dinamis, tanpa perlu menjalankan skrip atau perintah CLI tambahan untuk transfer data manual. Fitur ini menangani otomatisasi dan penyederhanaan proses transfer data dengan memanfaatkan fitur Kubernetes Volume Populator. Layanan ini menyediakan portabilitas data yang lancar sehingga Anda dapat menukar jenis penyimpanan untuk mendapatkan manfaat dari pengoptimalan harga atau performa.

Gunakan fitur ini jika Anda perlu mentransfer data dalam jumlah besar dari bucket Cloud Storage ke PersistentVolumeClaim yang didukung oleh jenis penyimpanan Google Cloud lain (seperti Parallelstore).

Anda terutama berinteraksi dengan GKE Volume Populator melalui gcloud CLI dan kubectl CLI. GKE Volume Populator didukung di cluster Autopilot dan Standard. Anda tidak perlu mengaktifkan GKE Volume Populator. Ini adalah komponen yang dikelola GKE yang diaktifkan secara default.

Manfaat

  • Jika ingin memanfaatkan performa sistem file paralel terkelola, tetapi data Anda disimpan di Cloud Storage, Anda dapat menggunakan GKE Volume Populator untuk menyederhanakan transfer data.
  • GKE Volume Populator memungkinkan portabilitas data; Anda dapat memindahkan data sesuai kebutuhan.
  • GKE Volume Populator mendukung autentikasi berbasis IAM sehingga Anda dapat mentransfer data sekaligus mempertahankan kontrol akses yang sangat terperinci.

Transfer data dari penyimpanan data sumber dan pembuatan PV untuk penyimpanan tujuan menggunakan GKE Volume Populator

Diagram menunjukkan aliran data dari penyimpanan sumber ke penyimpanan tujuan, dan pembuatan PersistentVolume untuk penyimpanan tujuan menggunakan GKE Volume Populator.

Batasan

  • GKE Volume Populator hanya mendukung bucket Cloud Storage sebagai penyimpanan sumber dan instance Parallelstore sebagai jenis penyimpanan tujuan.
  • GKE Volume Populator hanya mendukung resource StorageClass yang menetapkan volumeBindingMode ke Immediate.
  • Resource kustom GCPDataSource harus berada dalam namespace yang sama dengan workload Kubernetes Anda. Volume dengan sumber data lintas namespace tidak didukung.
  • GKE Volume Populator hanya mendukung pengikatan akun layanan IAM ke akun layanan Kubernetes Workload Identity Federation for GKE. Memberikan izin IAM ke akun layanan Kubernetes secara langsung tidak didukung.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Parallelstore API dan Google Kubernetes Engine API.
  • Aktifkan API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan

Untuk menggunakan GKE Volume Populator, cluster Anda harus memenuhi persyaratan berikut:

  • Gunakan cluster GKE versi 1.31.1-gke.1729000 atau yang lebih baru.
  • Aktifkan driver CSI Parallelstore. GKE mengaktifkan driver CSI untuk Anda secara default di cluster GKE Autopilot baru dan yang sudah ada. Di cluster Standard baru dan yang sudah ada, Anda harus mengaktifkan driver CSI.

Menyiapkan lingkungan Anda

Bagian ini membahas langkah-langkah untuk membuat cluster GKE dan menyiapkan izin yang diperlukan untuk menggunakan GKE Volume Populator.

Menyiapkan jaringan VPC

Anda harus menentukan jaringan Virtual Private Cloud (VPC) yang sama saat membuat instance Parallelstore dan VM Compute Engine klien atau cluster GKE. Agar VPC dapat terhubung secara pribadi ke layanan Google Cloud tanpa mengekspos traffic ke internet publik, Anda perlu melakukan konfigurasi satu kali untuk akses layanan pribadi (PSA), jika belum melakukannya.

Untuk mengonfigurasi PSA, ikuti langkah-langkah berikut:

  1. Konfigurasikan izin IAM Compute Network Admin (roles/compute.networkAdmin) untuk menyiapkan peering jaringan bagi project Anda.

    Untuk memberikan peran, jalankan perintah berikut:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="user:EMAIL_ADDRESS" \
        --role=roles/compute.networkAdmin
    

    Ganti EMAIL_ADDRESS dengan alamat email Anda.

  2. Aktifkan jaringan layanan:

    gcloud services enable servicenetworking.googleapis.com
    
  3. Buat jaringan VPC:

    gcloud compute networks create NETWORK_NAME \
      --subnet-mode=auto \
      --mtu=8896 \
      --project=PROJECT_ID
    

    Ganti kode berikut:

    • NETWORK_NAME: nama jaringan VPC tempat Anda akan membuat instance Parallelstore.
    • PROJECT_ID: project ID Google Cloud Anda.
  4. Buat rentang IP.

    Akses layanan pribadi memerlukan rentang alamat IP (blok CIDR) dengan panjang awalan setidaknya /24 (256 alamat). Parallelstore mencadangkan 64 alamat per instance, yang berarti Anda dapat menggunakan kembali rentang IP ini dengan layanan lain atau instance Parallelstore lainnya jika diperlukan.

    gcloud compute addresses create IP_RANGE_NAME \
      --global \
      --purpose=VPC_PEERING \
      --prefix-length=24 \
      --description="Parallelstore VPC Peering" \
      --network=NETWORK_NAME \
      --project=PROJECT_ID
    

    Ganti IP_RANGE_NAME dengan nama rentang IP jaringan VPC.

  5. Tetapkan variabel lingkungan dengan rentang CIDR yang terkait dengan rentang yang Anda buat di langkah sebelumnya:

    CIDR_RANGE=$(
      gcloud compute addresses describe IP_RANGE_NAME \
        --global  \
        --format="value[separator=/](address, prefixLength)" \
        --project=PROJECT_ID \
    )
    
  6. Buat aturan firewall untuk mengizinkan traffic TCP dari rentang IP yang Anda buat:

    gcloud compute firewall-rules create FIREWALL_NAME \
      --allow=tcp \
      --network=NETWORK_NAME \
      --source-ranges=$CIDR_RANGE \
      --project=PROJECT_ID
    

    Ganti FIREWALL_NAME dengan nama aturan firewall untuk mengizinkan traffic TCP dari rentang IP yang akan Anda buat.

  7. Hubungkan peering:

    gcloud services vpc-peerings connect \
      --network=NETWORK_NAME \
      --ranges=IP_RANGE_NAME \
      --project=PROJECT_ID \
      --service=servicenetworking.googleapis.com
    

Jika Anda mengalami masalah saat menyiapkan jaringan VPC, periksa panduan pemecahan masalah Parallelstore.

Membuat cluster GKE

Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai dengan kebutuhan workload Anda, lihat Memilih mode operasi GKE.

Autopilot

Untuk membuat cluster GKE menggunakan Autopilot, jalankan perintah berikut:

gcloud container clusters create-auto CLUSTER_NAME  \
    --network=NETWORK_NAME  \
    --cluster-version=CLUSTER_VERSION \
    --location=CLUSTER_LOCATION

GKE mengaktifkan Workload Identity Federation for GKE dan Driver CSI Parallelstore secara default di cluster Autopilot.

Ganti nilai berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • CLUSTER_VERSION : nomor versi GKE. Anda harus menentukan 1.31.1-gke.1729000 atau yang lebih baru.
  • NETWORK_NAME: nama jaringan VPC yang Anda buat untuk instance Parallelstore. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi jaringan VPC.
  • CLUSTER_LOCATION: region tempat Anda ingin membuat cluster. Sebaiknya buat cluster di lokasi Parallelstore yang didukung untuk performa terbaik. Jika ingin membuat cluster di lokasi Parallelstore yang tidak didukung, saat membuat StorageClass Parallelstore, Anda harus menentukan topologi kustom yang menggunakan lokasi Parallelstore yang didukung. Jika tidak, penyediaan akan gagal.

Standard

Buat cluster Standard dengan mengaktifkan Parallelstore CSI Driver dan Workload Identity Federation untuk GKE menggunakan perintah berikut:

gcloud container clusters create CLUSTER_NAME \
    --addons=ParallelstoreCsiDriver \
    --cluster-version=CLUSTER_VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --network=NETWORK_NAME \
    --location=CLUSTER_LOCATION

Ganti nilai berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • CLUSTER_VERSION: nomor versi GKE. Anda harus menentukan 1.31.1-gke.1729000 atau yang lebih baru.
  • PROJECT_ID: project ID Google Cloud Anda.
  • NETWORK_NAME: nama jaringan VPC yang Anda buat untuk instance Parallelstore. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi jaringan VPC.
  • CLUSTER_LOCATION: region atau zona tempat Anda ingin membuat cluster. Sebaiknya buat cluster di lokasi Parallelstore yang didukung untuk performa terbaik. Jika ingin membuat cluster di lokasi Parallelstore yang tidak didukung, saat membuat StorageClass Parallelstore, Anda harus menentukan topologi kustom yang menggunakan lokasi Parallelstore yang didukung. Jika tidak, penyediaan akan gagal.

Menyiapkan izin yang diperlukan

Untuk mentransfer data dari bucket Cloud Storage, Anda perlu menyiapkan izin untuk Workload Identity Federation untuk GKE.

  1. Membuat namespace Kubernetes:

    kubectl create namespace NAMESPACE
    

    Ganti NAMESPACE dengan namespace tempat beban kerja Anda akan dijalankan.

  2. Buat akun layanan Kubernetes.

    kubectl create serviceaccount KSA_NAME \
        --namespace=NAMESPACE
    

    Ganti KSA_NAME dengan nama akun layanan Kubernetes yang digunakan Pod Anda untuk melakukan autentikasi ke Google Cloud API.

  3. Buat akun layanan IAM. Anda juga dapat menggunakan akun layanan IAM yang ada di project apa pun di organisasi Anda:

    gcloud iam service-accounts create IAM_SA_NAME \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • IAM_SA_NAME: nama untuk akun layanan IAM Anda.
    • PROJECT_ID: project ID Google Cloud Anda.
  4. Berikan peran roles/storage.objectViewer ke akun layanan IAM Anda agar dapat mengakses bucket Cloud Storage:

    gcloud storage buckets \
        add-iam-policy-binding gs://GCS_BUCKET \
        --member "serviceAccount:IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/storage.objectViewer"
    

    Ganti GCS_BUCKET dengan nama bucket Cloud Storage Anda.

  5. Buat kebijakan izin IAM yang memberi akun layanan Kubernetes akses untuk meniru identitas akun layanan IAM:

    gcloud iam service-accounts \
        add-iam-policy-binding IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
    
  6. Anotasikan akun layanan Kubernetes agar GKE melihat link antara akun layanan.

    kubectl annotate serviceaccount KSA_NAME \
        --namespace NAMESPACE \
        iam.gke.io/gcp-service-account=IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    
  7. Buat identitas layanan Parallelstore:

    gcloud beta services identity create \
        --service=parallelstore.googleapis.com \
        --project=PROJECT_ID
    
  8. Berikan peran roles/iam.serviceAccountTokenCreator kepada identitas layanan Parallelstore agar dapat meniru identitas akun layanan IAM. Tetapkan variabel lingkungan PROJECT_NUMBER agar Anda dapat menggunakannya di langkah berikutnya.

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    gcloud iam service-accounts \
        add-iam-policy-binding "IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --member=serviceAccount:"service-${PROJECT_NUMBER?}@gcp-sa-parallelstore.iam.gserviceaccount.com" \
        --role=roles/iam.serviceAccountTokenCreator
    

    Nilai PROJECT_NUMBER adalah ID unik yang dihasilkan secara otomatis untuk project Anda. Untuk menemukan nilai ini, lihat Membuat dan mengelola project.

  9. Berikan peran roles/iam.serviceAccountUser kepada identitas layanan Parallelstore agar dapat mengakses semua resource yang dapat diakses oleh akun layanan IAM:

    gcloud iam service-accounts \
        add-iam-policy-binding "IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --member=serviceAccount:"service-${PROJECT_NUMBER?}@gcp-sa-parallelstore.iam.gserviceaccount.com" \
        --role=roles/iam.serviceAccountUser
    
  10. Berikan peran roles/iam.serviceAccountUser ke identitas layanan GKE agar dapat mengakses semua resource yang dapat diakses oleh akun layanan IAM. Langkah ini tidak diperlukan jika cluster GKE dan akun layanan IAM berada dalam project yang sama.

    gcloud iam service-accounts \
        add-iam-policy-binding "IAM_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --member=serviceAccount:"service-${PROJECT_NUMBER?}@container-engine-robot.iam.gserviceaccount.com" \
        --role=roles/iam.serviceAccountUser
    

Membuat volume Parallelstore dengan data yang dimuat sebelumnya

Bagian berikut menjelaskan proses umum untuk membuat volume Parallelstore dengan data yang dimuat sebelumnya dari bucket Cloud Storage, menggunakan GKE Volume Populator.

  1. Buat resource GCPDataSource.
  2. Membuat StorageClass Parallelstore.
  3. Buat PersistentVolumeClaim untuk mengakses volume.
  4. Verifikasi bahwa penyediaan PersistentVolumeClaim telah selesai.
  5. (Opsional) Lihat progres transfer data.
  6. Buat beban kerja yang menggunakan volume.

Membuat resource GCPDataSource

Untuk menggunakan GKE Volume Populator, buat resource kustom GCPDataSource. Resource ini menentukan properti penyimpanan sumber yang akan digunakan untuk pengisian volume.

  1. Simpan manifes berikut dalam file bernama 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. Lihat referensi CRD GCPDataSource untuk mengetahui detail selengkapnya.
    • NAMESPACE: namespace tempat beban kerja Anda akan berjalan. Nilai namespace harus sama dengan namespace workload Anda.
    • KSA_NAME: nama akun layanan Kubernetes yang digunakan Pod Anda untuk melakukan autentikasi ke Google Cloud API. Nilai cloudStorage.serviceAccountName harus berupa akun layanan Kubernetes yang Anda siapkan untuk Workload Identity Federation untuk GKE pada langkah Menyiapkan izin yang diperlukan.
    • GCS_BUCKET: nama bucket Cloud Storage Anda. Atau, Anda juga dapat menentukan gs://GCS_BUCKET/PATH_INSIDE_BUCKET/ untuk kolom uri.
  2. Buat resource GCPDataSource dengan menjalankan perintah ini:

    kubectl apply -f gcpdatasource.yaml
    

Membuat StorageClass Parallelstore

Buat StorageClass untuk mengarahkan driver CSI Parallelstore guna menyediakan instance Parallelstore di region yang sama dengan cluster GKE Anda. Hal ini memastikan performa I/O yang optimal.

  1. Simpan manifes berikut sebagai parallelstore-class.yaml. Pastikan kolom volumeBindingMode dalam definisi StorageClass ditetapkan ke Immediate.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: parallelstore-class
    provisioner: parallelstore.csi.storage.gke.io
    volumeBindingMode: Immediate
    reclaimPolicy: Delete
    
  2. Buat StorageClass dengan menjalankan perintah ini:

    kubectl apply -f parallelstore-class.yaml
    

Jika Anda ingin membuat StorageClass kustom dengan topologi tertentu, lihat panduan CSI Parallelstore.

Membuat PersistentVolumeClaim untuk mengakses volume

File manifes berikut menunjukkan contoh cara membuat PersistentVolumeClaim dalam mode akses ReadWriteMany yang mereferensikan StorageClass yang Anda buat sebelumnya.

  1. Simpan manifes berikut dalam file bernama volume-populator-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: PVC_NAME
      namespace: NAMESPACE
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: parallelstore-class
      resources:
        requests:
          storage: 12Gi
      dataSourceRef:
        apiGroup: datalayer.gke.io
        kind: GCPDataSource
        name: GCP_DATA_SOURCE
    

    Ganti nilai berikut:

    • PVC_NAME: nama PersistentVolumeClaim tempat Anda ingin mentransfer data. PersistentVolumeClaim harus didukung oleh instance Parallelstore.
    • NAMESPACE: namespace tempat beban kerja Anda akan berjalan. Nilai namespace harus sama dengan namespace workload Anda.
    • GCP_DATA_SOURCE: nama CRD GCPDataSource yang menyimpan referensi ke bucket Cloud Storage Anda. Lihat referensi CRD GCPDataSource untuk mengetahui detail selengkapnya.
  2. Buat PersistentVolumeClaim dengan menjalankan perintah berikut:

    kubectl apply -f volume-populator-pvc.yaml
    

GKE tidak akan menjadwalkan Pod workload hingga penyediaan PersistentVolumeClaim selesai. Untuk memeriksa progres transfer data, lihat Melihat progres transfer data. Jika Anda mengalami error selama penyediaan, lihat Pemecahan masalah.

Memverifikasi bahwa penyediaan PersistentVolumeClaim telah selesai

GKE Volume Populator menggunakan PersistentVolumeClaim sementara di namespace gke-managed-volumepopulator untuk penyediaan volume.

PersistentVolumeClaim sementara pada dasarnya adalah snapshot PersistentVolumeClaim Anda yang masih dalam pengiriman (menunggu data dimuat sepenuhnya). Namanya memiliki format prime-YOUR_PVC_UID.

Untuk memeriksa statusnya:

  1. Jalankan perintah berikut:

    PVC_UID=$(kubectl get pvc PVC_NAME -n NAMESPACE -o yaml | grep uid | awk '{print $2}')
    
    TEMP_PVC=prime-$PVC_UID
    
    echo $TEMP_PVC
    
    kubectl describe pvc ${TEMP_PVC?} -n gke-managed-volumepopulator
    

    Jika output kosong, artinya PersistentVolumeClaim sementara tidak dibuat. Jika demikian, lihat bagian Pemecahan masalah.

    Jika penyediaan berhasil, output-nya akan mirip dengan berikut ini. Cari log ProvisioningSucceeded:

    Warning  ProvisioningFailed     9m12s                   parallelstore.csi.storage.gke.io_gke-10fedd76bae2494db688-2237-793f-vm_5f284e53-b25c-46bb-b231-49e894cbba6c  failed to provision volume with StorageClass "parallelstore-class": rpc error: code = DeadlineExceeded desc = context deadline exceeded
    Warning  ProvisioningFailed     3m41s (x11 over 9m11s)  parallelstore.csi.storage.gke.io_gke-10fedd76bae2494db688-2237-793f-vm_5f284e53-b25c-46bb-b231-49e894cbba6c  failed to provision volume with StorageClass "parallelstore-class": rpc error: code = DeadlineExceeded desc = Volume pvc-808e41a4-b688-4afe-9131-162fe5d672ec not ready, current state: CREATING
    Normal   ExternalProvisioning   3m10s (x43 over 13m)    persistentvolume-controller                                                                                  Waiting for a volume to be created either by the external provisioner 'parallelstore.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  Provisioning  8s (x13 over 10m)  "xxx"  External provisioner is provisioning volume for claim "xxx"
    Normal  ProvisioningSucceeded  7s  "xxx"  Successfully provisioned volume "xxx"
    
  2. Periksa apakah pembuatan instance Parallelstore telah dimulai.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=-
    

    Outputnya mirip dengan yang berikut ini. Pastikan volume Anda dalam status CREATING. Setelah pembuatan instance Parallelstore selesai, status akan berubah menjadi ACTIVE.

    "projects/PROJECT_ID/locations/<my-location>/<my-volume>"  12000  2024-10-09T17:59:42.582857261Z  2024-10-09T17:59:42.582857261Z  CREATING  projects/PROJECT_ID/global/NETWORK_NAME
    

Jika penyediaan gagal, lihat Panduan pemecahan masalah Parallelstore untuk panduan tambahan.

(Opsional) Melihat progres transfer data

Bagian ini menunjukkan cara melacak progres transfer data dari bucket Cloud Storage ke volume Parallelstore. Anda dapat melakukannya untuk memantau status transfer dan memastikan data Anda berhasil disalin. Anda juga harus menjalankan perintah ini jika operasi binding PersistentVolumeClaim memakan waktu terlalu lama.

  1. Verifikasi status PersistentVolumeClaim Anda dengan menjalankan perintah berikut:

    kubectl describe pvc PVC_NAME -n NAMESPACE
    
  2. Periksa pesan peristiwa PersistentVolumeClaim untuk menemukan progres transfer data. GKE mencatat pesan sekitar satu kali per menit. Outputnya mirip dengan yang berikut ini:

    Reason                          Message
    ------                          -------
    PopulateOperationStartSuccess   Populate operation started
    PopulateOperationStartSuccess   Populate operation started
    Provisioning                    External provisioner is provisioning volume for claim "my-namespace/my-pvc"
    Provisioning                    Assuming an external populator will provision the volume
    ExternalProvisioning            Waiting for a volume to be created either by the external provisioner 'parallelstore.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.
    PopulateOperationStartSuccess   Populate operation started
    PopulatorPVCCreationProgress    objects found 7, objects copied 7, objects skipped 0. bytes found 1000020010, bytes copied 1000020010, bytes skipped 0
    PopulateOperationFinished       Populate operation finished
    PopulatorFinished               Populator finished
    

Mungkin perlu waktu beberapa saat hingga operasi pengisian dimulai; operasi ini bergantung pada ukuran file. Jika Anda tidak melihat progres transfer data setelah beberapa menit, lihat bagian Pemecahan masalah.

Membuat workload yang menggunakan volume

Bagian ini menunjukkan contoh cara membuat Pod yang menggunakan resource PersistentVolumeClaim yang Anda buat sebelumnya.

  1. Simpan manifes YAML berikut untuk Pod Anda sebagai pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE
    spec:
      volumes:
      - name: parallelstore-volume
        persistentVolumeClaim:
          claimName: PVC_NAME
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: parallelstore-volume
          mountPath: /mnt/data
    

    Ganti nilai berikut:

    • POD_NAME: nama Pod yang menjalankan beban kerja Anda.
    • NAMESPACE: namespace tempat beban kerja Anda akan berjalan. Nilai namespace harus sama dengan namespace workload Anda.
    • PVC_NAME: nama PersistentVolumeClaim tempat Anda ingin mentransfer data. PersistentVolumeClaim harus didukung oleh instance Parallelstore.
  2. Jalankan perintah berikut untuk menerapkan manifes ke cluster:

    kubectl apply -f pod.yaml
    
  3. Periksa status Pod Anda dan tunggu hingga statusnya menjadi RUNNING. PersistentVolumeClaim Anda harus terikat sebelum beban kerja dapat berjalan.

    kubectl describe pod POD_NAME -n NAMESPACE
    
  4. Pastikan file berhasil ditransfer dan dapat diakses oleh workload Anda.

    kubectl exec -it POD_NAME -n NAMESPACE -c nginx -- /bin/sh
    

    Ubah ke direktori /mnt/data dan jalankan ls:

    cd /mnt/data
    ls
    

    Output akan mencantumkan semua file yang ada di URI bucket Cloud Storage Anda.

Menghapus PersistentVolumeClaim selama penyediaan dinamis

Jika perlu menghapus PersistentVolumeClaim saat data masih ditransfer selama penyediaan dinamis, Anda memiliki dua opsi: penghapusan halus dan penghapusan paksa.

Penghapusan halus memerlukan lebih sedikit upaya, tetapi dapat lebih memakan waktu dan tidak mempertimbangkan kesalahan konfigurasi pengguna yang mencegah transfer data selesai. Penghapusan paksa menawarkan alternatif yang lebih cepat yang memungkinkan fleksibilitas dan kontrol yang lebih besar; opsi ini cocok jika Anda perlu memulai ulang atau memperbaiki kesalahan konfigurasi dengan cepat.

Penghapusan halus

Gunakan opsi penghapusan ini untuk memastikan bahwa proses transfer data selesai sebelum GKE menghapus resource terkait.

  1. Hapus Pod beban kerja jika ada, dengan menjalankan perintah ini:

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

    PVC_UID=$(kubectl get pvc PVC_NAME -n NAMESPACE -o yaml | grep uid | awk '{print $2}')
    TEMP_PVC=prime-$PVC_UID
    
    echo $TEMP_PVC
    
  3. Temukan nama PersistentVolume:

    PV_NAME=$(kubectl describe pvc ${TEMP_PVC?} -n gke-managed-volumepopulator | grep "Volume:" | awk '{print $2}')
    
    echo ${PV_NAME?}
    

    Jika output kosong, berarti PersistentVolume belum dibuat.

  4. Hapus PersistentVolumeClaim Anda dengan menjalankan perintah ini. Finalizer akan memblokir operasi penghapusan Anda. Tekan Ctrl+C, lalu lanjutkan ke langkah berikutnya.

    kubectl delete pvc PVC_NAME -n NAMESPACE
    

    Tunggu hingga transfer data selesai. GKE pada akhirnya akan menghapus instance PersistentVolumeClaim, PersistentVolume, dan Parallelstore.

  5. Pastikan resource PersistentVolumeClaim, PersistentVolumeClaim, dan PersistentVolume sementara dihapus:

    kubectl get pvc,pv -A | grep -E "${TEMP_PVC?}|PVC_NAME|${PV_NAME?}"
    
  6. Pastikan instance Parallelstore dihapus. Instance Parallelstore akan memiliki nama yang sama dengan PersistentVolume. Anda tidak perlu menjalankan perintah ini jika telah mengonfirmasi di Langkah 3 bahwa PersistentVolume tidak dibuat.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=- | grep ${PV_NAME?}
    

Penghapusan paksa

Gunakan opsi penghapusan ini jika Anda perlu menghapus PersistentVolumeClaim dan resource terkait sebelum proses transfer data selesai. Hal ini mungkin diperlukan dalam situasi saat transfer data memerlukan waktu terlalu lama atau mengalami error, atau jika Anda perlu mengklaim kembali resource dengan cepat.

  1. Hapus Pod workload jika ada:

    kubectl delete pod POD_NAME -n NAMESPACE
    
  2. Perbarui kebijakan pengambil alihan PersistentVolume ke Delete. Tindakan ini memastikan bahwa PersistentVolume, beserta penyimpanan pokoknya, akan otomatis dihapus saat PersistentVolumeClaim terkait dihapus.

    Lewati perintah berikut jika salah satu hal berikut berlaku:

    • Anda tidak ingin menghapus PersistentVolume atau penyimpanan yang mendasarinya.
    • Kebijakan pengklaiman ulang Anda saat ini adalah Retain dan Anda ingin mempertahankan penyimpanan pokok. Bersihkan instance penyimpanan dan PersistentVolume secara manual sesuai kebutuhan.
    • Perintah echo $PV_NAME berikut menghasilkan string kosong, yang berarti bahwa PersistentVolume belum dibuat.
    PV_NAME=$(kubectl describe pvc $TEMP_PVC -n gke-managed-volumepopulator | grep "Volume:" | awk '{print $2}')
    
    echo $PV_NAME
    
    kubectl patch pv $PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
    
  3. Temukan nama PersistentVolumeClaim sementara dan tetapkan variabel lingkungan untuk langkah berikutnya:

    PVC_UID=$(kubectl get pvc PVC_NAME -n NAMESPACE -o yaml | grep uid | awk '{print $2}')
    
    TEMP_PVC=prime-$PVC_UID
    
    echo $TEMP_PVC
    
  4. Hapus PersistentVolumeClaim dengan menjalankan perintah ini. Finalizer akan memblokir operasi penghapusan Anda. Tekan Ctrl+C, lalu lanjutkan ke langkah berikutnya.

    kubectl delete pvc PVC_NAME -n NAMESPACE
    
  5. Hapus finalizer datalayer.gke.io/populate-target-protection dari PersistentVolumeClaim Anda. Langkah ini diperlukan setelah menghapus PersistentVolumeClaim. Jika tidak, gke-volume-populator akan menambahkan finalizer kembali ke PersistentVolumeClaim.

    kubectl get pvc PVC_NAME -n NAMESPACE -o=json | \
    jq '.metadata.finalizers = null' | kubectl apply -f -
    
  6. Hapus PersistentVolumeClaim sementara di namespace gke-managed-volumepopulator.

    kubectl delete pvc $TEMP_PVC -n gke-managed-volumepopulator
    
  7. Pastikan resource PersistentVolumeClaim, PersistentVolumeClaim, dan PersistentVolume sementara dihapus:

    kubectl get pvc,pv -A | grep -E "${TEMP_PVC?}|PVC_NAME|${PV_NAME?}"
    
  8. Pastikan instance Parallelstore dihapus. Instance Parallelstore akan memiliki nama yang sama dengan PersistentVolume. Anda tidak perlu menjalankan perintah ini jika telah mengonfirmasi di Langkah 2 bahwa PersistentVolume tidak dibuat.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=- | grep ${PV_NAME?}
    

Pemecahan masalah

Bagian ini menunjukkan cara menyelesaikan masalah terkait GKE Volume Populator.

Sebelum melanjutkan, jalankan perintah berikut untuk memeriksa peringatan peristiwa PersistentVolumeClaim:

kubectl describe pvc PVC_NAME -n NAMESPACE

Error: An internal error has occurred

Jika Anda mengalami error berikut, ini menunjukkan bahwa error internal Parallelstore API telah terjadi.

Warning
PopulateOperationStartError
gkevolumepopulator-populator                                                            Failed to start populate operation: populate data for PVC "xxx". Import data failed, error: rpc error: code = Internal desc = An internal error has occurred ("xxx")

Untuk mengatasi masalah ini, Anda harus mengikuti langkah-langkah berikut untuk mengumpulkan data bagi Dukungan:

  1. Jalankan perintah berikut untuk mendapatkan nama PersistentVolumeClaim sementara, dengan mengganti placeholder dengan nama sebenarnya:

    PVC_UID=$(kubectl get pvc PVC_NAME -n NAMESPACE -o yaml | grep uid | awk '{print $2}')
    
    TEMP_PVC=prime-${PVC_UID?}
    
    echo ${TEMP_PVC?}
    
  2. Jalankan perintah berikut untuk mendapatkan nama volume:

    PV_NAME=$(kubectl describe pvc ${TEMP_PVC?} -n gke-managed-volumepopulator | grep "Volume:" | awk '{print $2}')
    
  3. Hubungi tim dukungan dengan pesan error, nama project Anda, dan nama volume.

Masalah izin

Jika Anda mengalami error seperti berikut selama pengisian volume, hal ini menunjukkan bahwa GKE mengalami masalah izin:

  • Bucket Cloud Storage tidak ada: PopulateOperationStartError dengan code = PermissionDenied
  • Tidak ada izin di bucket Cloud Storage atau akun layanan: PopulateOperationFailed dengan "code: "xxx" message:"Verify if bucket "xxx" exists and grant access".
  • Akun layanan tidak ditemukan: PopulateOperationStartError dengan code = Unauthenticated.

Untuk mengatasinya, periksa kembali hal berikut:

  • Akses bucket Cloud Storage: Pastikan bucket ada dan akun layanan memiliki roles/storage.objectViewer permission.
  • Akun layanan: Pastikan akun layanan Kubernetes dan akun layanan IAM ada dan ditautkan dengan benar.
  • Akun layanan Parallelstore: Pastikan akun tersebut ada dan memiliki izin yang diperlukan (roles/iam.serviceAccountTokenCreator dan roles/iam.serviceAccountUser di akun IAM).

Untuk mengetahui langkah-langkah mendetail dan perintah verifikasi, lihat Menyiapkan izin yang diperlukan. Jika error tetap berlanjut, hubungi dukungan dengan menyertakan pesan error, nama project, dan nama bucket Cloud Storage.

Error argumen tidak valid

Jika Anda mengalami error InvalidArgument, artinya Anda mungkin telah memberikan nilai yang salah di GCPDataSource atau PersistentVolumeClaim. Log error akan menentukan kolom yang tepat yang berisi data yang tidak valid. Periksa URI bucket Cloud Storage dan kolom relevan lainnya untuk memastikan keakuratannya.

Langkah selanjutnya