Como resolvo o erro "DockerTimeoutError" no AWS Batch?

6 minuto de leitura
0

Os trabalhos em meu ambiente de computação do AWS Batch estão falhando e retornam o seguinte erro: "DockerTimeoutError: Não foi possível fazer a transição para criado; atingiu o tempo limite após esperar 4m0s." Como soluciono os erros "DockerTimeoutError" no AWS Batch?

Breve descrição

Se as chamadas de API docker start e docker create demoram mais de quatro minutos o AWS Batch retorna um erro DockerTimeoutError.

Observação: O limite de tempo limite padrão definido pelo agente de contêiner do Amazon Elastic Container Service (Amazon ECS) é de quatro minutos.

O erro pode ocorrer por vários motivos, mas geralmente é causado por:

  • Os volumes de instâncias do ECS do ambiente computacional do AWS Batch estão sob alta pressão de E/S de todas as outras tarefas em sua fila. Esses trabalhos, que são criados e executados na instância do ECS, podem esgotar o equilíbrio de intermitência. Para resolver esse problema, siga as etapas na seção Resolver qualquer problema de equilíbrio de intermitência deste artigo.
  • Os contêineres do ECS interrompidos não estão sendo limpos com rapidez suficiente para liberar o daemon do Docker. É possível ter problemas com o Docker ao usar uma imagem de máquina da Amazon (AMI) personalizada em vez da AMI padrão fornecida pelo AWS Batch. A AMI padrão para o AWS Batch otimiza as configurações de limpeza do Amazon ECS. Para resolver esse problema, siga as etapas na seção Resolver qualquer problema do Docker deste artigo.

Se nenhum desses problemas estiver causando o erro, uma outra solução de problemas pode ser:

  • Verificar seus registros do Docker para identificar a origem do erro.
  • Executar o script do coletor de log do Amazon ECS nas instâncias do ECS no cluster ECS associado ao seu ambiente de computação AWS Batch.

Resolução

Resolva qualquer problema de equilíbrio de intermitência

Verifique o equilíbrio de intermitência da sua instância do ECS

1.    Abra o console do Amazon ECS.

2.    No painel de navegação, escolha Clusters. Em seguida, escolha o cluster que contém seu trabalho.

Observação: O nome do cluster começa com o nome do ambiente computacional, seguido por _Batch_ e um hash aleatório de números e letras.

3.    Escolha a guia de instâncias do ECS.

4.    Na coluna instância do EC2, escolha sua instância.

Observação: Para encontrar o ID da instância do trabalho que falhou, execute o comando describe-jobs do AWS Batch. O ID da instância aparece na saída de containerInstanceArn.

5.    Na guia Descrições no console do Amazon EC2, em Dispositivo de blocos, escolha o link para seu volume.

6.    Na janela pop-up do dispositivo de blocos, para ID de EBS, escolha seu volume.

7.    Selecione a guia Monitoramento. Em seguida, escolha Equilíbrio de intermitência para verificar suas métricas de equilíbrio de intermitência. Se o equilíbrio de intermitência cair para 0, então ele está esgotado.

Crie um modelo de execução para seu ambiente de computação gerenciada

Observação: Se você alterar o modelo de execução, deverá criar um novo ambiente computacional.

1.    Abra o console do Amazon EC2 e escolha Modelos de execução.

2.    Escolha Criar modelo de execução.

3.    Para ID de AMI, selecione a AMI otimizada padrão do Amazon ECS.

4.    Na seção Armazenamento (Volumes), escolha um tipo de volume na coluna Tipo de volume. Em seguida, insira um valor inteiro na coluna Tamanho (GiB).

Observação: Se você escolher SSD de IOPS provisionadas (io1) para seu tipo de volume, insira um valor inteiro permitido para IOPS.

5.    Escolha Criar modelo de execução.

6.    Use seu novo modelo de execução para criar um novo ambiente computacional gerenciado.

**Crie um ambiente computacional do AWS Batch com sua AMI **

Observação: Se você alterar a AMI, deverá criar um novo ambiente computacional porque o parâmetro de ID de AMI não pode ser atualizado.

1.    Abra o console do Amazon EC2.

2.    Escolha Executar instâncias.

3.    Siga as etapas no assistente de configuração para criar sua instância.

**Importante:**Na página Adicionar armazenamento, modifique o tipo ou o tamanho do volume da sua instância. Quanto maior o tamanho do volume, maior é o desempenho da linha de base e mais lentamente reabastece o equilíbrio de intermitência. Para obter melhor performance para altas cargas de E/S, altere o volume para o tipo io1.

4.    Crie uma AMI de recursos computacionais a partir da sua instância.

5.    Crie um ambiente computacional para o AWS Batch que inclua sua ID de AMI.

Resolva qualquer problema do Docker

Por padrão, o agente de contêiner do Amazon ECS limpa automaticamente as tarefas interrompidas e as imagens do Docker que suas instâncias de contêiner não estão usando. Se executar novos trabalhos com novas imagens, o armazenamento do contêiner poderá ficar cheio de imagens do Docker que não estão sendo usadas.

1.    Use o SSH para se conectar à instância de contêiner do seu ambiente de computação do AWS Batch.

2.    Para inspecionar o agente de contêiner do Amazon ECS, execute o comando Docker inspecionar ecs-agent. Em seguida, revise a seção env na saída.

**Observação:**É possível reduzir os valores das seguintes variáveis para acelerar a limpeza de tarefas e imagens:

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

Você também pode usar parâmetros ajustáveis para a limpeza automatizada de tarefas e imagens.

3.    Crie uma nova AMI com valores atualizados.

-ou-

Crie um modelo de lançamento com os dados do usuário que inclua suas novas variáveis de ambiente.

**Criar uma nova AMI com valores atualizados **

1.    Defina os parâmetros de configuração do agente no arquivo /etc/ecs/ecs.config.

2.    Reinicie seu agente de contêiner.

3.    Crie uma AMI de recursos computacionais a partir da sua instância.

4.    Crie um ambiente computacional para o AWS Batch que inclua sua ID de AMI.

**Criar um modelo de lançamento com os dados do usuário que inclua suas novas variáveis de ambiente **

1.    Crie um modelo de lançamento com dados do usuário.

Por exemplo, os dados do usuário no seguinte arquivo de várias partes MIME substituem as configurações padrão de limpeza de imagem do Docker para um recurso computacional:

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==--

2.    Use seu novo modelo de execução para criar um ambiente computacional gerenciado.


Informações relacionadas

Serviços da AWS que publicam métricas do CloudWatch

AMIs de recursos computacionais

amazon-ecs-agent (AWS GitHub)

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos