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:
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">.Edite a configuração de hardware da VM no vCenter para remover o volume.
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:
Execute
kubectl delete pvc [PVC_NAME]
para excluir o PVC que fez referência ao PV.Execute
kubectl delete pod [POD_NAME]
para excluir o pod que fez referência ao PVC.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-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192dcsi-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:
Observe o nome do PersistentVolumeClaim (PVC) na saída anterior.
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 ...
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
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