Este documento fornece orientações de resolução de problemas para problemas de armazenamento.
O volume não é anexado
Este problema pode ocorrer se um disco virtual estiver associado à máquina virtual errada e pode dever-se ao problema n.º 32727 no Kubernetes 1.12.
O resultado de gkectl diagnose cluster
tem o seguinte aspeto:
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
Neste exemplo, um ou mais pods estão bloqueados no estado ContainerCreating
e apresentam avisos como o resultado do exemplo seguinte:
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'.
Se um disco virtual estiver associado à máquina virtual errada, pode desassociá-lo manualmente através dos seguintes passos:
Drenar um nó. Opcionalmente, pode incluir os sinalizadores
--ignore-daemonsets
e--delete-local-data
no comando kubectl drain.Edite a configuração de hardware da VM no vCenter para remover o volume.
O volume é perdido
Este problema pode ocorrer se um disco virtual tiver sido eliminado permanentemente. Esta situação pode ocorrer se um operador eliminar manualmente um disco virtual ou eliminar a VM à qual o disco está anexado.
Se vir um erro "não encontrado" relacionado com o seu ficheiro VMDK, é provável que o disco virtual tenha sido eliminado permanentemente.
O resultado de gkectl diagnose cluster
tem o seguinte aspeto:
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 bloqueados no estado ContainerCreating
, conforme mostrado no seguinte exemplo de resultado:
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 este problema ocorra, faça a gestão das suas máquinas virtuais conforme descrito em Redimensionar um cluster de utilizadores e Atualizar clusters.
Para resolver este problema, pode limpar manualmente os recursos do Kubernetes relacionados:
Elimine o PVC que fez referência ao PV executando o comando
kubectl delete pvc [PVC_NAME]
.Elimine o pod que referenciou o PVC executando o comando
kubectl delete pod [POD_NAME]
.Repita o passo 2 devido ao problema do Kubernetes n.º 74374.
O volume do CSI do vSphere não é separado
Este problema ocorre se o privilégio CNS > Searchable
não tiver sido concedido ao utilizador do vSphere.
Se encontrar pods bloqueados na fase ContainerCreating
com avisos FailedAttachVolume
, pode dever-se a uma desassociação falhada num nó diferente.
Para verificar se existem erros de desanexação de CSI, execute o seguinte comando:
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
O resultado é semelhante ao seguinte exemplo:
NAME DETACH_ERROR
csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5 rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission
csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192d <none>
csi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c <none>
csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8 <none>
Para resolver este problema, adicione o privilégio CNS > Searchable
à sua conta de utilizador do vCenter.
A operação de desassociação é repetida automaticamente até ser bem-sucedida.
O controlador CSI do vSphere não é suportado no anfitrião ESXi
Este problema ocorre quando um anfitrião ESXi no cluster vSphere está a executar uma versão inferior à do ESXi 6.7U3.
A saída de gkectl check-config
inclui o seguinte aviso:
The vSphere CSI driver is not supported on current ESXi host versions.
CSI requires ESXi 6.7U3 or above. See logs for ESXi version details.
Para resolver este problema, atualize os seus anfitriões ESXi para a versão 6.7U3 ou posterior.
A criação do volume de CSI falha com o erro NotSupported
Este problema ocorre quando um anfitrião ESXi no cluster vSphere está a executar uma versão inferior à do ESXi 6.7U3.
A saída de kubectl describe pvc
inclui o seguinte erro:
Failed to provision volume with StorageClass <standard-rwo>: rpc error:
code = Internal desc = Failed to create volume. Error: CnsFault error:
CNS: Failed to create disk.:Fault cause: vmodl.fault.NotSupported
Para resolver este problema, atualize os seus anfitriões ESXi para a versão 6.7U3 ou posterior.
O volume do CSI do vSphere não é anexado
Este problema conhecido do Kubernetes no controlador CSI do vSphere de código aberto ocorre quando um nó é encerrado, eliminado ou falha.
O resultado de kubectl describe pod
tem o seguinte aspeto:
Events:
Type Reason From Message
---- ------ ... ---- -------
Warning FailedAttachVolume ... 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 este problema, conclua os seguintes passos:
Tome nota do nome do PersistentVolumeClaim (PVC) no resultado anterior e encontre os VolumeAttachments associados ao PVC:
kubectl get volumeattachments | grep pvc-xxxxx
O exemplo de resultado seguinte mostra os nomes dos VolumeAttachments:
csi-yyyyy csi.vsphere.vmware.com pvc-xxxxx node-zzzzz ...
Descreva os VolumeAttachments:
kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
Tome nota da data/hora de eliminação, como no seguinte exemplo de resultado:
Deletion Timestamp: 2021-03-10T22:14:58Z
Aguarde até à hora especificada pela data/hora de eliminação e, em seguida, force a eliminação do VolumeAttachment. Para tal, edite o objeto VolumeAttachment e elimine o finalizador.
kubectl edit volumeattachment csi-yyyyy
Elimine o finalizador:
[...] Finalizers: external-attacher/csi-vsphere-vmware-com
O VolumeSnapshot do CSI do vSphere não está pronto devido à versão
Este problema ocorre quando a versão do vCenter Server ou do anfitrião ESXi é inferior à 7.0 Update 3.
O resultado de kubectl describe volumesnapshot
inclui erros como no exemplo seguinte:
rpc error: code = Unimplemented desc = VC version does not support snapshot operations.
Para resolver este problema, atualize o vCenter Server e os anfitriões ESXi para a versão 7.0 Update 3 ou posterior.
O VolumeSnapshot do CSI do vSphere não está pronto, número máximo de instantâneos por volume
Este problema ocorre quando o número de instantâneos por volume atinge o valor máximo para o controlador de armazenamento de contentores do vSphere. O valor predefinido é três.
O resultado de kubectl describe volumesnapshot
inclui os erros, como no exemplo seguinte:
rpc error: code = FailedPrecondition desc = the number of snapshots on the source volume 5394aac1-bc0a-44e2-a519-1a46b187af7b reaches the configured maximum (3)
Para resolver este problema, use os seguintes passos para atualizar o número máximo de cópias instantâneas por volume:
Obtenha o nome do segredo que fornece a configuração do vSphere ao controlador do CSI do vSphere:
kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> get deployment vsphere-csi-controller \ --namespace <var class="edit">USER_CLUSTER_NAME</var> \ --output json \ | jq -r '.spec.template.spec.volumes[] \ | select(.name=="vsphere-secret") .secret.secretName'
Substitua o seguinte:
- ADMIN_KUBECONFIG: o caminho do ficheiro kubeconfig do cluster de administrador
- USER_CLUSTER_NAME: o nome do seu cluster de utilizadores
Obtenha o valor de
data.config
do Secret, descodifique-o em base64 e guarde-o num ficheiro com o nomeconfig.txt
:kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> get secret <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME </var> \ --output json | jq -r '.data["config"]' | base64 -d > config.txt
Substitua SECRET_NAME pelo nome do segredo do passo anterior.
Abra
config.txt
para edição:Edite ou adicione o campo
global-max-snapshots-per-block-volume
na secção[Snapshot]
, como no exemplo seguinte:[Global] cluster-id = "my-user-cluster" insecure-flag = "0" user = "my-account.local" password = "fxqSD@SZTUIsG" [VirtualCenter "my-vCenter"] port = "443" datacenters = "my-datacenter1" [Snapshot] global-max-snapshots-per-block-volume = 4
Elimine e volte a criar o segredo:
kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> delete secret <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME</var> kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> create secret generic <var class="edit">SECRET_NAME</var> \ --namespace <var class="edit">USER_CLUSTER_NAME</var> \ --from-file=config
Reinicie a implementação do
vsphere-csi-controller
:kubectl --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> rollout restart deployment vsphere-csi-controller \ --namespace <var class="edit">USER_CLUSTER_NAME</var>
O que se segue?
Se precisar de assistência adicional, contacte o apoio ao cliente do Google Cloud.
Também pode consultar o artigo Receber apoio técnico para mais informações sobre recursos de apoio técnico, incluindo o seguinte:
- Requisitos para abrir um registo de apoio ao cliente.
- Ferramentas para ajudar a resolver problemas, como registos e métricas.
- Componentes suportados, versões e funcionalidades do Google Distributed Cloud para VMware (apenas software).