En este documento, se proporcionan instrucciones para solucionar problemas de almacenamiento.
No se puede conectar el volumen
Este problema se puede generar si un disco virtual está conectado a la máquina virtual incorrecta. Puede deberse al problema n.º 32727 en Kubernetes 1.12.
La salida de gkectl diagnose cluster
debería verse de la siguiente manera:
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
Uno o más Pods se detienen en el estado ContainerCreating
con advertencias como esta:
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 solucionar este problema, sigue estos pasos:
Si un disco virtual está conectado a la máquina virtual incorrecta, es posible que debas desconectarlo de forma manual:
Desvía el nodo. Consulta Safely draining a node (Desvío seguro de un nodo). Se recomienda incluir las marcas
--ignore-daemonsets
y--delete-local-data
en el comando kubectl drain.Edita el archivo de configuración de hardware de la VM en vCenter para quitar el volumen.
Se perdió el volumen
Este problema puede ocurrir si se borró un disco virtual de forma permanente. Esto puede suceder si un operador borra de forma manual un disco virtual o la máquina virtual a la que está conectado. Si ves un error “no encontrado” relacionado con tu archivo VMDK, es probable que el disco virtual se haya borrado de forma permanente.
La salida de gkectl diagnose cluster
debería verse de la siguiente manera:
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
Uno o más Pods se quedan en 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 se produzca este problema, administra tus máquinas virtuales como se describe en Cambia el tamaño de un clúster de usuarios y Actualiza clústeres.
Para resolver este problema, es posible que tengas que limpiar de forma manual los recursos relacionados de Kubernetes:
Ejecuta
kubectl delete pvc [PVC_NAME]
para borrar el PVC que hizo referencia al PV.Ejecuta
kubectl delete pod [POD_NAME]
para borrar el Pod que hizo referencia al PVC.Repite el paso 2. Sí, de verdad. Consulta el problema 74374 de Kubernetes.
No se puede desconectar el volumen de CSI de vSphere
Este problema se genera si no se otorgó el privilegio CNS > Searchable
al usuario de vSphere.
Si encuentras Pods atascados en la fase ContainerCreating
con advertencias FailedAttachVolume
, podría deberse a una desconexión con errores en un nodo diferente.
Para verificar los errores de desconexión de CSI, sigue estos pasos:
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
El resultado es similar a este:
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 este problema, agrega el privilegio CNS > Searchable
a tu cuenta de usuario de vCenter.
La operación de desconexión se reintenta automáticamente hasta que se complete de forma correcta.
El controlador de CSI de vSphere no es compatible con el host de ESXi
Este problema se produce cuando un host ESXi en el clúster de vSphere ejecuta una versión inferior a ESXi 6.7U3.
El resultado de gkectl check-config
incluye esta advertencia:
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, actualiza tus hosts de ESXi a la versión 6.7U3 o posterior.
No se pudo crear el volumen de CSI con el error NotSupported
Este problema se produce cuando un host ESXi en el clúster de vSphere ejecuta una versión inferior a ESXi 6.7U3.
En el resultado de kubectl describe pvc
, se incluye este error:
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 este problema, actualiza tus hosts de ESXi a la versión 6.7U3 o posterior.
No se pudo adjuntar el volumen de CSI de vSphere
Este problema conocido en el controlador de CSI de vSphere de código abierto se produce cuando un nodo se cierra, se borra o falla.
La salida de kubectl describe pod
debería verse de la siguiente manera:
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 solucionar este problema, sigue estos pasos:
Toma nota del nombre de PersistentVolumeClaim (PVC) en el resultado anterior y busca los VolumeAttachments asociados con el PVC. Por ejemplo:
kubectl get volumeattachments | grep pvc-xxxxx
En el resultado, se muestran los nombres de los VolumeAttachments. Por ejemplo:
csi-yyyyy csi.vsphere.vmware.com pvc-xxxxx node-zzzzz ...
Describe los VolumeAttachments. Por ejemplo:
kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
Toma nota de la marca de tiempo de eliminación en el resultado.
Deletion Timestamp: 2021-03-10T22:14:58Z
Espera hasta el tiempo especificado en la marca de tiempo de eliminación y, luego, fuerza la eliminación del VolumeAttachment. Para ello, edita el objeto VolumeAttachment y borra el finalizador. Por ejemplo:
kubectl edit volumeattachment csi-yyyyy Finalizers: external-attacher/csi-vsphere-vmware-com