ACK mendukung perluasan otomatis untuk volume disk. Anda dapat menggunakan Custom Resource Definition (CRD) untuk menentukan kebijakan yang secara otomatis memperluas volume disk ketika penggunaannya melebihi ambang batas tertentu. Topik ini menjelaskan cara mengonfigurasi kebijakan tersebut dan memverifikasi perluasan otomatis.
Lingkup
Pada topik ini, CRD digunakan untuk membuat kebijakan perluasan otomatis (StorageAutoScalerPolicy) guna memperluas volume disk secara otomatis. Bagian berikut menjelaskan skenario di mana Anda dapat menggunakan metode ini:
PVC yang terikat pada persistent volume (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 basic disk, 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 dari disk yang mendukung resize. Untuk informasi selengkapnya, lihat ResizeDisk.
Perhatian
Pemicu scale-out memiliki interval maksimum 2 menit, dan proses perluasan disk berikutnya memerlukan waktu 1 menit. Untuk mencegah error, hindari mengisi penuh disk selama proses 3 menit ini.
Prasyarat
Sebelum memulai, periksa status komponen storage-operator dan aktifkan fitur perluasan otomatis jika diperlukan, berdasarkan versi komponen Anda.
Konfirmasi bahwa komponen telah diinstal
Komponen storage-operator diinstal secara default di kluster Anda. Di panel navigasi halaman manajemen kluster, pilih . Pada tab Storage, konfirmasi status instalasi dan versinya. Untuk meningkatkan komponen, lihat Upgrade components.
Aktifkan perluasan otomatis berdasarkan versi komponen
Modul storage-auto-expander dalam komponen storage-operator bertanggung jawab atas perluasan sumber daya penyimpanan secara otomatis.
Untuk versi v1.33.1 dan yang lebih baru: Fitur ini diaktifkan secara default. Tidak diperlukan tindakan manual.
Untuk versi sebelum v1.33.1: Ubah ConfigMap storage-operator untuk mengaktifkan fitur ini secara manual.
Contoh perintah:
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 perluasan disk otomatis
Periksa StorageClass dan pastikan perluasan telah diaktifkan.
kubectl get scCatatanKami menyarankan Anda menggunakan StorageClass
alicloud-disk-topology-alltypeyang dibuat secara default di kluster ACK. StorageClass ini dapat secara otomatis memilih tipe disk untuk menghindari kegagalan pembuatan disk akibat batasan tipe instans atau stok disk yang tidak mencukupi di zona tertentu. Untuk informasi selengkapnya tentang cara membuat StorageClass, lihat Use a dynamically provisioned disk volume.Output yang diharapkan adalah sebagai berikut: parameter
ALLOWVOLUMEEXPANSIONdiatur ketrue, yang menunjukkan bahwa perluasan volume 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 26hBuat kebijakan perluasan otomatis menggunakan CRD.
Gunakan templat YAML berikut untuk membuat file bernama StorageAutoScalerPolicy.yaml.
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: 300GiKonfigurasikan parameter sesuai dengan aplikasi dan PVC Anda. Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
pvcSelectorFilter PVC target menggunakan label. Contohnya,
app: nginx.namespacesNamespace tempat PVC target berada. Jika Anda menentukan beberapa namespace, logika OR berlaku. Jika Anda tidak mengonfigurasi parameter ini, nilai default-nya adalah `default`.
conditionsKondisi yang memicu aturan. Jika Anda menentukan beberapa kondisi, logika AND berlaku. Setiap kondisi mencakup parameter berikut:
name: Nama kondisi. Anda dapat mengonfigurasi nama kustom.key: Jenis metrik.volume-capacity-used-percentagemerepresentasikan persentase penggunaan kapasitas.operator: Operator perbandingan, yang dapat berupaGt(lebih besar dari),Lt(lebih kecil dari),Eq(sama dengan), atauNe(tidak sama dengan). Nilainya tidak peka huruf besar/kecil.values: Nilai aturan.
Pada contoh ini, aksi dipicu ketika penggunaan PVC melebihi 80%.
actionsOperasi yang dilakukan saat kondisi terpenuhi. Anda dapat menentukan beberapa operasi. Setiap aksi mencakup parameter berikut:
name: Nama aksi. Anda dapat mengonfigurasi nama kustom.type: Jenis operasi. Nilai yang valid:volume-expand, yang menunjukkan perluasan.params: Parameter operasi.scalemenentukan ukuran perluasan dalam GiB atau persentase.limitsmenentukan batas ukuran maksimum untuk PVC dalam aksi ini.
Jika beberapa aksi ditentukan, sistem memeriksanya secara berurutan dan menjalankan aksi pertama yang kondisinya terpenuhi. Aksi lainnya dilewati.
Contohnya, jika kondisi untuk action1 terpenuhi, action1 dijalankan dan action2 dilewati. Jika kondisi untuk action1 tidak terpenuhi, sistem memeriksa dan menjalankan action2.
action1 menentukan bahwa ketika kapasitas disk kurang dari 100 GiB, perluasan dipicu untuk menambah kapasitas sebesar 50 GiB setiap kali, hingga maksimal 100 GiB.
action2 menentukan bahwa ketika kapasitas disk lebih besar dari atau sama dengan 100 GiB dan kurang dari 300 GiB, perluasan dipicu untuk menambah kapasitas sebesar 50% dari ukuran saat ini. Artinya, total kapasitas setelah setiap perluasan menjadi 150% dari kapasitas sebelumnya. Kapasitas maksimum disk adalah 300 GiB.
Buat kebijakan perluasan otomatis.
kubectl create -f StorageAutoScalerPolicy.yaml
Langkah 2: Verifikasi perluasan disk otomatis
Anda dapat membuat StatefulSet untuk menguji autoscaling.
Gunakan konten berikut untuk membuat file bernama StatefulSet.yaml.
YAML berikut membuat StatefulSet yang berisi pod dengan disk 25 GiB yang dipasang ke path
/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: 25GiBuat StatefulSet.
kubectl create -f StatefulSet.yamlLihat status deployment pod.
kubectl get pod -l app=nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx-0 1/1 Running 0 99sLihat 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 direktori mount agar penggunaan disk melebihi 80% dan memicu perluasan pertama.
Tulis data ke direktori mount.
Perintah contoh berikut mengalokasikan data 22 GB ke
/data/test1sehingga penggunaan disk melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1Lihat event perluasan.
kubectl get eventsSaat penggunaan disk melebihi 80%, kapasitas disk adalah 25 GiB. Hal ini memenuhi kondisi action1. Oleh karena itu, action1 dieksekusi secara otomatis untuk memperluas disk sebesar 50 GiB. Event terkait berikut muncul 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.Lihat kapasitas PVC.
kubectl get pvcOutput berikut menunjukkan bahwa setelah action1 dieksekusi, 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
Anda dapat terus menulis data ke direktori mount untuk meningkatkan penggunaan cloud disk lebih dari 80% lagi dan memicu scale-out kedua.
Tulis data ke direktori mount.
Perintah contoh berikut mengalokasikan data 40 GB ke direktori
/data/test2untuk meningkatkan penggunaan disk lebih dari 80%.kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2Lihat event perluasan.
kubectl get eventsSaat penggunaan disk 75 GiB melebihi 80%, kondisi untuk action1 terpenuhi. Oleh karena itu, action1 dieksekusi secara otomatis untuk memperluas disk sebesar 50 GiB. Namun, karena batas perluasan untuk action1 adalah 100 GiB, disk hanya diperluas dari 75 GiB menjadi 100 GiB. Event terkait berikut muncul 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.
Lanjutkan menulis data ke direktori mount agar penggunaan disk melebihi 80% lagi dan memicu perluasan ketiga.
Tulis data ke direktori mount.
Perintah contoh berikut mengalokasikan data 20 GB ke direktori
/data/test3untuk meningkatkan penggunaan disk lebih dari 80%.kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3Lihat event perluasan.
kubectl get eventsSaat penggunaan disk 100 GiB melebihi 80%, kondisi untuk action2 terpenuhi. Oleh karena itu, action2 dieksekusi secara otomatis untuk memperluas disk dari 100 GiB menjadi 150 GiB. Event terkait berikut muncul 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.
Lanjutkan menulis data ke direktori mount untuk meningkatkan penggunaan disk lebih dari 80% lagi dan memicu perluasan keempat.
Tulis data ke direktori mount.
Perintah contoh berikut mengalokasikan data 50 GB ke direktori
/data/test4untuk meningkatkan penggunaan disk lebih dari 80%.kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4Lihat event perluasan.
kubectl get eventsSaat penggunaan disk melebihi 80%, kapasitas disk adalah 150 GiB, yang memenuhi kondisi untuk action2. Oleh karena itu, action2 dieksekusi secara otomatis untuk memperluas disk sebesar 50% dari kapasitas saat ini, dari 150 GiB menjadi 225 GiB. Event terkait berikut muncul dalam daftar event.
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.
Lanjutkan menulis data ke direktori mount untuk meningkatkan penggunaan disk lebih dari 80% dan memicu perluasan kelima.
Tulis data ke direktori mount.
Perintah contoh berikut mengalokasikan data 50 GB ke direktori
/data/test5sehingga penggunaan disk melebihi 80%.kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5Lihat event perluasan.
kubectl get eventsPada titik ini, kapasitas disk adalah 225 GiB. Saat penggunaan disk melebihi 80%, kondisi untuk action2 terpenuhi. Oleh karena itu, action2 dieksekusi secara otomatis untuk memperluas disk sebesar 50% dari kapasitas saat ini. Namun, karena batas perluasan untuk action2 adalah 300 GiB, aksi ini hanya dapat memperluas disk dari 225 GiB menjadi 300 GiB. Daftar event menampilkan event terkait berikut.
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 selesai. Jika kapasitas cloud disk melebihi 80% lagi, scale-out tidak akan dipicu karena kondisi pemicu untuk aksi-aksi tersebut tidak lagi terpenuhi.
Referensi
Jika Anda mengalami masalah dengan volume disk, lihat Disk volume FAQ.