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:
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
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
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.
Guarde o StatefulSet existente num ficheiro:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
Para cada PersistentVolumeClaim no StatefulSet, abra o objeto
PersistentVolumeClaim
num editor de texto:kubectl edit pvc PVC_NAME
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.
Guarde as edições e feche o editor de texto. Aguarde que o Kubernetes atualize o PersistentVolumeClaim com as suas alterações.
Remova o objeto StatefulSet do cluster, mantendo os pods em execução como pods autónomos:
kubectl delete sts statefulset-name --cascade=orphan
Edite o novo tamanho do armazenamento de volumes no ficheiro
sts-backup.yaml
guardado localmente, especificamente o valor despec.volumeClaimTemplates.spec.resources.requests.storage
Recrie o StatefulSet no cluster:
kubectl apply -f sts-backup.yaml
O que se segue?
- Saiba mais acerca dos volumes.
- Saiba mais sobre como redimensionar volumes persistentes com o Kubernetes.