Cara Mengubah Ukuran Volume StatefulSet Kubernetes

  • Post author:
  • Post category:Tutorial

Kubernetes StatefulSets digunakan untuk men-deploy aplikasi stateful di dalam cluster Anda. Setiap Pod di StatefulSet dapat mengakses volume persisten lokal yang melekat padanya bahkan setelah dijadwal ulang. Hal ini memungkinkan Pod untuk mempertahankan status individual yang terpisah dari tetangganya di set.

Sayangnya volume ini memiliki batasan besar: Kubernetes tidak menyediakan cara untuk mengubah ukurannya dari objek StatefulSet. Properti spec.resources.requests.storage dari bidang volumeClaimTemplates StatefulSet tidak dapat diubah, mencegah Anda menerapkan peningkatan kapasitas apa pun yang Anda perlukan. Artikel ini akan menunjukkan cara mengatasi masalah tersebut.

Membuat StatefulSet

Salin YAML ini dan simpan ke ss.yaml:

apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: selector: app: nginx ports: – nama: port nginx: 80 clusterIP: Tidak ada— apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 3 serviceName: nginx template: metadata: labels: app: nginx spec : container: – nama: nginx gambar: nginx:port terbaru: – nama: web containerPort: 80 volumeMounts: – nama: data mountPath: /usr/share/nginx/html volumeClaimTemplates: – metadata: nama: spesifikasi data: accessModes: [ “ReadWriteOnce”] resources: request: storage: 1Gi

Terapkan YAML ke cluster Anda dengan Kubectl:

$ kubectl apply -f ss.yaml service/nginx create statefulset.apps/nginx created

Anda memerlukan kelas penyimpanan dan provisioner di cluster Anda untuk menjalankan contoh ini. Ini menciptakan StatefulSet yang menjalankan tiga replika server web NGINX.

Meskipun ini tidak mewakili kapan StatefulSets harus digunakan, itu cukup sebagai demo masalah volume yang dapat Anda hadapi. Klaim volume dengan penyimpanan 1 Gi dipasang ke direktori data NGINX. Konten web Anda dapat melampaui tunjangan yang relatif kecil ini seiring dengan skala layanan Anda. Namun mencoba untuk mengubah bidang volumeClaimTemplates.spec.resources.requests.storage ke 10Gi akan melaporkan kesalahan berikut ketika Anda menjalankan kubectl apply:

$ kubectl apply -f ss.yaml service/nginx tidak berubah StatefulSet “nginx” tidak valid: spec : Terlarang: pembaruan spesifikasi statefulset untuk bidang selain `replika`, `template`, `updateStrategy`, `persistentVolumeClaimRetentionPolicy` dan `minReadySeconds` dilarang

Hal ini terjadi karena hampir semua bidang manifes StatefulSet tidak dapat diubah setelah dibuat.

StatefulSeconds Mengubah Secara Manual Volumes

Anda dapat melewati batasan dengan mengubah ukuran klaim volume persisten (PVC) secara manual. Anda kemudian harus membuat ulang StatefulSet untuk melepaskan dan mengikat ulang volume dari Pod Anda. Ini akan memicu acara pengubahan ukuran volume yang sebenarnya.

Pertama gunakan Kubectl untuk menemukan PVC yang terkait dengan StatefulSet Anda:

$ kubectl get pvc NAMA STATUS VOLUME KAPASITAS AKSES MODES data-nginx-0 Terikat pvc-ccb2c835-e2d3-4632-b8ba-4c8c142795e RWO data-nginx-1 Terikat pvc-1b0b27fe-3874-4ed5-91be-d8e552e515f2 1Gi RWO data-nginx-2 Terikat pvc-4b7790c2-3ae6-4e04-afee-a2e1bae4323b 1Gi RWO

Ada tiga PVC karena ada tiga replika StatefulSet di . Setiap Pod mendapatkan volume tersendiri.

Sekarang gunakan kubectl edit untuk menyesuaikan kapasitas setiap volume:

$ kubectl edit pvc data-nginx-0

Manifes YAML PVC akan muncul di editor Anda. Temukan bidang spec.resources.requests.storage dan ubah ke kapasitas baru yang Anda inginkan:

# … spec: resources: request: storage: 10Gi # …

Save dan tutup file. Kubectl harus melaporkan bahwa perubahan telah diterapkan ke cluster.

persistentvolumeclaim/data-nginx-0 edited

Anda Sekarang ulangi langkah-langkah ini untuk PVC StatefulSet yang tersisa. Mendaftar volume persisten cluster Anda kemudian harus menunjukkan ukuran baru terhadap masing-masing:

$ kubectl get pv NAMA KAPASITAS AKSES MODE RECLAIM KEBIJAKAN STATUS KLAIM pvc-0a0d0b15-241f-4332-8c34-a24b61944fb7 10Gi RWO Hapus Bound default/data-nginx-2 pvc-33af452d-feff-429d-80cd-a45232e700c1 10Gi RWO Hapus Terikat default/data-nginx-0 pvc-49f3a1c5-b780-4580-9eae-17a1f002e9f5 10Gi RWO Hapus Terikat default/data-nginx-1

Klaim akan mempertahankan ukuran lama untuk sekarang:

$ kubectl get pvc NAMA STATUS VOLUME KAPASITAS AKSES MODE data-nginx-0 Terikat pvc-33af452d-feff-429d-80cd-a45232e700c1 10Gi RWO data-nginx-1 Terikat pvc-49f3a1c5-b780-4580-9eae-179af5f002e-179a 10Gi RWO data-nginx-2 Bound pvc-0a0d0b15-241f-4332-8c34-a24b61944fb7 10Gi RWO

Ini karena volumenya bisa ‘t diubah ukurannya saat Pod masih menggunakannya.

Membuat Ulang StatefulSet

Selesaikan pengubahan ukuran dengan melepaskan klaim volume dari StatefulSet yang menahannya. Hapus StatefulSet tetapi gunakan mekanisme cascading yatim piatu agar Pod-nya tetap berada di cluster Anda. Ini akan membantu meminimalkan downtime.

$ kubectl delete statefulset –cascade=orphan nginx statefulset.apps “nginx” delete

Selanjutnya edit file YAML asli Anda untuk memasukkan ukuran volume baru dalam file spec.resources.requests.storage. Kemudian gunakan kubectl apply untuk membuat ulang StatefulSet di cluster Anda:

$ kubectl apply -f ss.yaml service/nginx unknown statefulset.apps/nginx Created

StatefulSet baru akan mengambil alih kepemilikan Pod yang sebelumnya tidak digunakan karena Pod tersebut telah memenuhi persyaratannya. Volume mungkin akan diubah ukurannya pada saat ini, tetapi dalam banyak kasus Anda harus secara manual memulai peluncuran yang me-restart Pod Anda:

$ kubectl rollout restart statefulset nginx

Peluncuran berlangsung secara berurutan, menargetkan satu Pod pada satu waktu. Ini memastikan layanan Anda tetap dapat diakses di seluruh.

Sekarang PVC Anda akan menampilkan ukuran baru:

$ kubectl get pvc NAMA STATUS VOLUME KAPASITAS AKSES MODES data-nginx-0 Terikat pvc-33af452d-feff-429d-80cd-a45232e700c1 10Gi RWO data-nginx -1 Terikat pvc-49f3a1c5-b780-4580-9eae-17a1f002e9f5 10Gi RWO data-nginx-2 Terikat pvc-0a0d0b15-241f-4332-8c34-a24b61944fb7 10Gi RWO

Coba sambungkan ke salah satu Pod Anda untuk memeriksa peningkatan kapasitas yang terlihat :

$ kubectl exec -it nginx-0 bash root@nginx-0:/# df -h /usr/share/nginx/html Ukuran Sistem File yang Digunakan Tersedia Penggunaan% Dipasang di /dev/disk/by-id/scsi-0DO_Volume_pvc -33af452d-feff-429d-80cd-a45232e700c1 9.9G 4.5M 9.4G 1% /usr/share/nginx/html

Pod melaporkan penyimpanan 10 Gi yang diharapkan.

Kubernetes StatefulSets memungkinkan Anda menjalankan aplikasi stateful di Kuberne tes dengan volume penyimpanan persisten yang dicakupkan ke masing-masing Pod. Namun fleksibilitas yang diizinkan ini berakhir ketika Anda perlu mengubah ukuran salah satu volume Anda. Ini adalah fitur yang hilang yang saat ini memerlukan beberapa langkah manual untuk diselesaikan secara berurutan.

Pengelola Kubernetes mengetahui masalah ini. Ada permintaan fitur terbuka untuk mengembangkan solusi yang pada akhirnya akan memungkinkan Anda memulai pengubahan ukuran volume dengan mengedit manifes StatefulSet. Ini akan jauh lebih cepat dan lebih aman daripada situasi saat ini.

Satu peringatan terakhir adalah bahwa pengubahan ukuran volume bergantung pada driver penyimpanan yang memungkinkan ekspansi dinamis. Fitur ini hanya tersedia secara umum di Kubernetes v1.24 dan tidak semua driver, distribusi Kubernetes, dan platform cloud akan mendukungnya. Anda dapat memeriksa apakah milik Anda melakukannya dengan menjalankan kubectl get sc dan mencari true di kolom ALLOWVOLUMEXPANSION driver penyimpanan yang Anda gunakan dengan StatefulSets.

Anda

Itulah berita seputar Cara Mengubah Ukuran Volume StatefulSet Kubernetes, semoga bermanfaat. Disadur dari HowToGeek.com.