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:
İlkenin etiket seçicisiyle eşleşen PVC'lerdeki disk kullanımını izler.
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.
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.
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.