Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Configure automatic disk expansion

Última actualización: Sep 04, 2026

Establezca umbrales en una StorageAutoScalerPolicy para que storage-auto-expander en storage-operator expanda automáticamente los volúmenes de disco.

Funcionamiento

Cuando storage-auto-expander detecta que el uso del disco PVC supera el umbral, expande el volumen en la siguiente secuencia:

  1. Supervisa el uso del disco en los PVC que coinciden con el selector de etiquetas de la política.

  2. Cuando el uso supera el umbral, selecciona la primera acción coincidente y envía una solicitud de cambio de tamaño al controlador CSI (Container Storage Interface).

  3. El controlador CSI cambia el tamaño del disco en la nube e indica a Kubernetes que ajuste el tamaño del sistema de archivos.

  4. La capacidad del PVC se actualiza después de que finaliza el cambio de tamaño del sistema de archivos.

Restricciones de tiempo: El intervalo de verificación del desencadenante es de máximo 2 minutos, y la expansión toma aproximadamente 1 minuto. No llene el disco dentro de los 3 minutos posteriores a una expansión anterior.

Límites

Límite

Detalle

Versión de Kubernetes

Requiere Kubernetes 1.16 o posterior. Actualice el clúster si es necesario.

Tipo de disco

Los discos básicos no son compatibles. Consulte ResizeDisk para conocer los tipos de disco elegibles.

StorageClass

La StorageClass del PVC debe tener allowVolumeExpansion: true. Las StorageClass proporcionadas por ACK habilitan esta opción de forma predeterminada. Para las StorageClass personalizadas, establezca el parámetro durante la creación; las StorageClass existentes no se pueden modificar.

Estado del pod

El pod de la aplicación que utiliza el disco debe estar en estado Running.

Habilitar el módulo storage-auto-expander

El módulo storage-auto-expander en storage-operator gestiona la expansión automática. Para comprobar si storage-operator está instalado y conocer su versión, vaya a Operations > Add-ons > Volumes.

  • v1.33.1 y posteriores: El módulo está habilitado de forma predeterminada. No se requiere ninguna acción.

  • Anteriores a v1.33.1: Habilite el módulo:

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

    Para actualizar storage-operator, consulte Upgrade add-ons.

Configurar una política de expansión automática

Paso 1: Comprobar que la expansión de volúmenes está habilitada en su StorageClass

kubectl get sc

La columna ALLOWVOLUMEEXPANSION debe ser true. Ejemplo de salida:

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
Utilice alicloud-disk-topology-alltype siempre que sea posible. Selecciona automáticamente el tipo de disco según el tipo de instancia y la disponibilidad de la zona, lo que reduce los fallos de aprovisionamiento. Consulte Use dynamically provisioned volumes .

Paso 2: Crear una StorageAutoScalerPolicy

Cree un archivo llamado 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

Campos clave:

Campo

Descripción

pvcSelector

Selecciona PVC por etiqueta. Ejemplo: app: nginx.

namespaces

Namespaces de los PVC objetivo. Múltiples valores utilizan lógica OR. Valor predeterminado: default.

conditions

Condiciones de activación. Múltiples condiciones utilizan lógica AND. key: métrica (volume-capacity-used-percentage = porcentaje de uso del disco). operator: Gt (mayor que), Lt (menor que), Eq (igual) o Ne (no igual); no distingue entre mayúsculas y minúsculas. values: umbral como cadena de texto.

actions

Acciones que se ejecutan cuando se cumplen las condiciones. Se ejecuta la primera acción coincidente y se omiten las demás. type: debe ser volume-expand. params.scale: cantidad de expansión, ya sea absoluta (por ejemplo, 50Gi) o porcentual (por ejemplo, 50%). params.limits: tamaño máximo del PVC para esta acción.

La política se activa cuando el uso del PVC supera el 80%:

  • action1 agrega 50 GiB (máximo 100 GiB). Se aplica mientras el PVC tenga menos de 100 GiB.

  • action2 agrega el 50% del tamaño actual (máximo 300 GiB). Se aplica una vez que el PVC alcanza los 100 GiB.

Paso 3: Aplicar la política

kubectl create -f StorageAutoScalerPolicy.yaml

Verificar la expansión automática

Los siguientes pasos desencadenan cinco eventos de expansión con un StatefulSet de prueba, utilizando la política definida anteriormente.

Paso 1: Crear un StatefulSet de prueba

Cree un archivo llamado 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

Aplíquelo y confirme que el pod se esté ejecutando:

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

Salida esperada:

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

Compruebe la capacidad inicial del disco:

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

Salida esperada:

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

Paso 2: Desencadenar la primera expansión (de 25 GiB a 75 GiB)

Escriba 22 GB de datos para elevar el uso por encima del 80%:

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

Revise los eventos de expansión:

kubectl get events

Dado que el disco es de 25 GiB y el uso supera el 80%, action1 agrega 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.

Verifique la capacidad del PVC:

kubectl get pvc

Salida esperada:

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

Paso 3: Desencadenar la segunda expansión (de 75 GiB a 100 GiB)

Escriba 40 GB para elevar el uso por encima del 80% nuevamente:

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

action1 se activa de nuevo, pero su límite de 100 GiB restringe la expansión a 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.

Paso 4: Desencadenar la tercera expansión (de 100 GiB a 150 GiB)

Al llegar a 100 GiB, se alcanza el límite de action1, por lo que action2 toma el control y agrega el 50% del tamaño actual:

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.

Paso 5: Desencadenar la cuarta expansión (de 150 GiB a 225 GiB)

action2 se activa nuevamente y agrega el 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.

Paso 6: Desencadenar la quinta expansión (de 225 GiB a 300 GiB)

action2 se activa por última vez, limitada a su máximo 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

Ambas acciones han alcanzado sus limits. No se realizarán más expansiones.

Siguientes pasos

Para problemas relacionados con volúmenes de disco en la nube, consulte Cloud disk volume FAQ.