Solucionar problemas con los contenedores personalizados en Dataflow

En este documento se proporcionan instrucciones para solucionar los problemas que pueden surgir al usar contenedores personalizados con Dataflow. Se centra en los problemas relacionados con los contenedores o los trabajadores que no se inician. Si tus trabajadores pueden iniciar el trabajo y este avanza, sigue las directrices generales para solucionar problemas de tu canalización.

Antes de ponerte en contacto con el equipo de Asistencia, asegúrate de que no haya problemas relacionados con tu imagen de contenedor:

  • Sigue los pasos para probar tu imagen de contenedor de forma local.
  • Busca errores en los registros de tareas o en los registros de trabajadores y compara los errores que encuentres con las directrices sobre errores comunes.
  • Asegúrate de que la versión del SDK de Apache Beam y la versión del lenguaje que usas para iniciar la canalización coincidan con la versión del SDK de tu imagen de contenedor personalizada.
  • Si usas Java, asegúrate de que la versión principal de Java que utilices para iniciar la canalización coincida con la versión instalada en tu imagen de contenedor.
  • Si usas Python, asegúrate de que la versión principal y secundaria de Python que utilices para iniciar la canalización coincida con la versión instalada en la imagen de tu contenedor y de que la imagen no tenga dependencias conflictivas. Puedes ejecutar pip check para confirmarlo.

Buscar registros de trabajadores relacionados con contenedores personalizados

Para encontrar los registros de los trabajadores de Dataflow con mensajes de error relacionados con contenedores, puedes usar el Explorador de registros:

  1. Selecciona los nombres de los registros. Lo más probable es que los errores de inicio de contenedores personalizados se deban a uno de los siguientes motivos:

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Selecciona el recurso Dataflow Step y especifica el job_id.

Si ves mensajes de registro Error Syncing pod..., sigue las instrucciones generales sobre errores. Puedes consultar estos mensajes de registro en los registros de los trabajadores de Dataflow mediante el Explorador de registros con la siguiente consulta:

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

Incidencias frecuentes

A continuación, se indican algunos problemas habituales que se producen al usar contenedores personalizados.

El trabajo tiene errores o ha fallado porque no se puede extraer la imagen del contenedor

Los trabajadores de Dataflow deben poder acceder a imágenes de contenedor personalizadas. Si el trabajador no puede extraer la imagen debido a URLs no válidas, credenciales mal configuradas o falta de acceso a la red, no podrá iniciarse.

En las tareas por lotes en las que no se ha iniciado ningún trabajo y varios trabajadores no pueden iniciarse de forma secuencial, Dataflow falla la tarea. De lo contrario, Dataflow registra los errores, pero no toma ninguna medida para evitar que se destruya el estado de los trabajos de larga duración.

Para obtener información sobre cómo solucionar este problema, consulta la sección La solicitud de extracción de imágenes ha fallado con un error de la página Solucionar errores de Dataflow.

Los trabajadores no se inician o el trabajo no avanza

A veces, si el contenedor del SDK no se inicia debido a un error, Dataflow no puede determinar si el error es permanente o fatal. A continuación, Dataflow intenta reiniciar el trabajador continuamente.

Si no hay errores evidentes, pero ves registros de nivel [topologymanager] RemoveContainer INFO en dataflow.googleapis.com/kubelet, estos registros indican que la imagen del contenedor personalizado se está cerrando antes de tiempo y no ha iniciado el proceso del SDK de trabajador de larga duración.

Si los trabajadores se han iniciado correctamente, pero no se está realizando ningún trabajo, es posible que un error impida que se inicie el contenedor del SDK. En este caso, aparece el siguiente error en las recomendaciones de diagnóstico:

Failed to start container

Además, los registros de los trabajadores no contienen líneas como las siguientes:

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

Busca errores específicos en los registros de los procesos de trabajo y consulta la guía de errores habituales.

Estas son algunas de las causas habituales de estos problemas:

  • Problemas con la instalación de paquetes, como errores de instalación de pip debido a problemas de dependencias. Consulta Error al sincronizar el pod ... no se ha podido "StartContainer".
  • Si el contenedor utilizado no es compatible con la arquitectura de CPU de la VM de trabajador, es posible que aparezcan errores como exec format error. Para obtener más información, consulta Error al sincronizar el pod ... no se ha podido iniciar el contenedor.
  • Errores con los argumentos del comando personalizado o con el ENTRYPOINT definido en el archivo Dockerfile. Por ejemplo, un ENTRYPOINT personalizado no inicia el script de arranque predeterminado /opt/apache/beam/boot o no transfiere los argumentos correctamente a este script. Para obtener más información, consulta Modificar el punto de entrada del contenedor.
  • Errores cuando la versión del SDK de Apache Beam no coincide entre el entorno de lanzamiento y el entorno de ejecución. En un modo de fallo, es posible que los valores predeterminados que se definen en las opciones de la canalización del SDK de Apache Beam no se reconozcan. Por ejemplo, puede que veas errores como sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15') en los registros de los workers. Para solucionar este problema, instala la misma versión del SDK de Apache Beam en la imagen del contenedor que usas para iniciar la canalización. Para obtener más información, consulta Hacer que el entorno de lanzamiento sea compatible con el entorno de tiempo de ejecución.

El contenedor no se puede configurar para que se ejecute como un usuario personalizado

El servicio Dataflow selecciona el usuario para la ejecución del contenedor. Para obtener más información, consulta Entorno de ejecución.