Solução de problemas de armazenamento

Este documento fornece orientações para a solução de problemas de armazenamento.

Falha ao anexar o volume

Esse problema pode ocorrer se um disco virtual estiver anexado à máquina virtual errada. Isso pode ser devido ao Problema 32727 do Kubernetes 1.12.

A saída do gkectl diagnose cluster tem esta aparência:

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-776459c3-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-776459c3-d350-11e9-9db8-e297f465bc84.vmdk" IS attached to machine "gsl-test-user-9b46dbf9b-9wdj7" but IS NOT listed in the Node.Status
1 storage errors

Um ou mais pods estão parados no estado ContainerCreating com avisos como este:

Events:
  Type     Reason              Age               From                     Message
  ----     ------              ----              ----                     -------
  Warning  FailedAttachVolume  6s (x6 over 31s)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-776459c3-d350-11e9-9db8-e297f465bc84" : Failed to add disk 'scsi0:6'.

Para resolver o problema:

Se um disco virtual estiver anexado à máquina virtual errada, talvez seja necessário desanexá-lo manualmente:

  1. Drene o nó. Consulte Como drenar um nó com segurança {:.external"}. Talvez você queira incluir as sinalizações --ignore-daemonsets e --delete-local-data no comando kubectl drain {:.external">.

  2. Desligue a VM.

  3. Edite a configuração de hardware da VM no vCenter para remover o volume.

  4. Ligue a VM

  5. Desfaça o nó.

O volume foi perdido

Esse problema poderá ocorrer se um disco virtual for excluído permanentemente. Isso pode acontecer se um operador excluir manualmente um disco virtual ou a máquina virtual a que estiver anexado. Se você vir um erro "não encontrado" relacionado ao arquivo VMDK, é provável que o disco virtual tenha sido excluído permanentemente.

A saída do gkectl diagnose cluster tem esta aparência:

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-52161704-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk" IS NOT found
1 storage errors

Um ou mais pods estão parados no estado ContainerCreating:

Events:
  Type     Reason              Age                   From                                    Message
  ----     ------              ----                  ----                                    -------
  Warning  FailedAttachVolume  71s (x28 over 42m)    attachdetach-controller                 AttachVolume.Attach failed for volume "pvc-52161704-d350-11e9-9db8-e297f465bc84" : File []/vmfs/volumes/43416d29-03095e58/kubevols/
  kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk was not found

Para evitar que esse problema ocorra, gerencie as máquinas virtuais conforme descrito em Como redimensionar um cluster de usuário e Como fazer upgrade de clusters.

Para resolver esse problema, pode ser necessário limpar manualmente os recursos relacionados ao Kubernetes:

  1. Execute kubectl delete pvc [PVC_NAME] para excluir o PVC que fez referência ao PV.

  2. Execute kubectl delete pod [POD_NAME] para excluir o pod que fez referência ao PVC.

  3. Repita a etapa 2. Isso mesmo. Consulte o problema 74374 do Kubernetes {:.external}.

Não é possível remover o volume do CSI do vSphere

Esse problema ocorrerá se o privilégio CNS > Searchable não tiver sido concedido ao usuário do vSphere.

Se você encontrar pods parados na fase ContainerCreating com avisos FailedAttachVolume, pode ser devido a uma falha de remoção em um nó diferente.

Para verificar se há erros de remoção de CSI:

kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message

A resposta será semelhante a:

NAME                                                                   DETACH_ERROR
csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5   rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission
csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192d   
csi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c   
csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8   

Para resolver esse problema, adicione o privilégio CNS > Searchable à sua conta de usuário do vcenter. Essa operação é repetida automaticamente até ser concluída.

Falha na criação do volume CSI com erro NotSupported

Esse problema ocorre quando um host ESXi no cluster do vSphere está executando uma versão anterior à ESXi 6.7U3..

A saída de kubectl describe pvc inclui este erro:

Failed to provision volume with StorageClass : rpc error:
code = Internal desc = Failed to create volume. Error: CnsFault error:
CNS: Failed to create disk.:Fault cause: vmodl.fault.NotSupported

Para resolver esse problema, faça upgrade dos hosts ESXi para a versão 6.7U3 ou posterior.

Falha ao anexar o volume CSI do vSphere

Esse problema conhecido {:.external} no driver CSI de código aberto do vSphere ocorre quando um nó é encerrado, excluído ou falha.

A saída do kubectl describe pod tem esta aparência:

Events:
  Type     Reason              Age        From                     Message
  ----     ------              ----       ----                     -------
  Warning  FailedAttachVolume  2m30s      attachdetach-controller  Multi-Attach error for volume
                                                                   "pvc-xxxxx"
                                                                   Volume is already exclusively attached to one
                                                                   node and can't be attached to another

Para resolver o problema:

  1. Observe o nome do PersistentVolumeClaim (PVC) na saída anterior.

  2. Encontre os VolumeAttachments associados a esse PVC. Exemplo:

    kubectl get volumeattachments | grep pvc-xxxxx
    

    A saída mostra os nomes dos VolumeAttachments. Exemplo:

    csi-yyyyy   csi.vsphere.vmware.com   pvc-xxxxx   node-zzzzz ...
    
  3. Descreva os VolumeAttachments. Exemplo:

    kubectl describe volumeattachments csi-yyy | grep "Deletion Timestamp"
    

    Anote o carimbo de data/hora de exclusão na saída. Exemplo:

    Deletion Timestamp:             2021-03-10T22:14:58Z
    
  4. Aguarde até o horário especificado pelo carimbo de data/hora de exclusão e force a exclusão do VolumeAttachment. Para fazer isso, edite o objeto VolumeAttachment e exclua o finalizador. Exemplo:

    kubectl edit volumeattachment csi-yyyyy
     Finalizers:
      external-attacher/csi-vsphere-vmware-com