Panduan ini menunjukkan cara menyelesaikan masalah umum yang muncul saat mentransfer data ke cluster GKE menggunakan GKE Volume Populator. Panduan ini akan memandu Anda men-debug masalah terkait pembuatan PersistentVolumeClaim (PVC) dan PersistentVolume (PV), performa disk, serta eksekusi Job transfer data.
Memeriksa resource Kubernetes sementara
Berikut cara GKE Volume Populator menggunakan resource sementara:
- PVC sementara dibuat di namespace
gke-managed-volumepopulator
. - Untuk setiap zona yang terlibat dalam transfer, Tugas transfer, PV, dan PVC dibuat di namespace PVC Anda.
- Setelah transfer data selesai, GKE Volume Populator akan otomatis menghapus semua resource sementara ini.
Untuk memeriksa resource sementara, ikuti langkah-langkah berikut:
Simpan variabel lingkungan:
export PVC_NAME=PVC_NAME export NAMESPACE=NAMESPACE
Ganti nilai berikut:
PVC_NAME
: nama resourcePersistentVolumeClaim
.NAMESPACE
: namespace tempat workload Anda berjalan.
Periksa status:
export PVC_UID=$(kubectl get pvc ${PVC_NAME} -n ${NAMESPACE} -o jsonpath='{.metadata.uid}') export TEMP_PVC=prime-${PVC_UID} echo ${TEMP_PVC}
Periksa PVC sementara di namespace
gke-managed-volumepopulator
:kubectl describe pvc ${TEMP_PVC} -n gke-managed-volumepopulator
Dapatkan nama PVC sementara di namespace Anda:
export TEMP_PVC_LIST=($(kubectl get pvc -n "$NAMESPACE" -o json | grep -Eo "\"name\":\s*\"$TEMP_PVC[^\"]*\"" | awk -F'"' '{print $4}')) for pvc in "${TEMP_PVC_LIST[@]}"; do echo "$pvc" done
Periksa PVC sementara:
kubectl describe pvc "${TEMP_PVC_LIST[0]}" -n $NAMESPACE
Pengisi Volume GKE membuat Tugas transfer di setiap zona (satu untuk volume Hyperdisk ML satu zona dan beberapa untuk volume Hyperdisk ML multi-zona). Dapatkan nama Tugas transfer menggunakan perintah berikut:
export TRANSFER_JOB=$(kubectl get pvc "${TEMP_PVC_LIST[0]}" -n "$NAMESPACE" -o "jsonpath={.metadata.annotations['volume-populator\.datalayer\.gke\.io/pd-transfer-requestid']}") echo $TRANSFER_JOB
Periksa Tugas transfer:
kubectl describe job $TRANSFER_JOB -n $NAMESPACE
Dapatkan nama Pod dari tugas transfer:
export TRANSFER_POD=$(kubectl get pods -n "$NAMESPACE" -l "job-name=$TRANSFER_JOB" -o jsonpath='{.items[0].metadata.name}') echo $TRANSFER_POD
Periksa Pod:
kubectl describe pod $TRANSFER_POD -n $NAMESPACE
Jika Anda membuat PVC di beberapa zona, Pengelola Volume GKE akan membuat PVC sementara yang berbeda dan mentransfer resource Job untuk setiap zona yang ditentukan. Untuk memeriksa resource setiap zona yang terlibat dalam transfer, ganti
0
indeks untukTEMP_PVC_LIST
dengan angka lain.
Memeriksa apakah Workload Identity Federation diaktifkan
Workload Identity Federation memungkinkan pod transfer mengakses layanan secara aman. Trusted Cloud by S3NS Jika Pod transfer tidak dapat melakukan autentikasi ke Trusted Cloud by S3NS, pastikan Workload Identity Federation untuk GKE diaktifkan di cluster Anda.
Untuk memeriksa apakah
workloadIdentityConfig
diaktifkan di cluster Anda, jalankan perintah berikut:gcloud container clusters describe CLUSTER_NAME --location=LOCATION \ --project=PROJECT_ID \ --format="value(workloadIdentityConfig)"
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.LOCATION
: region atau zona komputasi cluster Anda.PROJECT_ID
: Trusted Cloud Project ID Anda.
Cari output berikut dalam perintah:
PROJECT_ID.svc.id.goog
Jika
workloadIdentityConfig
tidak ada dalam output, aktifkan Workload Identity Federation for GKE.
Jalur transfer tidak valid
Jika Anda mengalami error yang serupa dengan berikut, jalur transfer yang ditentukan pada resource GCPDatasource
salah, dan transfer akan gagal.
ERROR: (gcloud.storage.cp) The following URLs matched no objects or files:
gs://datasets-pd/llama2-7b-hfa/
Untuk mengatasi masalah ini, hapus resource GCPDatasource
, perbarui kolom uri
dengan nilai yang benar, lalu buat ulang resource.
Izin tidak memadai untuk mengakses bucket
Jika akun layanan Kubernetes tidak memiliki akses ke URI bucket yang ditentukan dalam resource GCPDatasource
, tugas transfer akan gagal. Errornya mungkin terlihat seperti berikut:
ERROR: (gcloud.storage.cp) [test-gke-dev.svc.id.goog] does not have permission to access b instance [small-bucket-7] (or it may not exist): Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist). This command is authenticated as test-gke-dev.svc.id.goog which is the active account specified by the [core/account] property.
Untuk menyelesaikan masalah ini, berikan izin yang diperlukan untuk mentransfer data dari bucket ke disk.
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
: nomor project Trusted Cloud Anda.PROJECT_ID
: Trusted Cloud Project ID Anda.NAMESPACE
: namespace tempat workload Anda berjalan.KSA_NAME
: nama akun layanan Kubernetes Anda.ROLE
: peran IAM yang memberikan izin yang diperlukan untuk mengakses bucket. Misalnya, gunakanroles/storage.objectViewer
untuk memberikan akses hanya baca ke bucket.
Error: error generating accessibility requirements
Anda mungkin melihat error sementara berikut saat memeriksa PVC di namespace gke-managed-volumepopulator
:
Error: error generating accessibility requirements: no available topology found.
Jika Anda menggunakan cluster GKE Autopilot atau cluster Standard dengan penyediaan otomatis node yang diaktifkan, error ini dapat terjadi karena tidak ada node yang Ready
di cluster Anda. Error ini akan teratasi dengan sendirinya dalam beberapa menit setelah penyediaan otomatis node meningkatkan skala node baru.
Pod Transfer dijadwalkan Pending
untuk waktu yang lama
Peristiwa PVC Anda mungkin menunjukkan bahwa status Pod transfer adalah Pending
untuk waktu yang lama.
Untuk memeriksa peristiwa Tugas transfer guna memverifikasi apakah penjadwalan Tugas gagal, ikuti langkah-langkah berikut:
Deskripsikan PVC:
kubectl describe pvc $PVC_NAME -n $NAMESPACE
Outputnya mirip dengan hal berikut ini:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal TransferInProgress 1s (x2 over 2s) gkevolumepopulator-populator populateCompleteFn: For PVC pd-pvc79 in namespace default, job with request ID populator-job-0b93fec4-5490-4e02-af32-15b16435d559 is still active with pod status as - Phase: Pending
Untuk memeriksa Pod transfer, ikuti langkah-langkah dalam Memeriksa resource Kubernetes sementara.
Outputnya mirip dengan hal berikut ini:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 2m50s default-scheduler 0/3 nodes are available: 1 Insufficient cpu, 2 node(s) had volume node affinity conflict. preemption: 0/3 nodes are available: 1 No preemption victims found for incoming pod, 2 Preemption is not helpful for scheduling. Warning FailedScheduling 37s (x2 over 39s) default-scheduler 0/3 nodes are available: 1 Insufficient cpu, 2 node(s) had volume node affinity conflict. preemption: 0/3 nodes are available: 1 No preemption victims found for incoming pod, 2 Preemption is not helpful for scheduling. Normal NotTriggerScaleUp 2m40s cluster-autoscaler pod didn't trigger scale-up:
Jika Anda melihat pesan
NotTriggerScaleUp
, periksa apakah cluster Anda telah mengaktifkan penyediaan otomatis node:gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(autoscaling.enableNodeAutoprovisioning)"
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.LOCATION
: region atau zona komputasi cluster Anda.
Jika output menampilkan 'False', aktifkan penyediaan otomatis node menggunakan perintah berikut:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --location=LOCATION \ --project=PROJECT_ID \ --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 perbarui untuk mengaktifkan penyediaan otomatis node.LOCATION
: zona atau region komputasi untuk cluster Anda. Misalnyaus-central1-a
atauus-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.
Jika penyediaan otomatis node diaktifkan, pastikan penyediaan otomatis node memiliki
resourceLimits
penskalaan otomatis yang memadai untuk meningkatkan skala Tugas transfer. Tugas transfer menggunakan 24 vCPU secara default.gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(autoscaling.resourceLimits)"
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.LOCATION
: region atau zona komputasi cluster Anda.
Outputnya mirip dengan hal berikut ini:
{'maximum': '1000000000', 'resourceType': 'cpu'};{'maximum': '1000000000', 'resourceType': 'memory'};
Jika penyediaan otomatis node tidak memiliki batas penskalaan otomatis yang memadai, perbarui cluster dengan konfigurasi yang benar.
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --max-cpu MAXIMUM_CPU \ --max-memory MAXIMUM_MEMORY
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang Anda perbarui untuk mengaktifkan penyediaan otomatis node.LOCATION
: zona atau region komputasi untuk cluster Anda. Misalnyaus-central1-a
atauus-central1
.PROJECT_ID
: Trusted Cloud by S3NS Project ID Anda.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.
Untuk cluster Standard tanpa penyediaan otomatis node yang diaktifkan, pastikan node yang Anda buat untuk Job transfer memiliki label class komputasi yang diperlukan:
kubectl get node -l cloud.google.com/compute-class=gcs-to-hdml-compute-class
Jika output tidak mencantumkan node yang Anda buat untuk tugas transfer, tambahkan label class komputasi
gcs-to-hdml-compute-class
ke node:kubectl label node NODE_NAME cloud.google.com/compute-class=gcs-to-hdml-compute-class
Ganti
NODE_NAME
dengan nama node tempat Anda ingin menambahkan label kelas komputasi.
GCE quota exceeded
error
Anda mungkin mengalami pesan error yang mirip dengan berikut saat memeriksa Pod untuk Tugas transfer:
Node scale up in zones us-west1-b associated with this pod failed: GCE quota exceeded. Pod is at risk of not being scheduled.
Untuk memeriksa Pod transfer, ikuti langkah-langkah dalam Memeriksa resource Kubernetes sementara.
Untuk mengatasi error, tingkatkan kuota atau hapus resource yang ada yang mungkin mencegah penskalaan. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah error kuota.
Error HDML_TOTAL_THROUGHPUT
Hyperdisk ML terlampaui
Jika PVC sementara di namespace gke-managed-volumepopulator
gagal menyediakan volume Hyperdisk ML, kemungkinan kuota regional untuk membuat volume Hyperdisk ML baru untuk transfer data Anda telah terlampaui.
Untuk mengonfirmasi bahwa penyediaan volume Hyperdisk ML gagal karena masalah kuota regional, periksa log peristiwa yang terkait dengan PVC sementara yang dibuat oleh Pengisi Volume GKE. Ikuti langkah-langkah berikut:
Simpan variabel lingkungan yang relevan:
export PVC_NAME=PVC_NAME export NAMESPACE=NAMESPACE
Ganti nilai berikut:
PVC_NAME
: nama resourcePersistentVolumeClaim
.NAMESPACE
: namespace tempat workload Anda berjalan.
Periksa status PVC sementara:
export PVC_UID=$(kubectl get pvc ${PVC_NAME} -n ${NAMESPACE} -o jsonpath='{.metadata.uid}') export TEMP_PVC=prime-$PVC_UID echo $TEMP_PVC kubectl describe pvc $TEMP_PVC -n gke-managed-volumepopulator
Periksa peristiwa PVC untuk menemukan
QUOTA_EXCEEDED error
, yang mirip dengan berikut ini:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 105s pd.csi.storage.gke.io_gke-3ef909a7688d424b94a2-d0d9-b185-vm_6a77d057-54e3-415a-8b39-82b666516b6b failed to provision volume with StorageClass "pd-sc": rpc error: code = Unavailable desc = CreateVolume failed: rpc error: code = Unavailable desc = CreateVolume failed to create single zonal disk pvc-73c69fa8-d23f-4dcb-a244-bcd120a3c221: failed to insert zonal disk: unknown error when polling the operation: rpc error: code = ResourceExhausted desc = operation operation-1739194889804-62dc9dd9a1cae-9d24a5ad-938e5299 failed (QUOTA_EXCEEDED): Quota 'HDML_TOTAL_THROUGHPUT' exceeded. Limit: 30720.0 in region us-central1
Untuk menyelesaikan masalah ini:
- Minta kuota tambahan untuk membuat volume Hyperdisk ML baru di project Anda.
- Hapus disk Hyperdisk ML yang tidak digunakan di project Anda.
Tidak ada ruang tersisa di perangkat
Jika Anda melihat pesan error No space left on device
di PVC, berarti volume ML Hyperdisk sudah penuh dan tidak ada lagi data yang dapat ditulis ke dalamnya. Errornya mungkin terlihat seperti berikut:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning TransferContainerFailed 57m gkevolumepopulator-populator populateCompleteFn: For PVC vp-pvc in namespace default, job with request ID populator-job-c2a2a377-6168-4ff1-afc8-c4ca713c43e2 for zone us-central1-c has a failed pod container with message: on device
ERROR: Failed to download one or more components of sliced download.
ERROR: [Errno 28] No space left on device
Untuk mengatasi masalah ini, hapus PVC Anda, tingkatkan nilai untuk kolom spec.resources.requests.storage
dalam manifes PVC Anda, dan buat ulang PVC untuk memulai proses transfer lagi.
Langkah berikutnya
- Jika Anda tidak dapat menemukan solusi atas masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan.