Menggunakan ekspansi volume


Di Google Kubernetes Engine (GKE) versi 1.24 atau yang lebih baru, Anda dapat menggunakan fitur ekspansi volume Kubernetes untuk mengubah kapasitas volume persisten setelah dibuat.

Untuk informasi selengkapnya tentang perluasan volume, lihat dokumentasi Kubernetes open source.

Prasyarat

Perluasan volume memiliki prasyarat berikut:

  • Jika volume yang ingin diubah ukurannya dikelola oleh Driver CSI:
    • Pastikan cluster GKE versi 1.16 atau yang lebih baru. Jika cluster memiliki node pool Windows, pastikan versi cluster GKE adalah 1.18 atau yang lebih baru. Jika Anda menggunakan driver CSI Filestore terkelola, versi cluster harus 1.21 atau yang lebih baru.
    • Periksa dokumentasi vendor penyimpanan untuk memastikan driver CSI Anda mendukung ekspansi volume. Driver CSI Persistent Disk Compute Engine dan driver CSI Filestore mendukung ekspansi volume.
  • Jika volume yang ingin diubah ukurannya dikelola oleh plugin volume dalam hierarki:
    • Pastikan cluster GKE versi 1.11 atau yang lebih baru. Meskipun cluster GKE versi 1.11-1.14 mendukung ekspansi volume yang dikelola oleh plugin dalam hierarki, semua Pod yang menggunakan volume harus dihentikan dan dibuat ulang untuk menyelesaikan ekspansi volume.
    • Periksa dokumentasi vendor penyimpanan untuk memastikan bahwa plugin volume dalam hierarki mendukung ekspansi volume (plugin Persistent Disk dalam hierarki Compute Engine mendukungnya).
  • Anda tidak dapat menggunakan ekspansi volume saat menggunakan mode akses ReadOnlyMany.

Menggunakan ekspansi volume

Untuk menggunakan ekspansi volume, lakukan tugas berikut:

  1. Tambahkan allowVolumeExpansion: true ke StorageClass Anda, jika StorageClass Anda belum memiliki kolom tersebut. Contoh:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. Minta perubahan kapasitas volume dengan mengedit kolom spec.resources.requests.storage PersistentVolumeClaim.

     kubectl edit pvc pvc-name
    

    Misalnya, Anda dapat mengubah PVC berikut dari disk 30 gibibyte (GiB) menjadi disk 40 GiB.

    Sebelum mengedit:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    Setelah mengedit:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. Verifikasi perubahan dengan melihat PVC. Untuk melihat PVC Anda, jalankan perintah berikut:

    kubectl get pvc pvc-name -o yaml
    

    Pada akhirnya, Anda akan melihat volume baru di kolom status.capacity. Contoh:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

Jika kapasitas PersistentVolume diubah secara langsung, hal ini dapat menyebabkan sistem file penampung menjadi salah. Untuk memperbaiki masalah ini, lihat memecahkan masalah perubahan ekspansi volume.

Mengelola perluasan volume di StatefulSet

Jika perlu meningkatkan ukuran volume yang digunakan oleh Pod dalam StatefulSet di Kubernetes, Anda harus menyesuaikan kolom spec.resources.requests.storage PersistentVolumeClaims (PVC) yang terkait dengan Pod. Mencoba mengubah kolom volumeClaimTemplates secara langsung di objek StatefulSet akan menyebabkan error.

Selain itu, jika Anda meningkatkan jumlah replika StatefulSet, StatefulSet tersebut masih akan membuat PVC dengan ukuran asli. Untuk mengubah ukuran volume yang disediakan untuk Pod yang dikelola oleh StatefulSet secara permanen, Anda harus menghapus dan membuat ulang objek StatefulSet dengan ukuran yang diperbarui yang ditentukan di kolom volumeClaimTemplates. Kecuali jika StatefulSet Anda telah mengaktifkan PVC Auto-Deletion, menghapus StatefulSet hanya akan mengakibatkan penghapusan Pod StatefulSet, dan tidak akan menghapus PVC yang sesuai. Agar PVC ini mencerminkan ukuran yang diperbarui, Anda juga harus menghapus dan membuat ulang PVC. Bergantung pada ReclaimPolicy PVC, penyimpanan yang mendasarinya mungkin juga dihapus.

Anda dapat melakukan langkah-langkah berikut untuk menjaga Pod asli tetap aktif dan berjalan sambil menyesuaikan StatefulSet untuk menyediakan replika mendatang dengan ukuran volume baru.

  1. Simpan StatefulSet yang ada ke file:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Hapus objek StatefulSet dari cluster sambil tetap menjalankan Pod sebagai Pod mandiri:

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. Edit ukuran penyimpanan volume baru dalam file sts-backup.yaml yang disimpan secara lokal, khususnya nilai spec.volumeClaimTemplates.spec.resources.requests.storage

  4. Buat ulang StatefulSet di cluster:

    kubectl apply -f sts-backup.yaml
    

Langkah selanjutnya