Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Configure automatic disk expansion

Dernière mise à jour :Aug 11, 2026

Définissez des seuils dans une StorageAutoScalerPolicy pour que le composant storage-auto-expander du module storage-operator étende automatiquement les volumes de disque.

Fonctionnement

Lorsque le composant storage-auto-expander détecte que l'utilisation du disque PVC dépasse le seuil défini, il étend le volume selon la séquence suivante :

  1. Il surveille l'utilisation du disque sur les PVC correspondant au sélecteur d'étiquettes de la politique.

  2. Lorsque l'utilisation dépasse le seuil, il sélectionne la première action correspondante et envoie une demande de redimensionnement au pilote CSI (Container Storage Interface).

  3. Le pilote CSI redimensionne le disque cloud et signale à Kubernetes la nécessité de redimensionner le système de fichiers.

  4. La capacité du PVC est mise à jour une fois le redimensionnement du système de fichiers terminé.

Contraintes de temporisation : L'intervalle de vérification du déclencheur est d'au plus 2 minutes et l'extension prend environ 1 minute. Ne saturez pas le disque dans les 3 minutes suivant une extension précédente.

Limitations

Limitation Détail
Version Kubernetes Nécessite Kubernetes 1.16 ou version ultérieure. Mettez à niveau le cluster si nécessaire.
Type de disque Les disques de base ne sont pas pris en charge. Consultez ResizeDisk pour connaître les types de disques éligibles.
StorageClass La StorageClass du PVC doit avoir allowVolumeExpansion: true. Les StorageClasses fournies par ACK activent cette option par défaut. Pour les StorageClasses personnalisées, définissez ce paramètre lors de la création ; il n'est pas possible de modifier les StorageClasses existantes.
État du pod Le pod d'application utilisant le disque doit être dans l'état Running.

Activer le module storage-auto-expander

Le module storage-auto-expander intégré au module storage-operator gère l'expansion automatique. Pour vérifier si storage-operator est installé et connaître sa version, accédez à Operations > Add-ons > Volumes.

  • v1.33.1 et versions ultérieures : Le module est activé par défaut. Aucune action n'est requise.

  • Antérieur à v1.33.1 : Activez le module :

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

    Pour mettre à niveau storage-operator, consultez Mettre à niveau les modules complémentaires.

Configurer une politique d'expansion automatique

Étape 1 : Vérifier que l'expansion de volume est activée sur votre StorageClass

kubectl get sc

La colonne ALLOWVOLUMEEXPANSION doit afficher true. Exemple de sortie :

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
Utilisez alicloud-disk-topology-alltype lorsque cela est possible. Cette classe sélectionne automatiquement le type de disque en fonction du type d'instance et de la disponibilité de la zone, ce qui réduit les échecs de provisionnement. Consultez Utiliser des volumes provisionnés dynamiquement .

Étape 2 : Créer une StorageAutoScalerPolicy

Créez un fichier nommé 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

Champs clés :

Champ Description
pvcSelector Sélectionne les PVC par étiquette. Exemple : app: nginx.
namespaces Espaces de noms cibles des PVC. Plusieurs valeurs utilisent une logique OU. Par défaut : default.
conditions Conditions de déclenchement. Plusieurs conditions utilisent une logique ET. key : métrique (volume-capacity-used-percentage = pourcentage d'utilisation du disque). operator : Gt (supérieur à), Lt (inférieur à), Eq (égal) ou Ne (différent de) — sensible à la casse. values : seuil sous forme de chaîne.
actions Actions à exécuter lorsque les conditions sont remplies. La première action correspondante s'exécute ; les autres sont ignorées. type : doit être volume-expand. params.scale : montant de l'extension — absolu (par exemple, 50Gi) ou en pourcentage (par exemple, 50%). params.limits : taille maximale du PVC pour cette action.

La politique se déclenche lorsque l'utilisation du PVC dépasse 80 % :

  • action1 ajoute 50 GiB (max 100 GiB). S'applique tant que le PVC est inférieur à 100 GiB.

  • action2 ajoute 50 % de la taille actuelle (max 300 GiB). S'applique une fois que le PVC atteint 100 GiB.

Étape 3 : Appliquer la politique

kubectl create -f StorageAutoScalerPolicy.yaml

Vérifier l'expansion automatique

Les étapes suivantes déclenchent cinq événements d'expansion avec un StatefulSet de test, en utilisant la politique définie ci-dessus.

Étape 1 : Créer un StatefulSet de test

Créez un fichier nommé 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

Appliquez-le et confirmez que le pod est en cours d'exécution :

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

Sortie attendue :

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

Vérifiez la capacité initiale du disque :

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

Sortie attendue :

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

Étape 2 : Déclencher la première expansion (de 25 GiB à 75 GiB)

Écrivez 22 Go de données pour faire dépasser l'utilisation de 80 % :

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

Vérifiez les événements d'expansion :

kubectl get events

Le disque fait 25 GiB et l'utilisation dépasse 80 %, donc action1 ajoute 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.

Vérifiez la capacité du PVC :

kubectl get pvc

Sortie attendue :

NAME               STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
pvc-disk-nginx-0   Bound    d-uf66kkzltnq6xgi9****   75Gi       RWO            alicloud-disk-topology-alltype   <unset>                 26m

Étape 3 : Déclencher la deuxième expansion (de 75 GiB à 100 GiB)

Écrivez 40 Go pour faire dépasser à nouveau l'utilisation de 80 % :

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

action1 se déclenche à nouveau, mais sa limite de 100 GiB plafonne l'expansion à 100 GiB :

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.

Étape 4 : Déclencher la troisième expansion (de 100 GiB à 150 GiB)

À 100 GiB, la limite d'action1 est atteinte, donc action2 prend le relais et ajoute 50 % de la taille actuelle :

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.

Étape 5 : Déclencher la quatrième expansion (de 150 GiB à 225 GiB)

action2 se déclenche à nouveau, ajoutant 50 % de 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.

Étape 6 : Déclencher la cinquième expansion (de 225 GiB à 300 GiB)

action2 se déclenche une dernière fois, plafonnée à sa limite de 300 GiB :

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

Les deux actions ont atteint leurs limits. Aucune autre expansion ne se produit.

Étapes suivantes

Pour les problèmes liés aux volumes de disque cloud, consultez FAQ sur les volumes de disque cloud.