Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Configure automatic disk expansion

Son Güncelleme:Oct 06, 2026

StorageAutoScalerPolicy içinde eşikler belirleyerek storage-operator içindeki storage-auto-expander modülünün disk birimlerini otomatik olarak genişletmesini sağlayın.

Çalışma mantığı

storage-auto-expander PVC disk kullanımının eşiği aştığını tespit ettiğinde birimi şu sırayla genişletir:

  1. İlkenin etiket seçicisiyle eşleşen PVC'lerdeki disk kullanımını izler.

  2. Kullanım eşiği aştığında ilk eşleşen işlemi seçer ve CSI (Container Storage Interface) sürücüsüne bir yeniden boyutlandırma isteği gönderir.

  3. CSI sürücüsü cloud diski yeniden boyutlandırır ve dosya sisteminin yeniden boyutlandırılması için Kubernetes'e sinyal gönderir.

  4. Dosya sistemi yeniden boyutlandırması tamamlandığında PVC kapasitesi güncellenir.

Zamanlama kısıtlamaları: Tetikleyici kontrol aralığı en fazla 2 dakikadır ve genişletme yaklaşık 1 dakika sürer. Önceki bir genişletmeden sonraki 3 dakika içinde diski doldurmayın.

Sınırlamalar

Sınırlama Ayrıntı
Kubernetes sürümü Kubernetes 1.16 veya üzeri gerekir. Gerekirse Kümeyi yükseltin.
Disk türü Temel diskler desteklenmez. Desteklenen disk türleri için ResizeDisk bölümüne bakın.
StorageClass PVC'nin StorageClass özelliğinde allowVolumeExpansion: true ayarı olmalıdır. ACK tarafından sağlanan StorageClass'lar bu özelliği varsayılan olarak etkinleştirir. Özel StorageClass'lar için parametreyi oluşturma sırasında ayarlayın; mevcut StorageClass'lar değiştirilemez.
Pod durumu Diski kullanan uygulama podunun Running durumunda olması gerekir.

storage-auto-expander modülünü etkinleştirin

storage-operator içindeki storage-auto-expander modülü otomatik genişletmeyi yönetir. storage-operator öğesinin yüklü olup olmadığını kontrol etmek ve sürümünü bulmak için şuraya gidin: Operations > Add-ons > Volumes.

  • v1.33.1 ve sonrası: Modül varsayılan olarak etkindir. Ek işlem gerekmez.

  • v1.33.1 öncesi: Modülü etkinleştirin:

    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\"}"}}'

    storage-operator öğesini yükseltmek için bkz. Eklentileri yükseltme.

Otomatik genişletme ilkesi yapılandırın

1. Adım: StorageClass üzerinde birim genişletmenin etkin olduğunu doğrulayın

kubectl get sc

ALLOWVOLUMEEXPANSION sütunu true olmalıdır. Örnek çıktı:

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
Mümkün olduğunda alicloud-disk-topology-alltype kullanın. Bu seçenek, örnek türüne ve alan kullanılabilirliğine göre disk türünü otomatik olarak seçerek hazırlama hatalarını azaltır. Ayrıntılar için bkz. Dinamik olarak sağlanan birimleri kullanma .

2. Adım: StorageAutoScalerPolicy oluşturun

StorageAutoScalerPolicy.yaml adlı bir dosya oluşturun:

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

Temel alanlar:

Alan Açıklama
pvcSelector PVC'leri etikete göre seçer. Örnek: app: nginx.
namespaces Hedef PVC ad alanları. Birden fazla değer OR mantığıyla değerlendirilir. Varsayılan: default.
conditions Tetikleyici koşulları. Birden fazla koşul AND mantığıyla değerlendirilir. key: ölçüm (volume-capacity-used-percentage = disk kullanım yüzdesi). operator: Gt (büyüktür), Lt (küçüktür), Eq (eşittir) veya Ne (eşit değildir) — büyük/küçük harfe duyarlı değildir. values: eşik değeri (dize olarak).
actions Koşullar karşılandığında çalıştırılacak işlemler. İlk eşleşen işlem çalışır; diğerleri atlanır. type: volume-expand olmalıdır. params.scale: genişletme miktarı — mutlak (örn. 50Gi) veya yüzde (örn. 50%). params.limits: Bu işlem için maksimum PVC boyutu.

PVC kullanımı %80'i aştığında ilke tetiklenir:

  • action1 50 GiB ekler (maksimum 100 GiB). PVC 100 GiB'den küçükken uygulanır.

  • action2 mevcut boyutun %50'sini ekler (maksimum 300 GiB). PVC 100 GiB'a ulaştığında devreye girer.

3. Adım: İlkeyi uygulayın

kubectl create -f StorageAutoScalerPolicy.yaml

Otomatik genişletmeyi doğrulayın

Aşağıdaki adımlar, yukarıda tanımlanan ilkeyi kullanarak test StatefulSet ile beş genişletme olayını tetikler.

1. Adım: Test StatefulSet oluşturun

StatefulSet.yaml adlı bir dosya oluşturun:

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

Uygulayın ve pod'un çalıştığını onaylayın:

kubectl create -f StatefulSet.yaml
kubectl get pod -l app=nginx

Beklenen çıktı:

NAME      READY   STATUS    RESTARTS   AGE
nginx-0   1/1     Running   0          99s

Başlangıç disk kapasitesini kontrol edin:

kubectl exec -it nginx-0 -- df -h /data

Beklenen çıktı:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb         25G   24K   25G   1% /data

2. Adım: İlk genişletmeyi tetikleyin (25 GiB'ten 75 GiB'e)

Kullanımı %80'in üzerine çıkarmak için 22 GB veri yazın:

kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1

Genişletme olaylarını kontrol edin:

kubectl get events

Disk 25 GiB'tir ve kullanım %80'i aştığı için action1 50 GiB ekler:

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.

PVC kapasitesini doğrulayın:

kubectl get pvc

Beklenen çıktı:

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. Adım: İkinci genişletmeyi tetikleyin (75 GiB'ten 100 GiB'e)

Kullanımı tekrar %80'in üzerine çıkarmak için 40 GB yazın:

kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2

action1 tekrar tetiklenir ancak 100 GiB sınırı nedeniyle genişletme 100 GiB ile sınırlanır:

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.

4. Adım: Üçüncü genişletmeyi tetikleyin (100 GiB'ten 150 GiB'e)

100 GiB'a ulaşıldığında action1'in sınırına varılır, bu nedenle action2 devralır ve mevcut boyutun %50'sini ekler:

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.

5. Adım: Dördüncü genişletmeyi tetikleyin (150 GiB'ten 225 GiB'e)

action2 tekrar tetiklenir ve 150 GiB'in %50'si olan 75 GiB ekler:

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.

6. Adım: Beşinci genişletmeyi tetikleyin (225 GiB'ten 300 GiB'e)

action2 son kez tetiklenir ve 300 GiB sınırıyla sınırlanır:

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

Her iki işlem de limits değerlerine ulaşmıştır. Daha fazla genişletme gerçekleşmez.

Sonraki adımlar

Cloud disk birimi sorunları için bkz. Cloud disk birimi SSS.