En este documento se ofrecen instrucciones para solucionar problemas de almacenamiento.
No se puede adjuntar el volumen
Este problema puede producirse si se adjunta un disco virtual a la máquina virtual incorrecta y puede deberse al problema n.º 32727 de Kubernetes 1.12.
El resultado de gkectl diagnose cluster es similar al siguiente ejemplo:
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
En este ejemplo, uno o varios pods están en el estado ContainerCreating y muestran advertencias como las del siguiente ejemplo:
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'.
Si un disco virtual está conectado a la máquina virtual incorrecta, puedes desconectarlo manualmente siguiendo estos pasos:
Drenar un nodo. También puedes incluir las marcas
--ignore-daemonsetsy--delete-local-dataen tu comando kubectl drain.Edita la configuración de hardware de la máquina virtual en vCenter para quitar el volumen.
El volumen se ha perdido
Este problema puede producirse si se ha eliminado de forma permanente un disco virtual. Esto puede ocurrir si un operador elimina manualmente un disco virtual o la máquina virtual a la que está conectado el disco.
Si ves un error "no encontrado" relacionado con tu archivo VMDK, es probable que el disco virtual se haya eliminado definitivamente.
El resultado de gkectl diagnose cluster es similar al siguiente:
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 varios pods están en el estado ContainerCreating, como se muestra en el siguiente ejemplo de salida:
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, gestiona tus máquinas virtuales como se describe en los artículos Modificar el tamaño de un clúster de usuarios y Actualizar clústeres.
Para solucionar este problema, puedes limpiar manualmente los recursos de Kubernetes relacionados:
Elimina el PVC que hacía referencia al PV ejecutando
kubectl delete pvc [PVC_NAME].Elimina el pod que hacía referencia al PVC ejecutando
kubectl delete pod [POD_NAME].Repite el paso 2 debido al problema de Kubernetes #74374.
No se puede separar el volumen de CSI de vSphere
Este problema se produce si no se ha concedido el privilegio CNS > Searchable al usuario de vSphere.
Si ves que los pods se quedan atascados en la fase ContainerCreating con advertencias de FailedAttachVolume, puede deberse a que no se han podido separar en otro nodo.
Para comprobar si hay errores de separación de CSI, ejecuta el siguiente comando:
kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message
La salida es similar al siguiente ejemplo:
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 solucionar este problema, añade el privilegio CNS > Searchable a tu cuenta de usuario de vCenter.
La operación de separación se vuelve a intentar automáticamente hasta que se realiza correctamente.
El controlador de CSI para vSphere no es compatible con el host ESXi
Este problema se produce cuando un host ESXi del clúster de vSphere ejecuta una versión anterior a ESXi 6.7U3.
La salida de gkectl check-config incluye la siguiente 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 solucionar este problema, actualiza tus hosts ESXi a la versión 6.7U3 o a una posterior.
No se puede crear el volumen de CSI y se produce un error NotSupported
Este problema se produce cuando un host ESXi del clúster de vSphere ejecuta una versión anterior a ESXi 6.7U3.
El resultado de kubectl describe pvc incluye el siguiente error:
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 solucionar este problema, actualiza tus hosts ESXi a la versión 6.7U3 o a una posterior.
No se puede adjuntar el volumen de CSI de vSphere
Este problema conocido de Kubernetes en el controlador CSI de vSphere de código abierto se produce cuando se apaga, se elimina o falla un nodo.
El resultado de kubectl describe pod tiene este aspecto:
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, siga estos pasos:
Anota el nombre de PersistentVolumeClaim (PVC) en el resultado anterior y busca los VolumeAttachments asociados al PVC:
kubectl get volumeattachments | grep pvc-xxxxxEn el siguiente ejemplo de salida se muestran los nombres de los VolumeAttachments:
csi-yyyyy csi.vsphere.vmware.com pvc-xxxxx node-zzzzz ...Describe los VolumeAttachments:
kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"Anota la marca de tiempo de la eliminación, como en el siguiente ejemplo de resultado:
Deletion Timestamp: 2021-03-10T22:14:58ZEspera hasta la hora especificada en la marca de tiempo de eliminación y, a continuación, elimina el VolumeAttachment. Para ello, edita el objeto VolumeAttachment y elimina el finalizador.
kubectl edit volumeattachment csi-yyyyyElimina el finalizador:
[...] Finalizers: external-attacher/csi-vsphere-vmware-com
VolumeSnapshot de CSI de vSphere no está listo debido a la versión
Este problema se produce cuando la versión de vCenter Server o del host ESXi es anterior a la 7.0 Update 3.
El resultado de kubectl describe volumesnapshot incluye errores como el del siguiente ejemplo:
rpc error: code = Unimplemented desc = VC version does not support snapshot operations.
Para resolver este problema, actualiza vCenter Server y los hosts ESXi a la versión 7.0 Update 3 o a una posterior.
VolumeSnapshot de CSI de vSphere no está listo, se ha alcanzado el número máximo de capturas por volumen
Este problema se produce cuando el número de snapshots por volumen alcanza el valor máximo del controlador de almacenamiento de contenedores de vSphere. El valor predeterminado es tres.
El resultado de kubectl describe volumesnapshot incluye errores como los del siguiente ejemplo:
rpc error: code = FailedPrecondition desc = the number of snapshots on the source volume 5394aac1-bc0a-44e2-a519-1a46b187af7b reaches the configured maximum (3)
Para solucionar este problema, siga estos pasos para actualizar el número máximo de instantáneas por volumen:
Obtén el nombre del secreto que proporciona la configuración de vSphere al controlador de CSI de 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'Haz los cambios siguientes:
- ADMIN_KUBECONFIG: la ruta del archivo kubeconfig de tu clúster de administrador
- USER_CLUSTER_NAME: el nombre de tu clúster de usuarios
Obtén el valor de
data.configdel secreto, decodifícalo en Base64 y guárdalo en un archivo llamadoconfig.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.txtSustituye SECRET_NAME por el nombre del secreto del paso anterior.
Abre
config.txtpara editarla:Edita o añade el campo
global-max-snapshots-per-block-volumeen la sección[Snapshot], como en el ejemplo siguiente:[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 = 4Elimina y vuelve a crear el secreto:
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=configReinicia la implementación de
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>
Siguientes pasos
Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud.
También puedes consultar la sección Obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:
- Requisitos para abrir un caso de asistencia.
- Herramientas para ayudarte a solucionar problemas, como registros y métricas.
- Componentes, versiones y funciones compatibles de Google Distributed Cloud para VMware (solo software).