Ir para o conteúdo

Por que minha tarefa do Amazon ECS está presa no estado PENDENTE?

9 minuto de leitura
0

Minha tarefa do Amazon Elastic Container Service (Amazon ECS) está presa no estado PENDENTE.

Breve descrição

Os cenários a seguir fazem com que as tarefas do Amazon ECS fiquem presas no estado PENDENTE:

  • O daemon do Docker não está respondendo.
  • Há uma restrição de recursos no cluster.
  • A imagem do Docker é grande.
  • O agente de contêiner do Amazon ECS perdeu a conectividade com o serviço do Amazon ECS no meio de inicialização de uma tarefa.
  • O agente de contêiner do Amazon ECS está levando muito tempo para interromper uma tarefa.
  • Você não configurou corretamente o roteamento do Amazon Virtual Private Cloud (Amazon VPC).
  • Um contêiner essencial depende de contêineres não essenciais que não estão no estado ÍNTEGRO.
  • O perfil do AWS Identity and Access Management (AWS IAM) que você associou às suas tarefas do Amazon ECS está ausente ou incorreto.
  • Há problemas de compatibilidade de imagem com a versão do Windows que você selecionou.

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

O daemon do Docker não responde ou há uma restrição de recursos no cluster

Na definição da tarefa, verifique se a tarefa está solicitando mais memória ou CPU do que a instância tem capacidade para suportar. Ajuste seus recursos de instância de contêiner de acordo com suas necessidades.

Para problemas de CPU, conclua as seguintes etapas:

  1. Use as métricas do Amazon CloudWatch para verificar se sua instância de contêiner excedeu a cota máxima de CPU.
  2. Aumente o tamanho da sua instância de contêiner conforme necessário.

Para problemas de memória, conclua as seguintes etapas:

  1. Execute o comando gratuito para ver quanta memória está disponível para o seu sistema.
  2. Aumente o tamanho da sua instância de contêiner conforme necessário.

Para problemas de E/S, conclua as seguintes etapas:

  1. Execute o comando iotop.
  2. Identifique as tarefas em cada serviço que usam a maioria das operações de entrada e saída por segundo (IOPS).
  3. Use as restrições e estratégias de posicionamento de tarefas para distribuir as tarefas em instâncias de contêiner distintas.
    -or-
    Use o CloudWatch para criar um alarme para suas métricas do Amazon Elastic Block Store (Amazon EBS) burst balance. Em seguida, use uma função do AWS Lambda ou sua própria lógica personalizada para equilibrar as tarefas.

A imagem do Docker é grande

Imagens maiores demoram mais para serem baixadas e aumentam o tempo em que a tarefa fica no estado PENDENTE.

Para acelerar o tempo de transição, ajuste o parâmetro ECS_IMAGE_PULL_BEHAVIOR para usar o cache de imagens. Por exemplo, defina o parâmetro ECS_IMAGE_PULL_BEHAVIOR como prefer-cached em /etc/ecs/ecs.config. Se você usa prefer-cached, o Amazon ECS extrai remotamente a imagem quando não há imagem em cache. Caso contrário, o Amazon ECS usa a imagem em cache na instância.

O agente de contêiner do Amazon ECS perdeu a conectividade com o serviço Amazon ECS no meio de uma inicialização

Para verificar o status e a conectividade do agente de contêiner do Amazon ECS, execute os seguintes comandos em sua instância de contêiner com base na sua versão do Amazon Linux.

Amazon Linux 1:

sudo status ecs
sudo docker ps -f name=ecs-agent

Amazon Linux 2:

sudo systemctl status ecs
sudo docker ps -f name=ecs-agent

Se o status na saída estiver inativo, o agente será desconectado. Para resolver esse problema, execute os comandos a seguir para reiniciar seu agente de contêiner.

Amazon Linux 1:

sudo stop ecs
sudo start ecs

Amazon Linux 2:

sudo systemctl stop ecs
sudo systemctl start ecs

Você recebe uma saída semelhante à esta mensagem:

ecs start/running, process abcd

Para determinar a conectividade do agente, verifique os seguintes logs durante o período relevante em busca de palavras-chave como erro, aviso ou estado de transição do agente:

  • Veja o log do agente de contêiner do Amazon ECS em /var/log/ecs/ecs-agent.log.yyyy-mm-dd-hh.
  • Veja o log de inicialização do Amazon ECS /var/log/ecs/ecs-init.log.
  • Veja os logs do Docker em /var/log/docker.

Use as informações nos logs para identificar a causa raiz dos problemas de conectividade.

Observação: também é possível usar o coletor de logs do Amazon ECS para coletar logs gerais do sistema operacional (SO), logs do Docker e logs do agente de contêiner do Amazon ECS.

Para obter o status local da tarefa em tempo real na instância de contêiner, execute o seguinte comando para visualizar os metadados das tarefas em execução na sua instância de contêiner:

curl http://localhost:51678/v1/metadata

Você recebe uma saída semelhante à seguinte:

{  "Cluster": "CLUSTER_ID",
  "ContainerInstanceArn": "arn:aws:ecs:REGION:ACCOUNT_ID:container-instance/TASK_ID",
  "Version": "Amazon ECS Agent - AGENT "
}

Na saída, verifique se as variáveis do ambiente da tarefa, a CPU, a memória e a configuração do perfil do IAM estão corretas. Além disso, certifique-se de que a tarefa tenha os segredos necessários.

Para ver informações detalhadas sobre todas as tarefas em execução no serviço, execute o seguinte comando:

curl http://localhost:51678/v1/tasks

Você recebe uma saída semelhante à seguinte:

{  "Tasks": [
    {
      "Arn": "arn:aws:ecs:REGION:ACCOUNT_ID:task/TASK_ID",
      "DesiredStatus": "RUNNING",
      "KnownStatus": "RUNNING",
      ... ...
    }
  ]
}

Nas saídas de comando anteriores, verifique se há diferenças entre o agente local e o serviço do Amazon ECS. Use essas informações para identificar onde e por que a tarefa está travada.

O agente de contêiner do Amazon ECS leva muito tempo para interromper uma tarefa existente

Quando o Amazon ECS envia novas tarefas para começar do estado PENDENTE para o estado EM EXECUÇÃO, o agente do contêiner pode ter que interromper as tarefas atuais. Nesse caso, o agente não inicia as novas tarefas até interromper primeiro as tarefas atuais.

Para controlar o tempo limite de parada e início de contêiner no nível da instância de contêiner, ajuste as variáveis de ambiente para as variáveis ECS_CONTAINER_STOP_TIMEOUT e ECS_CONTAINER_START_TIMEOUT em /etc/ecs/ecs.config. O ECS_CONTAINER_STOP_TIMEOUT define a quantidade de tempo que passa antes que o Amazon ECS encerre forçosamente os contêineres se eles não saírem por conta própria. O valor padrão do tempo limite de parada para Linux e Windows é de 30 segundos. O ECS_CONTAINER_START_TIMEOUT define a quantidade de tempo que passa antes que o agente de contêiner do Amazon ECS não tente mais iniciar o contêiner. O valor padrão do tempo limite de início é de 3 minutos para Linux e 8 minutos para Windows.

Se a versão do seu agente for 1.26.0 ou posterior, é possível definir os parâmetros de tempo limite de interrupção e início em cada tarefa. Observe que quando você altera o parâmetro, a tarefa pode mudar para o estado PARADA. Por exemplo, a instância de contêiner A depende da instância de contêiner B para alcançar o estado CONCLUÍDO, SUCEDIDO ou ÍNTEGRO. Você não especificou um valor de startTimeout para a instância de contêiner B. Se a instância de contêiner B não atingir o estado exigido dentro do tempo limite, a instância de contêiner A não será iniciada.

Para ver um exemplo de dependência de contêiner, consulte Exemplo: dependência de contêiner no site do GitHub.

Você não configurou corretamente o roteamento do Amazon VPC

Verifique a configuração da sub-rede da VPC na qual suas tarefas do Amazon ECS ou AWS Fargate são executadas. Sua sub-rede deve ter acesso ao Amazon ECS ou ao Amazon Elastic Container Registry (Amazon ECR). Para resolver esses problemas de configuração, certifique-se de que a tabela de rotas da sua sub-rede tenha um gateway da Internet ou um gateway NAT. Se você iniciar uma tarefa em uma sub-rede que não tem uma rota de saída para a Internet, use o AWS PrivateLink. Essa configuração permite que você acesse as APIs do Amazon ECS com endereços IP privados.

Além disso, certifique-se de que as regras do grupo de segurança permitam a comunicação de entrada e saída pelas portas necessárias da sua configuração.

Uma instância de contêiner essencial depende de instâncias de contêiner não essenciais que não estão no estado ÍNTEGRO

Se uma instância de contêiner não essencial da qual depende uma instância de contêiner essencial não estiver em um estado ÍNTEGRO, sua tarefa ficará presa em PENDENTE. Você recebe a mensagem “stoppedReason":"Service ABCXYZ: task last status remained in PENDING too long”.

Para resolver esse problema, certifique-se de que suas instâncias de contêiner não essenciais funcionem conforme o esperado. Se não for possível resolver o problema subjacente, atualize a definição da tarefa para as instâncias de contêiner e defina o parâmetro essencial como verdadeiro. Se a tarefa ainda estiver interrompida, verifique o motivo da interrupção. Para obter mais etapas de solução de problemas, consulte Por que minha tarefa do Amazon ECS foi interrompida?

O perfil do IAM está ausente ou configurado incorretamente

Se a tarefa estiver em uma instância de contêiner que não tem as permissões necessárias, você receberá um erro semelhante ao exemplo a seguir:

“(service test) failed to launch a task with (error ECS was unable to assume the role 'arn:aws:iam::111111111111:role/test-fTa-T3J4hVnyL53E' that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.)”

Para resolver esse problema, verifique se a instância de contêiner tem as permissões necessárias.

Além disso, se você não usa uma imagem de máquina da Amazon (AMI) otimizada para Amazon ECS para suas instâncias de contêiner, verifique as configurações do agente do Amazon ECS.

Há problemas de compatibilidade de imagem com a versão do Windows que você selecionou

As tarefas apresentam falha quando a imagem que você usa nas tarefas do Windows Fargate não é compatível com sua plataforma. Para verificar se sua imagem é compatível com o host do servidor Windows, consulte Compatibilidade da versão do contêiner do Windows no site da Microsoft. Em seguida, verifique os pré-requisitos para executar as tarefas do Windows.

Além disso, verifique se o URL da imagem que você definiu está correto.

Informações relacionadas

Dependência de contêineres

amazon-ecs-agent no site do GitHub

AWS OFICIALAtualizada há 9 meses