Tetapkan ambang batas dalam StorageAutoScalerPolicy agar storage-auto-expander di storage-operator memperluas volume disk secara otomatis.
Cara kerja
Saat storage-auto-expander mendeteksi bahwa penggunaan disk PVC melebihi ambang batas, volume diperluas dalam urutan berikut:
-
Memantau penggunaan disk pada PVC yang sesuai dengan pemilih label kebijakan.
-
Saat penggunaan melebihi ambang batas, memilih aksi pertama yang cocok dan mengirim permintaan ubah ukuran ke driver CSI (Container Storage Interface).
-
Driver CSI mengubah ukuran disk cloud dan memberi sinyal ke Kubernetes untuk mengubah ukuran sistem file.
-
Kapasitas PVC diperbarui setelah proses ubah ukuran sistem file selesai.
Batas waktu: Interval pemeriksaan pemicu maksimal 2 menit, dan ekspansi memerlukan waktu sekitar 1 menit. Jangan isi disk hingga penuh dalam rentang 3 menit setelah ekspansi sebelumnya.
Batasan
| Batasan | Detail |
|---|---|
| Versi Kubernetes | Memerlukan Kubernetes 1.16 atau lebih baru. Upgrade kluster jika diperlukan. |
| Tipe disk | Disk dasar tidak didukung. Lihat ResizeDisk untuk tipe disk yang memenuhi syarat. |
| StorageClass | StorageClass PVC harus memiliki allowVolumeExpansion: true. StorageClass yang disediakan ACK mengaktifkan ini secara default. Untuk StorageClass kustom, atur parameter ini saat pembuatan — StorageClass yang sudah ada tidak dapat diubah. |
| Status Pod | Pod aplikasi yang menggunakan disk harus dalam status Running. |
Aktifkan modul storage-auto-expander
Modul storage-auto-expander di storage-operator menangani ekspansi otomatis. Untuk memeriksa apakah storage-operator telah terinstal dan mengetahui versinya, buka Operations > Add-ons > Volumes.
-
v1.33.1 dan lebih baru: Modul diaktifkan secara default. Tidak perlu tindakan tambahan.
-
Versi sebelum v1.33.1: Aktifkan modul:
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\"}"}}'Untuk upgrade
storage-operator, lihat Upgrade add-ons.
Konfigurasikan kebijakan ekspansi otomatis
Langkah 1: Verifikasi bahwa ekspansi volume diaktifkan pada StorageClass Anda
kubectl get sc
Kolom ALLOWVOLUMEEXPANSION harus bernilai true. Contoh output:
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
Gunakan alicloud-disk-topology-alltype bila memungkinkan. StorageClass ini secara otomatis memilih tipe disk berdasarkan tipe instans dan ketersediaan zona, sehingga mengurangi kegagalan provisioning. Lihat Gunakan volume penyimpanan dinamis.
Langkah 2: Buat StorageAutoScalerPolicy
Buat 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: 300Gi
Bidang utama:
| Bidang | Deskripsi |
|---|---|
pvcSelector |
Memilih PVC berdasarkan label. Contoh: app: nginx. |
namespaces |
Namespace PVC target. Beberapa nilai menggunakan logika OR. Default: default. |
conditions |
Kondisi pemicu. Beberapa kondisi menggunakan logika AND. key: metrik (volume-capacity-used-percentage = persentase penggunaan disk). operator: Gt (lebih besar dari), Lt (lebih kecil dari), Eq (sama dengan), atau Ne (tidak sama dengan) — tidak peka huruf besar/kecil. values: ambang batas dalam bentuk string. |
actions |
Aksi yang dijalankan saat kondisi terpenuhi. Aksi pertama yang cocok akan dijalankan; sisanya dilewati. type: harus volume-expand. params.scale: jumlah ekspansi — absolut (misalnya, 50Gi) atau persentase (misalnya, 50%). params.limits: ukuran maksimum PVC untuk aksi ini. |
Kebijakan ini dipicu saat penggunaan PVC melebihi 80%:
-
action1 menambahkan 50 GiB (maksimal 100 GiB). Berlaku selama PVC berada di bawah 100 GiB.
-
action2 menambahkan 50% dari ukuran saat ini (maksimal 300 GiB). Berlaku setelah PVC mencapai 100 GiB.
Langkah 3: Terapkan kebijakan
kubectl create -f StorageAutoScalerPolicy.yaml
Verifikasi ekspansi otomatis
Langkah-langkah berikut memicu lima event ekspansi dengan StatefulSet uji, menggunakan kebijakan yang telah ditentukan di atas.
Langkah 1: Buat StatefulSet uji
Buat file bernama StatefulSet.yaml:
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
Terapkan dan pastikan pod berjalan:
kubectl create -f StatefulSet.yaml
kubectl get pod -l app=nginx
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 99s
Periksa kapasitas disk awal:
kubectl exec -it nginx-0 -- df -h /data
Output yang diharapkan:
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 25G 24K 25G 1% /data
Langkah 2: Picu ekspansi pertama (25 GiB menjadi 75 GiB)
Tulis data sebesar 22 GB untuk mendorong penggunaan melebihi 80%:
kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
Periksa event ekspansi:
kubectl get events
Disk berukuran 25 GiB dan penggunaan melebihi 80%, sehingga action1 menambahkan 50 GiB:
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.
Verifikasi kapasitas PVC:
kubectl get pvc
Output yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
pvc-disk-nginx-0 Bound d-uf66kkzltnq6xgi9**** 75Gi RWO alicloud-disk-topology-alltype <unset> 26m
Langkah 3: Picu ekspansi kedua (75 GiB menjadi 100 GiB)
Tulis data sebesar 40 GB untuk mendorong penggunaan melebihi 80% lagi:
kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
action1 kembali dijalankan, tetapi batas 100 GiB membatasi ekspansi hingga 100 GiB:
kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
kubectl get events
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.
Langkah 4: Picu ekspansi ketiga (100 GiB menjadi 150 GiB)
Pada ukuran 100 GiB, batas action1 tercapai, sehingga action2 mengambil alih dan menambahkan 50% dari ukuran saat ini:
kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
kubectl get events
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.
Langkah 5: Picu ekspansi keempat (150 GiB menjadi 225 GiB)
action2 kembali dijalankan, menambahkan 50% dari 150 GiB = 75 GiB:
kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4
kubectl get events
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.
Langkah 6: Picu ekspansi kelima (225 GiB menjadi 300 GiB)
action2 dijalankan sekali lagi, dibatasi oleh limit 300 GiB-nya:
kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5
kubectl get events
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 node
Kedua aksi telah mencapai limits-nya. Tidak ada ekspansi lebih lanjut.
Langkah selanjutnya
Untuk masalah terkait volume disk cloud, lihat FAQ volume disk cloud.