All Products
Search
Document Center

Container Service for Kubernetes:Konfigurasikan ekspansi disk otomatis

Last Updated:Jun 16, 2026

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:

  1. Memantau penggunaan disk pada PVC yang sesuai dengan pemilih label kebijakan.

  2. Saat penggunaan melebihi ambang batas, memilih aksi pertama yang cocok dan mengirim permintaan ubah ukuran ke driver CSI (Container Storage Interface).

  3. Driver CSI mengubah ukuran disk cloud dan memberi sinyal ke Kubernetes untuk mengubah ukuran sistem file.

  4. 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.