Este documento descreve como aumentar dinamicamente a capacidade de armazenamento dos volumes gerenciados do Lustre para suas cargas de trabalho com estado no Google Kubernetes Engine (GKE) sem interromper os aplicativos.
Por exemplo, se os jobs de treinamento de IA/ML de longa duração tiverem requisitos de armazenamento dinâmicos e imprevisíveis, ative a expansão de volume do Managed Lustre para aumentar a capacidade de armazenamento do PersistentVolume (PV) do Managed Lustre atual.
Este documento é destinado a administradores e operadores de plataforma, DevOps, administradores de armazenamento e engenheiros de machine learning (ML) que gerenciam o armazenamento de cargas de trabalho com estado no GKE.
Quando você expande um volume, os custos aumentam com base na nova capacidade maior, de acordo com os preços padrão do Managed LustreGoogle Cloud .
Antes de começar
Requisitos
Verifique se você atende aos seguintes requisitos:
- Você precisa ter um cluster do GKE versão 1.35.0-gke.2331000 ou mais recente.
- É necessário ativar o driver CSI do Lustre gerenciado em um cluster atual. O driver é desativado por padrão nos clusters Standard e do Autopilot.
Limitações
- Só é possível aumentar o tamanho de um volume atual, não diminuir.
- Não é possível usar a expansão de volume com o modo de acesso
ReadOnlyMany. - Ao redimensionar volumes do Lustre, siga os limites de capacidade mínima e máxima e os tamanhos de etapa definidos pelo nível de desempenho do volume. Para mais informações, consulte Considerações sobre desempenho.
- Especifique os tamanhos de volume do Lustre em GiB como múltiplos de 1.000. O Kubernetes traduz unidades como Ti em valores binários (por exemplo, 18 Ti são interpretados como 18.432 GiB), o que faz com que a API Lustre rejeite a solicitação.
Ativar a expansão de volume para uma StorageClass
Verifique se a StorageClass é compatível com a expansão de volume:
kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Substitua
STORAGECLASS_NAMEpelo nome da sua StorageClass.Se o comando não gerar nada ou retornar
false, atualize explicitamente a configuração do StorageClass para permitir a expansão.Abra a configuração do StorageClass para edição:
kubectl edit storageclass STORAGECLASS_NAMENo editor, adicione o campo
allowVolumeExpansion: trueà configuração do StorageClass:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-sc provisioner: lustre.csi.storage.gke.io ... allowVolumeExpansion: true
Expandir um PersistentVolumeClaim
Para iniciar a expansão do volume, edite o PersistentVolumeClaim (PVC) para solicitar um aumento no tamanho do volume.
- Identifique o novo tamanho válido para expansão, conforme descrito em Determinar tamanhos de expansão válidos.
Abra a configuração do PVC para edição:
kubectl edit pvc PVC_NAMESubstitua
PVC_NAMEpelo nome da PVC.No editor, atualize o campo
spec.resources.requests.storagecom o tamanho de expansão válido. Por exemplo, para expandir um volume de9000Gipara18000Gi, modifique o campostorageda seguinte maneira:spec: accessModes: - ReadWriteOnce resources: requests: storage: 18000Gi # Changed from 9000Gi
Verificar a expansão de volume
Monitore o progresso da expansão revisando os eventos do PVC:
kubectl describe pvc PVC_NAMEOs eventos a seguir na saída do PVC indicam o progresso ou resultado atual da solicitação de expansão de volume:
ExternalExpanding: indica que o Kubernetes está aguardando oexternal-resizerexpandir o PVC.Resizing: indica que a operação de redimensionamento está em andamento. Essa operação pode levar até 90 minutos para aumentos de capacidade maiores.VolumeResizeSuccessful: confirma que o volume foi expandido.VolumeResizeFailed: indica que ocorreu um erro. A mensagem de evento contém detalhes da API Google Cloud Managed Lustre. Esse estado pode ser transitório e se resolver sozinho.
Depois que a expansão for concluída, verifique a configuração atualizada do PVC:
kubectl get pvc PVC_NAME -o yamlVerifique se o campo
status.capacityreflete o novo tamanho incrementado.
Se você encontrar problemas durante o processo de expansão, consulte Solução de problemas.
Determinar tamanhos de expansão válidos
Para determinar o novo tamanho do volume, primeiro identifique o nível de desempenho e o tamanho da etapa correspondente.
Identificar o nível de desempenho do volume
Para encontrar o nível de desempenho do volume, use uma destas opções:
StorageClass
Execute o comando a seguir e procure o valor perUnitStorageThroughput (por exemplo, 1000). Esse valor indica o nível de performance em MBps por TiB.
kubectl get sc STORAGECLASS_NAME -o yaml
Substitua STORAGECLASS_NAME pelo nome da sua StorageClass.
Instância do Lustre
Para identificar o nível de desempenho do seu volume, verifique diretamente as propriedades da instância do Managed Lustre:
Encontre o nome do PV vinculado ao seu PVC:
kubectl get pvc PVC_NAMESubstitua
PVC_NAMEpelo nome da PVC.A resposta será semelhante a esta: Observe o nome PV na coluna
VOLUME, por exemplo,pv-lustre.NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-lustre Bound pv-lustre 9000Gi RWX lustre-rwx <unset> 26mEncontre o local e o nome da instância do volume no campo
volumeHandle:kubectl get pv PV_NAME -o yamlSubstitua
PV_NAMEpelo nome do PV da etapa anterior.O valor
volumeHandleé formatado comoPROJECT_ID/LOCATION/INSTANCE_NAME. Anote oINSTANCE_NAMEe oLOCATIONpara a próxima etapa.Verifique as propriedades do nível de desempenho descrevendo a instância do Managed Lustre:
gcloud lustre instances describe INSTANCE_NAME --location=LOCATIONSubstitua
INSTANCE_NAMEeLOCATIONpelos valores da etapa anterior.Na saída, procure o campo
perUnitStorageThroughput. Esse valor indica o nível de desempenho em MBps por TiB.
Limites de capacidade e tamanhos de etapas
Depois de identificar o nível de performance, consulte a tabela a seguir para encontrar os limites de capacidade associados e o tamanho da etapa necessário.
Nível (perUnitStorageThroughput) |
Capacidade mínima | Capacidade máxima | Taxa de aprendizagem |
|---|---|---|---|
| 1.000 MBps por TiB | 9.000 GiB | 954.000 GiB (~1 PiB) | 9.000 GiB |
| 500 MBps por TiB | 18.000 GiB | 1.908.000 GiB (~2 PiB) | 18.000 GiB |
| 250 MBps por TiB | 36.000 GiB | 3.816.000 GiB (~4 PiB) | 36.000 GiB |
| 125 MBps por TiB | 72.000 GiB | 7.632.000 GiB (~8 PiB) | 72.000 GiB |
Os volumes precisam ser aumentados de acordo com o tamanho da etapa atribuído ao nível. Qualquer aumento na capacidade precisa ser um múltiplo desse tamanho de etapa específico. Por exemplo, se o volume de 1.000 MBps tiver uma capacidade de 9.000 GiB, você poderá aumentar para 18.000 GiB, 27.000 GiB e outros múltiplos.
Solução de problemas
Nesta seção, apresentamos soluções para problemas comuns que podem ocorrer ao expandir volumes do Lustre.
A expansão falha com um erro "Argumento inválido"
Sintoma
- O PVC entra em um estado
Resizing, mas depois falha. - Ao executar o comando
kubectl describe pvc PVC_NAME, você vai encontrar um erro semelhante aVolumeResizeFailed: rpc error: code = InvalidArgument desc = ....
Causa
Esse erro geralmente significa que o tamanho de armazenamento solicitado não é válido para o nível de desempenho do volume do Lustre por um dos seguintes motivos:
- O tamanho solicitado não é um múltiplo do tamanho de etapa necessário para o nível.
- O tamanho solicitado está abaixo do mínimo ou acima da capacidade máxima para o nível.
Resolução
- Consulte Limites de capacidade e taxas de aprendizado para encontrar as taxas de aprendizado e os limites de capacidade válidos para o nível de desempenho do seu volume.
- Edite o PVC novamente para solicitar um tamanho de armazenamento válido que atenda aos limites de tamanho e capacidade da etapa.
A expansão falha com um "Erro interno"
Sintoma
- O redimensionamento do PVC falha.
- Ao executar o comando
kubectl describe pvc PVC_NAME, talvez você veja um eventoVolumeResizeFailedcom uma mensagem de erro que contémcode = Internal.
Causa
Esse erro indica um problema com o serviço Managed Lustre subjacente.
Resolução
- Tente de novo aplicando o manifesto de PVC com o novo tamanho solicitado. Isso pode resolver problemas temporários de back-end.
- Se a nova tentativa falhar, entre em contato com o Cloud Customer Care.
A expansão está travada no estado "Redimensionando"
Sintoma
- A PVC permanece no estado
Resizingpor um período prolongado (mais de 30 minutos para expansões menores ou mais de 90 minutos para expansões maiores). - Talvez você veja um evento
VolumeResizeFailedcom uma mensagem de erroDEADLINE_EXCEEDED.
Causa
Esse problema pode ocorrer com aumentos de capacidade grandes, que podem levar até 90 minutos para serem concluídos. O componente csi-external-resizer pode atingir o tempo limite enquanto aguarda a resposta da API Google Cloud Managed Lustre, mesmo que a operação de expansão subjacente ainda esteja em andamento.
Resolução
- O
csi-external-resizerrepete automaticamente a operação após um período de espera. Continue monitorando os eventos de PVC para um eventoVolumeResizeSuccessful. - Se o PVC permanecer no estado
Resizingpor mais de 90 minutos, entre em contato com o Cloud Customer Care.
A expansão não começa ou fica presa no estado "ExternalExpanding"
Sintoma
- Você atualiza o campo
spec.resources.requests.storageno PVC, mas o status dele não muda paraResizing. - Quando você executa o comando
kubectl describe pvc PVC_NAME, o registro de eventos mostra apenas o estadoExternalExpandinge não avança para o estadoResizing:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ExternalExpanding 21m (x2 over 58m) volume_expand waiting for an external controller to expand this PVC
Causa
Esse comportamento geralmente indica um dos seguintes problemas:
- A StorageClass associada ao PVC não permite a expansão do volume.
- Há um problema com o contêiner secundário
csi-external-resizer, que é o componente responsável por iniciar a expansão.
Resolução
Verifique a configuração da StorageClass e confira se o campo
allowVolumeExpansion: trueestá definido:kubectl get sc STORAGECLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Se
allowVolumeExpansionestiver ausente ou definido comofalse, atualize o StorageClass para permitir a expansão de volume.Se a StorageClass estiver configurada corretamente, o problema provavelmente será com os componentes do plano de controle do GKE que gerenciam a operação de redimensionamento. Entre em contato com o Cloud Customer Care para receber ajuda.
A expansão falha devido a um problema de cota ou capacidade
Sintoma
- O redimensionamento do PVC falha, e um evento
VolumeResizeFailedaparece no PVC. - Quando você executa o comando
kubectl describe pvc PVC_NAME, a mensagem de evento do back-end do Lustre gerenciado indica um problema de cota ou capacidade.
Causa
A expansão válida solicitada não pode ser atendida porque excede a capacidade ou cota geral disponível para o serviço Managed Lustre no seu projeto ou região.
Resolução
- Edite o PVC de novo e peça um aumento menor de armazenamento.
- Entre em contato com o administrador Google Cloud da sua organização para pedir um aumento nas cotas ou na capacidade geral do serviço Lustre para seu projeto.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste documento, exclua a PVC. Essa operação também exclui o PV associado e a instância do Managed Lustre subjacente se o reclaimPolicy estiver definido como Delete.
kubectl delete pvc PVC_NAME
Substitua PVC_NAME pelo nome da PVC.
A seguir
- Saiba mais sobre o armazenamento para clusters do GKE.
- Leia a documentação sobre volumes permanentes e provisionamento do GKE.