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 mengetahui informasi selengkapnya tentang ekspansi volume, baca 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 Compute Engine Persistent Disk CSI 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 in-tree Anda mendukung ekspansi volume (plugin Persistent Disk in-tree Compute Engine melakukannya).

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 container mengalami kesalahan. Untuk memperbaiki masalah ini, lihat memecahkan masalah perubahan ekspansi volume.

Mengelola perluasan volume di StatefulSets

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

Selain itu, jika Anda meningkatkan jumlah replika StatefulSet, tersebut akan tetap membuat PVC dengan ukuran aslinya. Untuk mengubah ukuran volume yang disediakan untuk Pod yang dikelola oleh StatefulSet secara permanen, Anda harus menghapus dan membuat ulang objek StatefulSet dengan ukuran terbaru yang ditentukan di kolom volumeClaimTemplates. Perlu diingat bahwa proses ini akan mengakibatkan penghapusan Pod lama dan PVCnya yang sesuai. Bergantung pada ReclaimPolicy, penyimpanan dasar 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 dan tetap jalankan Pod sebagai Pod mandiri:

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. Mengedit ukuran penyimpanan volume baru di 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