No Google Kubernetes Engine (GKE) versão 1.24 ou posterior, é possível usar o recurso de expansão de volume do Kubernetes para alterar a capacidade de um volume permanente após a criação.
Para saber mais 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 que você quer redimensionar é gerenciado por um driver CSI, siga estas instruções:
- Verifique se a versão do Cluster do GKE é a 1.16 ou uma mais recente. Se o cluster tiver pools de nós do Windows, verifique se a versão do cluster do GKE é 1.18 ou superior. Se você estiver usando o driver CSI do GKE Filestore gerenciado, a versão do cluster precisará ser de 1.21 ou superior.
- Confira a documentação do fornecedor de armazenamento para verificar se o driver CSI é compatível com a expansão de volume. O driver CSI do Persistent Disk do Compute Engine e o driver CSI do Filestore são compatíveis com a expansão de volume.
- Se o volume que você quer redimensionar é gerenciado por um plug-in de volume na árvore, siga estas instruções:
- Verifique se a versão do Cluster do GKE é a 1.11 ou uma mais recente. Embora as versões 1.11-1.14 do Cluster do GKE sejam compatíveis com a expansão de volumes gerenciados por plug-ins em árvore, é necessário que todos os pods que usam o volume sejam encerrados e recriados para concluir a expansão.
- Confira a documentação do fornecedor de armazenamento para verificar se o plug-in de volume em árvore é compatível com a expansão de volume, como é o caso do plug-in em árvore do Persistent Disk do Compute Engine.
Como usar a expansão de volume
Para usar a expansão de volume, execute as seguintes tarefas:
Adicione
allowVolumeExpansion: true
ao StorageClass se ainda não existir o campo. Exemplo:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: true
Solicite uma alteração na capacidade do volume ao editar o campo
spec.resources.requests.storage
do PersistentVolumeClaim.kubectl edit pvc pvc-name
Por exemplo, é possível alterar o PVC a seguir de um disco de 30 gibibyte (GiB) para 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
Verifique a alteração visualizando o PVC. Para ver o PVC, execute o seguinte comando:
kubectl get pvc pvc-name -o yaml
Futuramente, você verá o novo volume no campo
status.capacity
. 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 ...
Quando a capacidade de um PersistentVolume é modificada diretamente, isso pode fazer os sistemas de arquivos do contêiner ficarem incorretos. Para corrigir esses problemas, consulte Resolver problemas em alterações de expansão de volume.
Como gerenciar expansões de volume em StatefulSets
Se você precisar aumentar o tamanho dos volumes usados por pods em um
StatefulSet
no Kubernetes, ajuste o campo spec.resources.requests.storage
dos PersistentVolumeClaims (PVCs) associados com os pods. A tentativa de
modificar o campo volumeClaimTemplates
diretamente no objeto StatefulSet
causará um erro.
Além disso, se você aumentar a contagem de réplicas do StatefulSet, ele ainda criará PVCs do tamanho original. Para alterar permanentemente o tamanho dos volumes provisionados para os pods gerenciados pelo StatefulSet, é necessário excluir e recriar o objeto StatefulSet com o tamanho atualizado especificado no campo volumeClaimTemplates
.
Esse processo resultará na exclusão dos pods antigos
e dos PVCs correspondentes. Dependendo do ReclaimPolicy
,
o armazenamento subjacente também pode ser excluído.
Execute as etapas a seguir para manter os pods originais em execução enquanto ajusta o StatefulSet para provisionar réplicas futuras com o novo tamanho do volume.
Salve o StatefulSet atual em um arquivo:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
Remova o objeto StatefulSet do cluster, mantendo os pods em execução como independentes:
kubectl delete sts statefulset-name --cascade=orphan
Edite o novo tamanho do armazenamento do volume no arquivo
sts-backup.yaml
salvo localmente, especificamente o valor despec.volumeClaimTemplates.spec.resources.requests.storage
.Recrie o StatefulSet no cluster:
kubectl apply -f sts-backup.yaml
A seguir
- Saiba mais sobre os volumes.
- Saiba mais sobre Como redimensionar volumes permanentes usando o Kubernetes.