Menskalakan penyimpanan Managed Lustre di GKE

Dokumen ini menjelaskan cara meningkatkan kapasitas penyimpanan volume Managed Lustre secara dinamis untuk workload stateful Anda di Google Kubernetes Engine (GKE) tanpa mengganggu aplikasi Anda.

Misalnya, jika tugas pelatihan AI/ML yang berjalan lama memiliki persyaratan penyimpanan yang dinamis dan tidak dapat diprediksi, aktifkan perluasan volume Managed Lustre untuk meningkatkan kapasitas penyimpanan Managed Lustre PersistentVolume (PV) yang ada.

Dokumen ini ditujukan untuk admin dan operator Platform, DevOps, administrator Penyimpanan, dan engineer machine learning (ML) yang mengelola penyimpanan untuk workload stateful di GKE.

Saat Anda memperluas volume, biaya Anda akan meningkat berdasarkan kapasitas baru yang lebih besar, sesuai dengan harga Managed Lustre standarGoogle Cloud .

Sebelum memulai

Menyiapkan lingkungan Anda.

Persyaratan

Pastikan Anda memenuhi persyaratan berikut:

  • Anda harus memiliki cluster GKE versi 1.35.0-gke.2331000 atau yang lebih baru.
  • Anda harus mengaktifkan driver CSI Managed Lustre pada cluster yang ada. Driver dinonaktifkan secara default di cluster Standard dan Autopilot.

Batasan

  • Anda hanya dapat meningkatkan ukuran volume yang ada, dan Anda tidak dapat mengurangi ukurannya.
  • Anda tidak dapat menggunakan perluasan volume dengan mode akses ReadOnlyMany.
  • Saat mengubah ukuran volume Lustre, ikuti batas kapasitas minimum dan maksimum serta ukuran langkah yang ditetapkan oleh tingkat performa volume Anda. Untuk mengetahui informasi selengkapnya, lihat Pertimbangan performa.
  • Tentukan ukuran volume Lustre dalam GiB sebagai kelipatan 1000. Kubernetes menerjemahkan unit seperti Ti menjadi nilai biner (misalnya, 18 Ti ditafsirkan sebagai 18.432 GiB), yang menyebabkan Lustre API menolak permintaan.

Mengaktifkan perluasan volume untuk StorageClass

  1. Verifikasi apakah StorageClass Anda mendukung ekspansi volume:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    

    Ganti STORAGECLASS_NAME dengan nama StorageClass Anda.

    Jika perintah tidak menghasilkan apa pun atau menampilkan false, Anda harus memperbarui konfigurasi StorageClass secara eksplisit untuk mengizinkan ekspansi.

  2. Buka konfigurasi StorageClass untuk mengedit:

    kubectl edit storageclass STORAGECLASS_NAME
    
  3. Di editor, tambahkan kolom allowVolumeExpansion: true ke konfigurasi StorageClass Anda:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-sc
    provisioner: lustre.csi.storage.gke.io
    ...
    allowVolumeExpansion: true

Memperluas PersistentVolumeClaim

Untuk memulai ekspansi volume, edit PersistentVolumeClaim (PVC) Anda untuk meminta peningkatan ukuran volume.

  1. Identifikasi ukuran baru yang valid untuk perluasan seperti yang dijelaskan dalam Menentukan ukuran perluasan yang valid.
  2. Buka konfigurasi PVC untuk mengedit:

    kubectl edit pvc PVC_NAME
    

    Ganti PVC_NAME dengan nama PVC Anda.

  3. Di editor, perbarui kolom spec.resources.requests.storage dengan ukuran perluasan yang valid. Misalnya, untuk memperluas volume dari 9000Gi menjadi 18000Gi, ubah kolom storage sebagai berikut:

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 18000Gi # Changed from 9000Gi
    

Memverifikasi ekspansi volume

  1. Pantau progres perluasan dengan meninjau peristiwa PVC:

    kubectl describe pvc PVC_NAME
    

    Peristiwa berikut dalam output PVC menunjukkan progres atau hasil saat ini dari permintaan perluasan volume:

    • ExternalExpanding: menunjukkan bahwa Kubernetes sedang menunggu external-resizer untuk memperluas PVC.
    • Resizing: menunjukkan bahwa operasi pengubahan ukuran sedang berlangsung. Operasi ini dapat memerlukan waktu hingga 90 menit untuk peningkatan kapasitas yang lebih besar.
    • VolumeResizeSuccessful: mengonfirmasi bahwa volume telah berhasil diperluas.
    • VolumeResizeFailed: menunjukkan bahwa terjadi error. Pesan peristiwa berisi detail dari Google Cloud Managed Lustre API. Status ini mungkin bersifat sementara dan dapat teratasi dengan sendirinya.
  2. Setelah ekspansi selesai, verifikasi konfigurasi PVC yang diperbarui:

    kubectl get pvc PVC_NAME -o yaml
    
  3. Pastikan kolom status.capacity mencerminkan ukuran baru yang telah di-increment.

Jika Anda mengalami masalah selama proses perluasan, lihat Pemecahan masalah.

Menentukan ukuran perluasan yang valid

Untuk menentukan ukuran volume baru, pertama-tama identifikasi tingkat performa volume dan ukuran langkah yang sesuai.

Mengidentifikasi tingkat performa volume

Anda dapat menemukan tingkat performa volume menggunakan salah satu opsi berikut:

StorageClass

Jalankan perintah berikut dan cari nilai perUnitStorageThroughput (misalnya, 1000). Nilai ini menunjukkan tingkat performa dalam MBps per TiB.

kubectl get sc STORAGECLASS_NAME -o yaml

Ganti STORAGECLASS_NAME dengan nama StorageClass Anda.

Instance Lustre

Identifikasi tingkat performa volume Anda dengan memeriksa properti instance Managed Lustre yang mendasarinya secara langsung:

  1. Temukan nama PV yang terikat ke PVC Anda:

    kubectl get pvc PVC_NAME
    

    Ganti PVC_NAME dengan nama PVC Anda.

    Outputnya mirip dengan yang berikut ini. Catat nama PV di kolom VOLUME, misalnya, pv-lustre.

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-lustre   Bound    pv-lustre   9000Gi     RWX            lustre-rwx     <unset>                 26m
    
  2. Temukan lokasi volume dan nama instance di kolom volumeHandle:

    kubectl get pv PV_NAME -o yaml
    

    Ganti PV_NAME dengan nama PV dari langkah sebelumnya.

    Nilai volumeHandle diformat sebagai PROJECT_ID/LOCATION/INSTANCE_NAME. Catat INSTANCE_NAME dan LOCATION untuk langkah berikutnya.

  3. Periksa properti tingkat performa dengan mendeskripsikan instance Managed Lustre:

    gcloud lustre instances describe INSTANCE_NAME --location=LOCATION
    

    Ganti INSTANCE_NAME dan LOCATION dengan nilai dari langkah sebelumnya.

    Pada output, cari kolom perUnitStorageThroughput. Nilai ini menunjukkan tingkat performa dalam MBps per TiB.

Batas kapasitas dan ukuran langkah

Setelah mengidentifikasi tingkat performa, lihat tabel berikut untuk menemukan batas kapasitas terkait dan ukuran langkah yang diperlukan.

Tingkat (perUnitStorageThroughput) Kapasitas minimum Kapasitas maks. Ukuran langkah
1.000 MBps per TiB 9.000 GiB 954.000 GiB (~1 PiB) 9.000 GiB
500 MBps per TiB 18.000 GiB 1.908.000 GiB (~2 PiB) 18.000 GiB
250 MBps per TiB 36.000 GiB 3.816.000 GiB (~4 PiB) 36.000 GiB
125 MBps per TiB 72.000 GiB 7.632.000 GiB (~8 PiB) 72.000 GiB

Volume harus ditingkatkan sesuai dengan ukuran langkah yang ditetapkan untuk tingkatannya. Setiap peningkatan kapasitas harus merupakan kelipatan dari ukuran langkah tertentu tersebut. Misalnya, jika volume tingkat 1.000 MBps Anda memiliki kapasitas 9.000 GiB, Anda dapat meningkatkannya menjadi 18.000 GiB, 27.000 GiB, dan kelipatan lainnya.

Pemecahan masalah

Bagian ini memberikan solusi untuk masalah umum yang mungkin Anda alami saat memperluas volume Lustre.

Perluasan gagal dengan error "Argumen Tidak Valid"

Gejala

  • PVC memasuki status Resizing, tetapi kemudian gagal.
  • Saat menjalankan perintah kubectl describe pvc PVC_NAME, Anda akan melihat error yang mirip dengan VolumeResizeFailed: rpc error: code = InvalidArgument desc = ....

Penyebab

Error ini biasanya berarti bahwa ukuran penyimpanan yang diminta tidak valid untuk tingkat performa volume Lustre karena salah satu alasan berikut:

  • Ukuran yang diminta bukan kelipatan ukuran langkah yang diperlukan untuk tingkat.
  • Ukuran yang diminta berada di bawah minimum atau di atas kapasitas maksimum untuk tingkat.

Resolusi

  1. Tinjau Batas kapasitas dan ukuran langkah untuk menemukan ukuran langkah dan batas kapasitas yang valid untuk tingkat performa volume Anda.
  2. Edit PVC lagi untuk meminta ukuran penyimpanan yang valid yang memenuhi ukuran langkah dan batas kapasitas.

Perluasan gagal dengan "Error Internal"

Gejala

  • Pengubahan ukuran PVC gagal.
  • Saat menjalankan perintah kubectl describe pvc PVC_NAME, Anda mungkin melihat peristiwa VolumeResizeFailed dengan pesan error yang berisi code = Internal.

Penyebab

Error ini menunjukkan masalah pada layanan Managed Lustre yang mendasarinya.

Resolusi

  1. Coba lagi perluasan dengan menerapkan manifes PVC lagi dengan ukuran baru yang diminta. Tindakan ini dapat mengatasi masalah backend sementara.
  2. Jika percobaan ulang gagal, hubungi Cloud Customer Care.

Perluasan macet dalam status "Mengubah ukuran"

Gejala

  • PVC tetap dalam status Resizing untuk jangka waktu yang lama (lebih dari 30 menit untuk ekspansi yang lebih kecil, atau lebih dari 90 menit untuk ekspansi yang lebih besar).
  • Anda mungkin melihat peristiwa VolumeResizeFailed dengan pesan error DEADLINE_EXCEEDED.

Penyebab

Masalah ini dapat terjadi dengan peningkatan kapasitas besar, yang dapat memerlukan waktu hingga 90 menit untuk diselesaikan. Komponen csi-external-resizer mungkin mengalami waktu tunggu habis saat menunggu respons dari Google Cloud Managed Lustre API, meskipun operasi perluasan yang mendasarinya masih berlangsung.

Resolusi

  • csi-external-resizer akan otomatis mencoba ulang operasi setelah periode penundaan. Lanjutkan memantau peristiwa PVC untuk peristiwa VolumeResizeSuccessful.
  • Jika PVC tetap dalam status Resizing selama lebih dari 90 menit, hubungi Cloud Customer Care.

Ekspansi tidak dimulai, atau macet dalam status ExternalExpanding

Gejala

  • Anda memperbarui kolom spec.resources.requests.storage di PVC, tetapi status PVC tidak berubah menjadi Resizing.
  • Saat Anda menjalankan perintah kubectl describe pvc PVC_NAME, log peristiwa hanya menampilkan status ExternalExpanding dan tidak berlanjut ke status Resizing:
Events:
  Type    Reason             Age                From             Message
  ----    ------             ----               ----             -------
  Normal  ExternalExpanding  21m (x2 over 58m)  volume_expand    waiting for an external controller to expand this PVC

Penyebab

Perilaku ini biasanya menunjukkan salah satu masalah berikut:

  • StorageClass yang terkait dengan PVC tidak mengizinkan ekspansi volume.
  • Ada masalah dengan container csi-external-resizer sidecar, yang merupakan komponen yang bertanggung jawab untuk memulai perluasan.

Resolusi

  1. Periksa konfigurasi StorageClass dan pastikan kolom allowVolumeExpansion: true telah ditetapkan:

    kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'
    
  2. Jika allowVolumeExpansion tidak ada atau disetel ke false, perbarui StorageClass untuk mengizinkan perluasan volume.

  3. Jika StorageClass dikonfigurasi dengan benar, kemungkinan masalahnya ada pada komponen bidang kontrol GKE yang mengelola operasi pengubahan ukuran. Hubungi Cloud Customer Care untuk mendapatkan bantuan.

Perluasan gagal karena masalah kuota atau kapasitas

Gejala

  • Pengubahan ukuran PVC gagal, dan peristiwa VolumeResizeFailed muncul di PVC.
  • Saat Anda menjalankan perintah kubectl describe pvc PVC_NAME, pesan peristiwa dari backend Managed Lustre menunjukkan masalah kuota atau kapasitas.

Penyebab

Perluasan valid yang diminta tidak dapat dipenuhi karena melebihi kapasitas atau kuota keseluruhan yang tersedia untuk layanan Managed Lustre di project atau region Anda.

Resolusi

  • Edit PVC Anda lagi dan minta penambahan penyimpanan yang lebih kecil.
  • Hubungi administrator Google Cloud organisasi Anda untuk meminta peningkatan kuota atau kapasitas layanan Lustre secara keseluruhan untuk project Anda.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam dokumen ini, hapus PVC. Operasi ini juga menghapus PV terkait dan instance Managed Lustre yang mendasarinya jika reclaimPolicy disetel ke Delete.

kubectl delete pvc PVC_NAME

Ganti PVC_NAME dengan nama PVC Anda.

Langkah berikutnya