Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Configure automatic disk expansion

Última atualização: Jun 27, 2026

Defina limiares em uma StorageAutoScalerPolicy para que o componente storage-auto-expander do storage-operator expanda os volumes de disco automaticamente.

Como funciona

Quando o storage-auto-expander detecta que o uso de disco do PVC ultrapassou o limiar definido, ele expande o volume nesta sequência:

  1. Monitora o uso de disco nos PVCs correspondentes ao seletor de rótulos da política.

  2. Se o uso exceder o limiar, seleciona a primeira ação correspondente e envia uma solicitação de redimensionamento ao driver CSI (Container Storage Interface).

  3. O driver CSI redimensiona o disco em nuvem e sinaliza ao Kubernetes para redimensionar o sistema de arquivos.

  4. A capacidade do PVC é atualizada após a conclusão do redimensionamento do sistema de arquivos.

Restrições de tempo: O intervalo máximo entre verificações de gatilho é de 2 minutos, e a expansão leva cerca de 1 minuto. Evite preencher o disco dentro de 3 minutos após uma expansão anterior.

Limitações

Limitação

Detalhe

Versão do Kubernetes

Requer Kubernetes 1.16 ou posterior. Se necessário, atualize o cluster.

Tipo de disco

Discos básicos não são suportados. Consulte ResizeDisk para verificar os tipos de disco elegíveis.

StorageClass

A StorageClass do PVC deve ter allowVolumeExpansion: true. As StorageClasses fornecidas pelo ACK já possuem essa configuração ativada por padrão. Para StorageClasses personalizadas, defina o parâmetro no momento da criação, pois não é possível modificar StorageClasses existentes.

Estado do Pod

O pod da aplicação que utiliza o disco deve estar no estado Running.

Ative o módulo storage-auto-expander

O módulo storage-auto-expander no storage-operator gerencia a expansão automática. Para verifique se o storage-operator está instalado e consultar sua versão, acesse Operations > Add-ons > Volumes.

  • v1.33.1 e posteriores: O módulo vem ativado por padrão. Nenhuma ação é necessária.

  • Anteriores à v1.33.1: Ative o módulo executando o comando abaixo:

    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 atualizar o storage-operator, consulte Atualizar add-ons.

Configure uma política de expansão automática

Etapa 1: Verifique se a expansão de volume está habilitada na StorageClass

kubectl get sc

A coluna ALLOWVOLUMEEXPANSION deve apresentar o valor true. Exemplo de saída:

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
Sempre que possível, utilize a alicloud-disk-topology-alltype . Ela seleciona automaticamente o tipo de disco com base no tipo de instância e na disponibilidade da zona, reduzindo falhas de provisionamento. Consulte Usar volumes provisionados dinamicamente .

Etapa 2: Crie uma StorageAutoScalerPolicy

Crie um arquivo chamado 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

Principais campos:

Campo

Descrição

pvcSelector

Seleciona PVCs por rótulo. Exemplo: app: nginx.

namespaces

Defina os namespaces dos PVCs alvo. Múltiplos valores seguem lógica OR. Padrão: default.

conditions

Condições de acionamento. Múltiplas condições seguem lógica AND. key: métrica utilizada (volume-capacity-used-percentage = porcentagem de uso do disco). operator: operadores válidos incluem Gt (maior que), Lt (menor que), Eq (igual) ou Ne (diferente) — sem distinção entre maiúsculas e minúsculas. values: limiar definido como string.

actions

Ações executadas quando as condições são atendidas. Apenas a primeira ação correspondente é executada; as demais são ignoradas. type: deve ser volume-expand. params.scale: quantidade de expansão, podendo ser absoluta (ex.: 50Gi) ou percentual (ex.: 50%). params.limits: tamanho máximo permitido para o PVC nesta ação.

A política é acionada quando o uso do PVC ultrapassa 80%:

  • action1: Adiciona 50 GiB (limite de 100 GiB). Aplicável enquanto o PVC estiver abaixo de 100 GiB.

  • action2: Acrescenta 50% do tamanho atual (limite de 300 GiB). Entra em vigor assim que o PVC atinge 100 GiB.

Etapa 3: Aplicar a política

kubectl create -f StorageAutoScalerPolicy.yaml

Verifique a expansão automática

Os passos a seguir disparam cinco eventos de expansão usando um StatefulSet de teste, com base na política definida anteriormente.

Etapa 1: Crie um StatefulSet de teste

Crie um arquivo chamado 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

Aplique a configuração e confirme se o pod está em execução:

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

Saída esperada:

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

Verifique a capacidade inicial do disco:

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

Saída esperada:

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

Etapa 2: Disparar a primeira expansão (25 GiB para 75 GiB)

Grave 22 GB de dados para elevar o uso acima de 80%:

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

Consulte os eventos de expansão:

kubectl get events

Como o disco tem 25 GiB e o uso excede 80%, a action1 adiciona 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.

Confira a capacidade do PVC:

kubectl get pvc

Saída 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

Etapa 3: Disparar a segunda expansão (75 GiB para 100 GiB)

Grave mais 40 GB para levar o uso novamente acima de 80%:

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

A action1 é acionada outra vez, mas seu limite de 100 GiB restringe a expansão a esse valor:

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.

Etapa 4: Disparar a terceira expansão (100 GiB para 150 GiB)

Ao atingir 100 GiB, o limite da action1 é alcançado. Assim, a action2 assume e adiciona 50% do tamanho atual:

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.

Etapa 5: Disparar a quarta expansão (150 GiB para 225 GiB)

A action2 é disparada novamente, somando 50% de 150 GiB, o que resulta em 75 GiB adicionais:

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.

Etapa 6: Disparar a quinta expansão (225 GiB para 300 GiB)

Por fim, a action2 é executada uma última vez, limitada ao seu teto 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 as ações atingiram seus respectivos limits. Portanto, nenhuma expansão adicional ocorrerá.

Próximos passos

Em caso de problemas com volumes de disco em nuvem, consulte as Perguntas frequentes sobre volumes de disco em nuvem.