全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasikan kebijakan perluasan disk otomatis

更新时间:Jan 09, 2026

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: true ditentukan dalam StorageClass tersebut.

    Catatan

    Secara default, parameter allowVolumeExpansion: true telah 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.

  1. Konfirmasi bahwa komponen telah diinstal

    Komponen storage-operator diinstal secara default di kluster Anda. Di panel navigasi halaman manajemen kluster, pilih Operations Management > Components. Pada tab Storage, konfirmasi status instalasi dan versinya. Untuk meningkatkan komponen, lihat Upgrade components.
  2. 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

  1. Periksa StorageClass dan pastikan perluasan telah diaktifkan.

    kubectl get sc
    Catatan

    Kami menyarankan Anda menggunakan StorageClass alicloud-disk-topology-alltype yang 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 ALLOWVOLUMEEXPANSION diatur ke true, 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                   26h
  2. Buat kebijakan perluasan otomatis menggunakan CRD.

    1. 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: 300Gi

      Konfigurasikan parameter sesuai dengan aplikasi dan PVC Anda. Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Deskripsi

      pvcSelector

      Filter PVC target menggunakan label. Contohnya, app: nginx.

      namespaces

      Namespace tempat PVC target berada. Jika Anda menentukan beberapa namespace, logika OR berlaku. Jika Anda tidak mengonfigurasi parameter ini, nilai default-nya adalah `default`.

      conditions

      Kondisi 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-percentage merepresentasikan persentase penggunaan kapasitas.

      • operator: Operator perbandingan, yang dapat berupa Gt (lebih besar dari), Lt (lebih kecil dari), Eq (sama dengan), atau Ne (tidak sama dengan). Nilainya tidak peka huruf besar/kecil.

      • values: Nilai aturan.

      Pada contoh ini, aksi dipicu ketika penggunaan PVC melebihi 80%.

      actions

      Operasi 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. scale menentukan ukuran perluasan dalam GiB atau persentase. limits menentukan 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.

    2. Buat kebijakan perluasan otomatis.

      kubectl create -f StorageAutoScalerPolicy.yaml

Langkah 2: Verifikasi perluasan disk otomatis

  1. Anda dapat membuat StatefulSet untuk menguji autoscaling.

    1. 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: 25Gi    
    2. Buat StatefulSet.

      kubectl create -f StatefulSet.yaml
    3. Lihat status deployment pod.

      kubectl get pod -l app=nginx

      Output yang diharapkan:

      NAME      READY   STATUS    RESTARTS   AGE
      nginx-0   1/1     Running   0          99s
    4. Lihat kapasitas disk.

      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
  2. Tulis data ke direktori mount agar penggunaan disk melebihi 80% dan memicu perluasan pertama.

    1. Tulis data ke direktori mount.

      Perintah contoh berikut mengalokasikan data 22 GB ke /data/test1 sehingga penggunaan disk melebihi 80%.

      kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
    2. Lihat event perluasan.

      kubectl get events

      Saat 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.
    3. Lihat kapasitas PVC.

      kubectl get pvc

      Output 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
  3. Anda dapat terus menulis data ke direktori mount untuk meningkatkan penggunaan cloud disk lebih dari 80% lagi dan memicu scale-out kedua.

    1. Tulis data ke direktori mount.

      Perintah contoh berikut mengalokasikan data 40 GB ke direktori /data/test2 untuk meningkatkan penggunaan disk lebih dari 80%.

      kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
    2. Lihat event perluasan.

      kubectl get events

      Saat 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.
  4. Lanjutkan menulis data ke direktori mount agar penggunaan disk melebihi 80% lagi dan memicu perluasan ketiga.

    1. Tulis data ke direktori mount.

      Perintah contoh berikut mengalokasikan data 20 GB ke direktori /data/test3 untuk meningkatkan penggunaan disk lebih dari 80%.

      kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
    2. Lihat event perluasan.

      kubectl get events

      Saat 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.
  5. Lanjutkan menulis data ke direktori mount untuk meningkatkan penggunaan disk lebih dari 80% lagi dan memicu perluasan keempat.

    1. Tulis data ke direktori mount.

      Perintah contoh berikut mengalokasikan data 50 GB ke direktori /data/test4 untuk meningkatkan penggunaan disk lebih dari 80%.

      kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4
    2. Lihat event perluasan.

      kubectl get events

      Saat 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.
  6. Lanjutkan menulis data ke direktori mount untuk meningkatkan penggunaan disk lebih dari 80% dan memicu perluasan kelima.

    1. Tulis data ke direktori mount.

      Perintah contoh berikut mengalokasikan data 50 GB ke direktori /data/test5 sehingga penggunaan disk melebihi 80%.

      kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5
    2. Lihat event perluasan.

      kubectl get events

      Pada 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 node

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