Solución de problemas

En esta página se incluyen pasos para solucionar algunos problemas y errores habituales.

Instancia con el estado FAILED

El estado FAILED significa que se han perdido los datos de la instancia y que esta se debe eliminar.

Las instancias de ParallelStore en estado FAILED se siguen facturando hasta que se eliminan.

Para obtener el estado de una instancia, sigue las instrucciones que se indican en Gestionar instancias: obtener una instancia.

Para eliminar una instancia, consulta Gestionar instancias: eliminar una instancia.

Se agotan los tiempos de espera durante el montaje de dfuse o las pruebas de red

Si, al montar tu instancia de Parallelstore, se agota el tiempo de espera del comando dfuse -m o si se agota el tiempo de espera de comandos de prueba de red como self_test o daos health net-test, puede deberse a un problema de conectividad de red.

Para verificar la conectividad con los servidores de Parallelstore, ejecuta

self_test --use-daos-agent-env -r 1

Si la prueba informa de un problema de conexión, puede deberse a dos motivos:

Es posible que el agente de DAOS haya seleccionado la interfaz de red incorrecta durante la configuración

Puede que tengas que excluir las interfaces de red que no puedan acceder a las IPs de la lista access_points.

  1. Ejecuta ifconfig para ver una lista de las interfaces de red disponibles. En un ejemplo de salida se pueden mostrar varias interfaces de red, como eth0, docker0, ens8, lo, etc.

  2. Detén el agente daos_agent.

  3. Edita /etc/daos/daos_agent.yml para excluir las interfaces de red que no quieras. Quita el comentario de la línea exclude_fabric_ifaces y actualiza los valores. Las entradas que incluyas deben ser específicas para tu situación. Por ejemplo:

    exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
    
  4. Reinicia el daos_agent.

La dirección IP de la instancia o del cliente está en conflicto con las direcciones IP internas

Las instancias y los clientes de Parallelstore no pueden usar una dirección IP del intervalo de subred 172.17.0.0/16. Consulta Problemas conocidos para obtener más información.

ENOSPC cuando haya capacidad sin usar en la instancia

Si tu instancia usa el mínimo o el balanceo predeterminado, es posible que se produzcan errores ENOSPC aunque los archivos no utilicen toda la capacidad de la instancia. Esto suele ocurrir al escribir archivos grandes que generalmente superan los 8 GiB o al importar este tipo de archivos desde Cloud Storage.

Usa la franjas de archivos máximas para reducir la probabilidad de que se produzcan estos errores.

Solución de problemas de Google Kubernetes Engine

En la siguiente sección se indican algunos problemas habituales y los pasos para resolverlos.

Transport endpoint is not connected en los pods de carga de trabajo

Este error se debe a la finalización de dfuse. En la mayoría de los casos, dfuse se ha terminado por falta de memoria. Usa las anotaciones de Pod gke-parallelstore/[cpu-limit|memory-limit] para asignar más recursos al contenedor sidecar de Parallelstore. Puedes definir gke-parallelstore/memory-limit: "0" para quitar la limitación de memoria del sidecar si no sabes cuánta memoria quieres asignarle. Ten en cuenta que esto solo funciona con clústeres estándar. En los clústeres de Autopilot, no puedes usar el valor 0 para anular los límites y las solicitudes de recursos del contenedor sidecar. Debes definir explícitamente un límite de recursos mayor para el contenedor sidecar.

Una vez que hayas modificado las anotaciones, debes reiniciar el pod de la carga de trabajo. Añadir anotaciones a una carga de trabajo en ejecución no modifica de forma dinámica la asignación de recursos.

Advertencias de eventos de Pod

Si los pods de tu carga de trabajo no se pueden iniciar, comprueba los eventos de los pods:

kubectl describe pod POD_NAME -n NAMESPACE

Las siguientes soluciones son para errores habituales.

Problemas para habilitar controladores de CSI

Estos son algunos de los errores habituales al habilitar controladores CSI:

MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers

Estas advertencias indican que el controlador CSI no está habilitado o no se está ejecutando.

Si tu clúster se ha escalado, actualizado o mejorado recientemente, esta advertencia es normal y debería ser temporal. Los pods del controlador CSI tardan unos minutos en funcionar después de las operaciones del clúster.

De lo contrario, confirma que el controlador CSI está habilitado en tu clúster. Consulta Habilitar el controlador CSI para obtener más información. Si el CSI está habilitado, cada nodo muestra un pod llamado parallelstore-csi-node-id en funcionamiento.

AttachVolume.Attach failures

Una vez que el pod se haya programado en un nodo, el volumen se conectará al nodo y se creará el pod de montaje si se usa el montaje de nodos.

Esto ocurre en el controlador e implica el paso AttachVolume de attachdetach-controller.

Código de error Alerta de evento de pod Solución
InvalidArgument
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = InvalidArgument desc = an error occurred while preparing mount options: invalid mount options
Se han pasado marcas de montaje no válidas a PersistentVolume o StorageClass. Consulta las opciones de montaje de dfuse compatibles para obtener más información.
NotFound
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = NotFound desc = failed to get instance "instance"
La instancia de Parallelstore no existe. Verifica que el volumenHandle de PersistentVolume tenga el formato correcto.

Errores de MountVolume.MountDevice

Una vez que el volumen se haya adjuntado a un nodo, se pondrá en staging en el nodo.

Esto ocurre en el nodo e implica el paso MountVolume.MountDevice de kubelet.

Código de error Alerta de evento de pod Solución
FailedPrecondition
  • MountVolume.MountDevice failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod "pod" expected to exist but was not found
Este error suele deberse a que el pod de montaje se ha eliminado manualmente. Elimina todas las cargas de trabajo que consuman el PVC y vuelve a implementarlas. Se creará un nuevo pod de montaje.
DeadlineExceeded
  • MountVolume.MountDevice failed for volume "volume": rpc error: code = DeadlineExceeded desc = context deadline exceeded
No se puede conectar a la instancia de ParallelStore. Verifica que tu red VPC y tus puntos de acceso estén configurados correctamente.

Errores de MountVolume.SetUp

Una vez que el volumen se haya almacenado en el nodo, se montará y se proporcionará al contenedor del pod. Esto ocurre en el nodo e implica el paso MountVolume.SetUp en kubelet.

Montaje de pod

Código de error Alerta de evento de pod Solución
ResourceExhausted
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container failed with error: signal: killed
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container terminated due to OOMKilled, exit code: 137
El proceso dfuse ha finalizado, lo que suele deberse a una condición de falta de memoria (OOM). Te recomendamos que aumentes el límite de memoria del contenedor sidecar mediante la anotación gke-parallelstore/memory-limit.

Si no sabes cuánta memoria quieres asignar al sidecar de parallelstore, te recomendamos que definas gke-parallelstore/memory-limit: "0" para eliminar la restricción de memoria impuesta por Parallelstore.

Anulada
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
Se ha cancelado la operación de montaje de volumen debido a la limitación de la frecuencia o a operaciones existentes. Esta advertencia es normal y debería ser temporal.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Si has proporcionado argumentos no válidos en StorageClass o PersistentVolume, el registro de errores indica los campos con los argumentos no válidos. Para el aprovisionamiento dinámico, consulta la clase de almacenamiento. En el caso del aprovisionamiento estático, consulta Volumen persistente.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = can not find the sidecar container in Pod spec No se ha insertado el contenedor sidecar Parallelstore. Comprueba que la anotación gke-parallelstore/volumes: "true" Pod se haya definido correctamente.

Soporte de nodo

Código de error Alerta de evento de pod Solución
Anulada
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
Se ha cancelado la operación de montaje de volumen debido a un límite de frecuencia o a operaciones en curso. Esta advertencia es normal y debería ser temporal.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = Si has proporcionado argumentos no válidos en StorageClass o en el volumen persistente, el registro de errores indicará los campos con los argumentos no válidos. Para el aprovisionamiento dinámico, consulta la clase de almacenamiento. En el caso del aprovisionamiento estático, consulta Volumen persistente.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod expected to exist but was not found El pod de montaje de Parallelstore no existe. Si el pod de montaje se ha eliminado por error, vuelve a crear todas las cargas de trabajo para que se vuelvan a crear.
DeadlineExceeded MountVolume.SetUp failed for volume "volume" : rpc error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available El servidor gRPC del pod de montaje no se ha iniciado. Comprueba si hay errores en los registros del pod de montaje.

Solucionar problemas de redes de VPC

Permiso denegado para añadir el peering del servicio servicenetworking.googleapis.com

ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have 
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.

Este error significa que no tienes el permiso de servicenetworking.services.addPeering IAM en tu cuenta de usuario.

Consulta Control de acceso con IAM para obtener instrucciones sobre cómo añadir uno de los siguientes roles a tu cuenta:

  • roles/compute.networkAdmin o
  • roles/servicenetworking.networksAdmin

No se pueden modificar los intervalos asignados en CreateConnection

ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.

Este error se devuelve cuando ya has creado un emparejamiento de VPC en esta red con intervalos de IP diferentes. Hay dos soluciones posibles:

Reemplaza los intervalos de IP actuales:

gcloud services vpc-peerings update \
  --network=NETWORK_NAME \
  --ranges=IP_RANGE_NAME \
  --service=servicenetworking.googleapis.com \
  --force

También puedes añadir el nuevo intervalo de IPs a la conexión actual:

  1. Recupera la lista de intervalos de IP del peering:

    EXISTING_RANGES=$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())"
    )
    
  2. A continuación, añade el nuevo intervalo al peering:

    gcloud services vpc-peerings update \
      --network=NETWORK_NAME \
      --ranges=$EXISTING_RANGES,IP_RANGE_NAME \
      --service=servicenetworking.googleapis.com
    

Intervalo de direcciones IP agotado

Es posible que no se pueda crear la instancia y se muestre el siguiente error de agotamiento del intervalo:

ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted

Si aparece este mensaje de error, sigue la guía de VPC para volver a crear el intervalo de direcciones IP o ampliar el que ya tienes.

Si vas a volver a crear una instancia de Parallelstore, debes volver a crear el intervalo de IPs en lugar de ampliarlo.

Mantenimiento bloqueado debido a un presupuesto de interrupciones de pods restrictivo

La consola Google Cloud puede mostrar el siguiente mensaje de error, que indica que no se puede continuar con el mantenimiento porque se ha configurado un presupuesto de interrupción de pods (PDB) para permitir cero desalojos de pods:

GKE can't perform maintenance because the Pod Disruption Budget allows for 0 Pods evictions.

Si aparece este mensaje de error, identifica el pod que da problemas siguiendo estos pasos:

  1. Haga clic en el mensaje de error para abrir el panel de información detallada sobre el error.

  2. Consulta la sección Unpermissive Pod Disruption Budgets (Presupuestos de interrupción de pods no permisivos) para ver el nombre del pod.

  3. Si el Pod está parallelstorecsi-mount, puedes ignorar este error, ya que no impedirá el mantenimiento. En el caso de otros pods, examina tu PDB.