ACK mendukung ekspansi otomatis volume disk cloud. Definisikan kebijakan ekspansi otomatis menggunakan CRD untuk memperluas volume secara otomatis ketika penggunaannya melebihi ambang batas yang ditentukan. Topik ini menjelaskan cara mengonfigurasi kebijakan ekspansi disk cloud otomatis dan memverifikasi bahwa volume diperluas secara otomatis.
Penerapan
Dalam topik ini, CRD digunakan untuk membuat kebijakan ekspansi otomatis (StorageAutoScalerPolicy) guna memperluas volume disk secara otomatis. Bagian berikut menjelaskan skenario di mana Anda dapat menggunakan metode ini:
PVC yang terikat pada volume persisten (PV) disk dikaitkan dengan StorageClass, dan parameter
allowVolumeExpansion: trueditentukan dalam StorageClass tersebut.CatatanSecara default, parameter
allowVolumeExpansion: truetelah ditentukan dalam StorageClass yang disediakan oleh ACK. Anda harus menentukan parameter ini untuk StorageClass yang Anda buat sendiri. Properti StorageClass tidak dapat diubah setelah dibuat—Anda hanya dapat membuat StorageClass baru.Pod aplikasi tempat disk disambungkan harus berada dalam status Running.
Jika disk tersebut merupakan disk dasar, Anda tidak dapat memperluas volume disk dengan metode ini.
Jika versi Kubernetes kluster lebih lama dari 1.16, Anda tidak dapat menggunakan metode ini untuk memperluas volume disk. Untuk informasi selengkapnya tentang cara meningkatkan versi Kubernetes kluster, lihat Upgrade clusters.
Anda hanya dapat memperluas volume disk yang mendukung resize. Untuk informasi selengkapnya, lihat ResizeDisk.
Catatan penting
Interval maksimum antar pemicu ekspansi adalah 2 menit, dan proses ekspansi disk membutuhkan waktu sekitar 1 menit. Jangan mengisi penuh disk dalam rentang waktu 3 menit.
Persiapan
Sebelum memulai, periksa status storage-operator dan aktifkan ekspansi otomatis sesuai kebutuhan berdasarkan versi Anda.
-
Pastikan komponen tersebut telah diinstal.
storage-operator diinstal secara default di kluster Anda. Di Konsol manajemen kluster, buka dan periksa status instalasi serta versinya di tab Volumes. Untuk melakukan upgrade, lihat Upgrade add-ons.
-
Aktifkan ekspansi otomatis berdasarkan versi Anda.
Modul storage-auto-expander dalam storage-operator menangani ekspansi otomatis sumber daya penyimpanan.
-
v1.33.1 dan yang lebih baru: Diaktifkan secara default. Tidak diperlukan tindakan tambahan.
-
Lebih lama dari v1.33.1: Aktifkan secara manual dengan memperbarui ConfigMap storage-operator.
Jalankan perintah berikut:
kubectl patch configmap/storage-operator \ -n kube-system \ --type merge \ -p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
-
Langkah 1: Konfigurasikan kebijakan ekspansi disk cloud otomatis
-
Periksa StorageClass Anda untuk memastikan ekspansi volume diaktifkan.
kubectl get scCatatanKami merekomendasikan penggunaan StorageClass default bernama
alicloud-disk-topology-alltypedi kluster ACK Anda. StorageClass ini secara otomatis memilih tipe disk yang sesuai berdasarkan tipe instans dan ketersediaan zona Anda, sehingga membantu menghindari kegagalan akibat keterbatasan instans atau stok disk yang tidak mencukupi. Untuk detail tentang pembuatan StorageClass, lihat Use dynamically provisioned volumes.Output yang diharapkan ditampilkan di bawah ini. Nilai
trueuntukALLOWVOLUMEEXPANSIONmenunjukkan bahwa ekspansi telah diaktifkan.NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-disk-efficiency diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-essd diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-ssd diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-topology-alltype diskplugin.csi.alibabacloud.com Delete WaitForFirstConsumer true 26h -
Buat kebijakan ekspansi otomatis menggunakan CRD.
-
Buat file bernama StorageAutoScalerPolicy.yaml dengan konten YAML berikut.
apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: nginx namespaces: - default - nginx conditions: - name: condition1 key: volume-capacity-used-percentage operator: Gt values: - "80" actions: - name: action1 type: volume-expand params: scale: 50Gi limits: 100Gi - name: action2 type: volume-expand params: scale: 50% limits: 300GiSesuaikan konfigurasi berdasarkan aplikasi dan pengaturan PVC Anda. Tabel berikut menjelaskan parameter-parameter tersebut:
Parameter
Deskripsi
pvcSelectorMemilih PVC target berdasarkan label. Contoh ini menggunakan
app: nginx.namespacesNamespace tempat PVC target berada. Beberapa namespace menggunakan logika OR. Jika tidak ditentukan, nilai default-nya adalah default.
conditionsKondisi yang memicu aturan. Beberapa kondisi menggunakan logika AND. Setiap kondisi mencakup:
-
name: Nama kustom untuk kondisi tersebut. -
key: Jenis metrik.volume-capacity-used-percentagemerepresentasikan persentase penggunaan kapasitas. -
operator: Operator perbandingan. Nilai yang didukung meliputiGt(lebih besar dari),Lt(lebih kecil dari),Eq(sama dengan), danNe(tidak sama dengan). Tidak peka huruf besar/kecil. -
values: Nilai numerik spesifik untuk aturan tersebut.
Contoh ini memicu aksi ketika penggunaan PVC melebihi 80%.
actionsAksi yang dilakukan ketika kondisi terpenuhi. Beberapa aksi diperbolehkan. Setiap aksi mencakup:
-
name: Nama kustom untuk aksi tersebut. -
type: Jenis aksi. Saat ini hanyavolume-expandyang didukung. -
params: Parameter aksi.scalemenentukan jumlah ekspansi dalam GiB atau sebagai persentase.limitsmenetapkan ukuran maksimum untuk PVC dalam aksi ini.
Jika terdapat beberapa aksi, sistem akan mengeksekusi aksi pertama yang cocok dan melewati sisanya.
Dalam contoh ini, jika action1 cocok, maka dijalankan dan action2 dilewati. Jika action1 tidak cocok, action2 dijalankan.
-
Action1 memperluas disk sebesar 50 GiB (maksimal total 100 GiB) ketika ukuran saat ini kurang dari 100 GiB.
-
Action2 menambah disk sebesar 50% dari ukuran saat ini (menjadi 150% dari ukuran awal) ketika ukuran saat ini berada di antara 100 GiB dan 300 GiB, dengan batas maksimum 300 GiB.
-
-
Buat kebijakan ekspansi otomatis.
kubectl create -f StorageAutoScalerPolicy.yaml
-
Langkah 2: Verifikasi ekspansi disk cloud otomatis
-
Buat StatefulSet untuk menguji ekspansi otomatis.
-
Buat file bernama StatefulSet.yaml dengan konten berikut.
YAML ini membuat StatefulSet dengan satu pod yang memasang disk cloud 25 GiB di
/data.apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx serviceName: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc volumeClaimTemplates: - metadata: name: pvc-disk labels: app: nginx spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-disk-topology-alltype" resources: requests: storage: 25Gi -
Buat StatefulSet tersebut.
kubectl create -f StatefulSet.yaml -
Periksa status deployment pod.
kubectl get pod -l app=nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-0 1/1 Running 0 99s -
Periksa kapasitas disk.
kubectl exec -it nginx-0 -- df -h /dataOutput yang diharapkan:
Filesystem Size Used Avail Use% Mounted on /dev/vdb 25G 24K 25G 1% /data
-
-
Tulis data ke path mount hingga penggunaan melebihi 80% untuk memicu ekspansi pertama.
-
Tulis data ke path mount.
Perintah berikut mengalokasikan 22 GB ke
/data/test1, mendorong penggunaan melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1 -
Periksa event ekspansi.
kubectl get eventsKarena penggunaan disk cloud lebih dari 80% dan kapasitas disk adalah 25 GiB, action1 dieksekusi secara otomatis untuk memperluas disk sebesar 50 GiB. Anda dapat melihat event terkait dalam daftar event.
2m1s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 25Gi to 75Gi, usedCapacityPercentage:90%, freeSize:2498MB. 2m1s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m1s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 118s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 116s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 25Gi to 75Gi, this action action2 will skip. -
Periksa kapasitas PVC.
kubectl get pvcOutput yang diharapkan menunjukkan disk diperluas dari 25 GiB menjadi 75 GiB:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-disk-nginx-0 Bound d-uf66kkzltnq6xgi9**** 75Gi RWO alicloud-disk-topology-alltype <unset> 26m
-
-
Tulis lebih banyak data hingga penggunaan melebihi 80% lagi untuk memicu ekspansi kedua.
-
Tulis data ke path mount.
Perintah berikut mengalokasikan 40 GB data ke
/data/test2, menyebabkan penggunaan disk cloud melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2 -
Periksa event ekspansi.
kubectl get eventsKetika penggunaan disk cloud 75 GiB melebihi 80%, action1 dieksekusi secara otomatis untuk melakukan scale-out sebesar 50 GiB. Namun, action1 memiliki batas kapasitas 100 GiB, sehingga disk cloud diperluas dari 75 GiB menjadi 100 GiB. Anda dapat melihat event terkait dalam daftar event.
7m4s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 75Gi to 100Gi, usedCapacityPercentage:84%, freeSize:11927MB. 7m4s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 7m4s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 7m1s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 5m59s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 75Gi to 100Gi, this action action2 will skip.
-
-
Tulis lebih banyak data hingga penggunaan melebihi 80% lagi untuk memicu ekspansi ketiga.
-
Tulis data ke path mount.
Contoh perintah berikut mengalokasikan 20 GB data ke
/data/test3, mengakibatkan penggunaan disk cloud melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3 -
Periksa event ekspansi.
kubectl get eventsKetika penggunaan kapasitas disk cloud 100 GiB melebihi 80%, action2 dieksekusi secara otomatis untuk memperluas disk dari 100 GiB menjadi 150 GiB. Anda dapat melihat event terkait dalam daftar event.
2m40s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 100Gi to 150Gi, usedCapacityPercentage:83%, freeSize:16637MB. 2m40s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m40s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 2m37s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 109s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 100Gi to 150Gi, this action action2 will skip.
-
-
Tulis lebih banyak data hingga penggunaan melebihi 80% lagi untuk memicu ekspansi keempat.
-
Tulis data ke path mount.
Perintah berikut mengalokasikan 50 GB data ke
/data/test4, yang menyebabkan penggunaan kapasitas disk cloud melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4 -
Periksa event ekspansi.
kubectl get eventsPada kapasitas 150 GiB dan penggunaan di atas 80%, action2 dipicu lagi, memperluas disk sebesar 50% (dari 150 GiB menjadi 225 GiB). Event menunjukkan:
2m42s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 150Gi to 225Gi, usedCapacityPercentage:87%, freeSize:19621MB. 2m42s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m42s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 2m38s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 114s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 150Gi to 225Gi, this action action2 will skip.
-
-
Tulis lebih banyak data hingga penggunaan melebihi 80% lagi untuk memicu ekspansi kelima.
-
Tulis data ke path mount.
Perintah berikut mengalokasikan 50 GB data ke
/data/test5, mengakibatkan penggunaan kapasitas disk cloud melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5 -
Periksa event ekspansi.
kubectl get eventsPada kapasitas 225 GiB dan penggunaan di atas 80%, action2 dipicu lagi. Karena batasnya adalah 300 GiB, disk diperluas dari 225 GiB menjadi 300 GiB. Event menunjukkan:
17m Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 225Gi to 300Gi, usedCapacityPercentage:82%, freeSize:40351MB. 17m Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 17m Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 17m Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on nodePada titik ini, baik action1 maupun action2 telah dieksekusi. Jika kapasitas disk kembali melebihi 80%, kondisi pemicu kedua aksi tersebut tidak lagi terpenuhi, sehingga scale-out tidak dipicu.
-
Referensi
Jika Anda mengalami masalah saat menggunakan volume disk cloud, lihat Cloud disk volume FAQ.