Usar a expansão de volume

Na versão 1.24 ou posterior do Google Kubernetes Engine (GKE), pode usar a funcionalidade de expansão de volume do Kubernetes para alterar a capacidade de um volume persistente após a respetiva criação.

Para mais informações sobre a expansão de volume, consulte a documentação do Kubernetes de código aberto.

Pré-requisitos

A expansão de volume tem os seguintes pré-requisitos:

  • Se o volume cujo tamanho quer alterar for gerido por um controlador CSI:
    • Certifique-se de que a versão do cluster do GKE é a 1.16 ou posterior. Se o cluster tiver pools de nós do Windows, certifique-se de que a versão do cluster do GKE é 1.18 ou posterior. Se estiver a usar o controlador CSI do GKE Filestore gerido, a versão do cluster tem de ser 1.21 ou posterior.
    • Consulte a documentação do fornecedor de armazenamento para verificar se o controlador CSI suporta a expansão de volume. O controlador CSI do Persistent Disk do Compute Engine e o controlador CSI do Filestore suportam a expansão de volumes.
  • Se o volume que quer redimensionar for gerido por um plug-in de volume na árvore:
    • Certifique-se de que a versão do cluster do GKE é 1.11 ou superior. Embora as versões 1.11 a 1.14 do cluster do GKE suportem a expansão de volumes geridos por plug-ins no interior da árvore, requerem que todos os pods que usam o volume sejam terminados e recriados para concluir a expansão do volume.
    • Consulte a documentação do fornecedor de armazenamento para verificar se o plug-in de volume interno suporta a expansão de volume (o plug-in interno do disco persistente do Compute Engine suporta).
  • Não pode usar a expansão de volume quando usa o modo de acesso ReadOnlyMany.

Usar a expansão de volume

Para usar a expansão de volume, execute as seguintes tarefas:

  1. Adicione allowVolumeExpansion: true à sua StorageClass, se a sua StorageClass ainda não tiver o campo. Por exemplo:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. Peça uma alteração na capacidade do volume editando o campo spec.resources.requests.storage do PersistentVolumeClaim.

     kubectl edit pvc pvc-name
    

    Por exemplo, pode alterar o PVC seguinte de ter um disco de 30 gibibytes (GiB) para ter um disco de 40 GiB.

    Antes da edição:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    Após a edição:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. Valide a alteração através da visualização do PVC. Para ver o PVC, execute o seguinte comando:

    kubectl get pvc pvc-name -o yaml
    

    Eventualmente, deve ver o novo volume no campo status.capacity. Por exemplo:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

Se a capacidade de um PersistentVolume for modificada diretamente, o sistema de ficheiros do contentor pode ficar incorreto. Para corrigir estes problemas, consulte o artigo Resolva problemas de alterações de expansão de volume.

Gerir expansões de volumes em StatefulSets

Se precisar de aumentar o tamanho dos volumes usados pelos pods num StatefulSet no Kubernetes, deve ajustar o campo spec.resources.requests.storage dos PersistentVolumeClaims (PVCs) associados aos pods. A tentativa de modificar o campo volumeClaimTemplates diretamente no objeto StatefulSet vai causar um erro.

Além disso, se aumentar o número de réplicas do StatefulSet, continuam a ser criados PVCs do tamanho original. Para alterar permanentemente o tamanho dos volumes aprovisionados para os pods geridos pelo StatefulSet, tem de eliminar e recriar o objeto StatefulSet com o tamanho atualizado especificado no campo volumeClaimTemplates.

Pode realizar os seguintes passos para manter os pods originais em funcionamento enquanto ajusta o StatefulSet para aprovisionar réplicas futuras com o novo tamanho do volume.

  1. Guarde o StatefulSet existente num ficheiro:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Para cada PersistentVolumeClaim no StatefulSet, abra o objeto PersistentVolumeClaim num editor de texto:

    kubectl edit pvc PVC_NAME
    
  3. Atualize o campo spec.resources.requests.storage para o novo tamanho do volume, como no exemplo seguinte:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    # lines omitted for clarity
    spec:
      resources:
        requests:
          storage: 14Gi
    # lines omitted for clarity
    

    Para ver detalhes, consulte o artigo Expandir reivindicações de volumes persistentes.

  4. Guarde as edições e feche o editor de texto. Aguarde que o Kubernetes atualize o PersistentVolumeClaim com as suas alterações.

  5. Remova o objeto StatefulSet do cluster, mantendo os pods em execução como pods autónomos:

    kubectl delete sts statefulset-name --cascade=orphan
    
  6. Edite o novo tamanho do armazenamento de volumes no ficheiro sts-backup.yaml guardado localmente, especificamente o valor de spec.volumeClaimTemplates.spec.resources.requests.storage

  7. Recrie o StatefulSet no cluster:

    kubectl apply -f sts-backup.yaml
    

O que se segue?