¿Cómo soluciono el error «DockerTimeoutError» en AWS Batch?

6 minutos de lectura
0

Los trabajos de mi entorno de computación de AWS Batch fallan y devuelven el siguiente error: «DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s.» ¿Cómo soluciono los errores «DockerTimeoutError» en AWS Batch?

Descripción breve

Si las llamadas a la API docker start y docker create tardan más de cuatro minutos, AWS Batch devolverá un error DockerTimeoutError.

Nota: El límite de tiempo de espera predeterminado establecido por el agente de contenedores de Amazon Elastic Container Service (Amazon ECS) es de cuatro minutos.

El error puede producirse por varios motivos, pero normalmente se debe a una de las siguientes causas:

  • Los volúmenes de instancias de ECS del entorno de computación de AWS Batch están sometidos a una gran presión de E/S de los demás trabajos de la cola. Estos trabajos, que se crean y se ejecutan en la instancia de ECS, pueden agotar el saldo de ráfagas. Para resolver este problema, siga los pasos de la sección Solución de cualquier problema de saldo de ráfagas de este artículo.
  • Los contenedores de ECS detenidos no se limpian lo suficientemente rápido como para liberar el daemon de Docker. Puede tener problemas con Docker si utiliza una imagen de máquina de Amazon (AMI) personalizada en lugar de la AMI predeterminada que proporciona AWS Batch. La AMI predeterminada de AWS Batch optimiza la configuración de limpieza de Amazon ECS. Para resolver este problema, siga los pasos de la sección Solución de cualquier problema de Docker de este artículo.

Si ninguno de estos problemas está causando el error, puede seguir buscando una solución de la siguiente manera:

Resolución

Solución de cualquier problema de saldo de ráfagas

Comprobación del saldo de ráfagas de su instancia de ECS

  1. Abra la consola de Amazon ECS.

  2. En el panel de navegación, seleccione Clústeres. A continuación, elija el clúster que contiene su trabajo.

Nota: El nombre del clúster comienza con el nombre del entorno de procesamiento, seguido de _Batch_ y un hash aleatorio de números y letras.

  1. Elija la pestaña Instancias de ECS.

  2. En la columna Instancia de EC2, elija su instancia.

Nota: Para encontrar el identificador de instancia del trabajo con errores, ejecute el comando describe-jobs de AWS Batch. El identificador de instancia aparece en la salida de containerInstanceArn.

  1. En la pestaña Descripciones de la consola de Amazon EC2, en Dispositivos de bloques, elija el enlace del volumen.

  2. En la ventana emergente de dispositivo de bloques, en ID de EBS, seleccione el volumen.

  3. Seleccione la pestaña Supervisión. A continuación, seleccione Saldo de ráfagas para comprobar sus métricas de saldo de ráfagas. Si su saldo de ráfagas cae a 0, su saldo de ráfagas se agotará.

Creación de una plantilla de lanzamiento para su entorno de computación administrado

Nota: Si cambia la plantilla de lanzamiento, debe crear un nuevo entorno de computación.

  1. Abra la consola de Amazon EC2 y, a continuación, seleccione Plantillas de lanzamiento.

  2. Elija Crear plantilla de lanzamiento.

  3. Para ID de AMI, seleccione la AMI optimizada para Amazon ECS predeterminada.

  4. En la sección Almacenamiento (volúmenes), elija un tipo de volumen en la columna Tipo de volumen. A continuación, introduzca un valor entero en la columna Tamaño (GiB).

Nota: Si elige Provisioned IOPS SSD (io1) como tipo de volumen, introduzca un valor entero que esté permitido para las IOPS.

  1. Elija Crear plantilla de lanzamiento.

  2. Use su nueva plantilla de lanzamiento para crear un nuevo entorno de computación administrado.

Creación de un entorno de computación de AWS Batch con su AMI

Nota: Si cambia la AMI, debe crear un nuevo entorno de computación porque el parámetro ID de AMI no se puede actualizar.

  1. Abra la consola de Amazon EC2.

  2. Seleccione Lanzar instancia.

  3. Siga los pasos del asistente de configuración para crear su instancia.

Importante: En la página Agregar almacenamiento, modifique el tipo de volumen o el tamaño de su instancia. Cuanto mayor sea el tamaño del volumen, mayor será el rendimiento de referencia y más lento se repondrá el saldo de ráfagas. Para obtener un mejor rendimiento con cargas de E/S elevadas, cambie el volumen al tipo io1.

  1. Cree una AMI de recursos de computación a partir de su instancia.

  2. Cree un entorno de computación para AWS Batch que incluya su ID de AMI.

Solución de cualquier problema de Docker

De forma predeterminada, el agente de contenedores de Amazon ECS limpia automáticamente las tareas detenidas y las imágenes de Docker que las instancias de contenedor no utilizan. Si ejecuta nuevos trabajos con imágenes nuevas, es posible que el almacenamiento de su contenedor se llene con imágenes de Docker que no está utilizando.

  1. Utilice SSH para conectarse a la instancia de contenedor de su entorno de computación de AWS Batch.

  2. Para inspeccionar el agente de contenedor de Amazon ECS, ejecute el comando inspect ecs-agent de Docker. A continuación, revise la sección env de la salida.

Nota: Puede reducir los valores de las siguientes variables para acelerar la limpieza de tareas e imágenes:

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

También puede utilizar parámetros ajustables para la limpieza automática de tareas e imágenes.

  1. Cree una AMI nueva con valores actualizados.

-o-

Cree una plantilla de lanzamiento con los datos del usuario que incluya las nuevas variables de entorno.

Creación de una AMI nueva con valores actualizados

  1. Defina los parámetros de configuración del agente en el archivo /etc/ecs/ecs.config.

  2. Reinicie su agente de contenedores.

3.Cree una AMI de recursos de computación a partir de su instancia.

  1. Cree un entorno de computación para AWS Batch que incluya su ID de AMI.

Creación de una plantilla de lanzamiento con los datos del usuario que incluya las nuevas variables de entorno

  1. Cree una plantilla de lanzamiento con los datos de usuario.

Por ejemplo, los datos de usuario del siguiente archivo MIME de varias partes anulan la configuración predeterminada de limpieza de imágenes de Docker para un recurso de computación:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==MYBOUNDARY==--
  1. Use su nueva plantilla de lanzamiento para crear un entorno de computación administrado.

Información relacionada

Servicios de AWS que publican métricas de CloudWatch

AMI de recursos de computación

amazon-ecs-agent (GitHub de AWS)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años