Perché la mia attività Amazon ECS è bloccata nello stato IN SOSPESO?

8 minuti di lettura
0

La mia attività Amazon Elastic Container Service (Amazon ECS) è bloccata nello stato IN SOSPESO.

Breve descrizione

Il blocco di un'attività Amazon ECS nello stato IN SOSPESO è causato dai seguenti scenari:

  • Il daemon Docker non risponde.
  • C'è un vincolo di risorse nel cluster.
  • L'immagine Docker è grande.
  • L'agente container Amazon ECS ha perso la connettività con il servizio Amazon ECS durante l'avvio di un'attività.
  • L'agente container Amazon ECS sta impiegando molto tempo per interrompere un'attività esistente.
  • Non hai configurato correttamente il routing di Amazon Virtual Private Cloud (Amazon VPC).
  • Un container essenziale dipende da container non essenziali che non sono nello stato INTEGRO.
  • Il ruolo AWS Identity and Access Management (AWS IAM) associato alle attività di Amazon ECS è mancante o errato.
  • Esistono problemi di compatibilità delle immagini con la versione di Windows selezionata.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Il daemon Docker non risponde o c'è un vincolo di risorse nel cluster

Nella definizione dell'attività, controlla se l'attività richiede più memoria o CPU di quella che l'istanza è in grado di supportare. Adatta le risorse dell'istanza di container in base alle esigenze.

Per problemi relativi alla CPU, completa i seguenti passaggi:

  1. Utilizza le metriche di Amazon CloudWatch per verificare se l'istanza di container ha superato la quota massima di CPU.
  2. Aumenta le dimensioni dell'istanza di container in base alle esigenze.

Per problemi di memoria, completa i seguenti passaggi:

  1. Esegui il comando free per vedere quanta memoria è disponibile nel sistema.
  2. Aumenta le dimensioni dell'istanza di container in base alle esigenze.

Per problemi di I/O, completa i seguenti passaggi:

  1. Esegui il comando iotop.
  2. Identifica le attività in ogni servizio che utilizzano il maggior numero di operazioni di input/output al secondo (IOPS).
  3. Quindi utilizza i vincoli e le strategie di posizionamento delle attività per distribuire le attività su diverse istanze di container.
    -oppure-
    Utilizza CloudWatch per creare un allarme per le metriche burst balance di Amazon Elastic Block Store (Amazon EBS). Quindi utilizza una funzione AWS Lambda o una logica personalizzata per bilanciare le attività.

L'immagine Docker è grande

Le immagini più grandi richiedono più tempo per il download e aumentano la quantità di tempo in cui l'attività rimane IN SOSPESO.

Per accelerare il tempo di transizione, regola il parametro ECS_IMAGE_PULL_BEHAVIOR per utilizzare la memorizzazione nella cache delle immagini. Ad esempio, imposta il parametro ECS_IMAGE_PULL_BEHAVIOR su prefer-cached in /etc/ecs/ecs.config. Se utilizzi prefer-cached, Amazon ECS estrae l'immagine in remoto quando non è presente alcuna immagine memorizzata nella cache. Altrimenti, Amazon ECS utilizza sull'istanza l'immagine memorizzata nella cache.

L'agente container Amazon ECS ha perso la connettività con il servizio Amazon ECS durante un avvio

Per verificare lo stato e la connettività dell'agente container Amazon ECS, esegui questi comandi sull'istanza di container in base alla versione di Amazon Linux in uso.

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 lo stato dell'output è inattivo, l'agente viene disconnesso. Per risolvere il problema, esegui questi comandi per riavviare l'agente container.

Amazon Linux 1:

sudo stop ecs
sudo start ecs

Amazon Linux 2:

sudo systemctl stop ecs
sudo systemctl start ecs

Riceverai un output simile al seguente messaggio:

ecs start/running, process abcd

Per determinare la connettività dell'agente, controlla i seguenti log durante l'intervallo di tempo pertinente per parole chiave come errore, avviso o stato di transizione dell'agente:

  • Visualizza il log dell'agente container Amazon ECS all'indirizzo /var/log/ecs/ecs-agent.log.yyy-mm-dd-hh.
  • Visualizza il log di avvio di Amazon ECS all'indirizzo /var/log/ecs/ecs-init.log.
  • Visualizza i log Docker su /var/log/docker.

Utilizza le informazioni nei log per identificare la causa principale dei problemi di connettività.

Nota: puoi anche utilizzare Amazon ECS logs collector per raccogliere log generali del sistema operativo, log Docker e log degli agenti container per Amazon ECS.

Per visualizzare lo stato delle attività locali in tempo reale nell'istanza di container, visualizza i metadati delle attività in esecuzione nell'istanza di container con il seguente comando:

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

Ricevi un output simile all'esempio seguente:

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

Nell'output assicurati che le variabili di ambiente dell'attività, la CPU, la memoria e la configurazione del ruolo IAM siano corrette. Inoltre, assicurati che l'attività contenga i segreti richiesti.

Per visualizzare informazioni dettagliate su tutte le attività in esecuzione nel servizio, esegui questo comando:

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

Ricevi un output simile all'esempio seguente:

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

Nei precedenti output dei comandi, controlla se ci sono differenze tra l'agente locale e il servizio Amazon ECS. Utilizza queste informazioni per identificare dove e perché l'attività è bloccata.

L'agente container Amazon ECS sta impiegando molto tempo per interrompere un'attività esistente

Quando Amazon ECS invia nuove attività da avviare dallo stato IN SOSPESO allo stato IN ESECUZIONE, l'agente container potrebbe avere attività esistenti da interrompere. In questo caso, l'agente non avvia le nuove attività finché non interrompe prima le attività esistenti.

Per controllare il timeout di arresto e avvio del container a livello di istanza di container, regola le variabili di ambiente per le variabili ECS_CONTAINER_STOP_TIMEOUT e ECS_CONTAINER_START_TIMEOUT in /etc/ecs/ecs.config. ECS_CONTAINER_STOP_TIMEOUT imposta l'intervallo di tempo che trascorre prima che Amazon ECS termini forzatamente i container se non escono da soli. Il valore del timeout di arresto predefinito per Linux e Windows è 30 secondi. ECS_CONTAINER_START_TIMEOUT imposta l'intervallo di tempo che trascorre prima che l'agente container Amazon ECS non tenti più di avviare il container. Il valore del timeout di avvio predefinito è 3 minuti per Linux e 8 minuti per Windows.

Se la versione dell'agente è 1.26.0 o successiva, puoi definire i parametri per il timeout di arresto e di avvio in ogni attività. Ricorda che quando modifichi il parametro, l'attività potrebbe passare allo stato INTERROTTO. Ad esempio, l'istanza di container A ha una dipendenza affinché l'istanza di container B raggiunga lo stato COMPLETO, ESITO POSITIVO o INTEGRO. Non hai specificato un valore startTimeout per l'istanza di container B. Se l'istanza di container B non raggiunge lo stato richiesto entro il timeout, l'istanza di container A non viene avviata.

Per un esempio di dipendenza tra container, consulta Esempio: Container dependency (Dipendenza tra container) sul sito web GitHub.

Non hai configurato correttamente il routing di Amazon VPC

Verifica la configurazione della sottorete VPC in cui vengono eseguite le attività Amazon ECS o AWS Fargate. La sottorete deve avere accesso ad Amazon ECS o ad Amazon Elastic Container Registry (Amazon ECR). Per risolvere i problemi di configurazione, assicurati che la tabella di routing per la sottorete disponga di un gateway Internet o di un gateway NAT. Se avvii un'attività in una sottorete che non dispone di un routing in uscita verso Internet, utilizza AWS PrivateLink. Questa configurazione consente di accedere alle API Amazon ECS con indirizzi IP privati.

Inoltre, assicurati che le regole del gruppo di sicurezza consentano la comunicazione in entrata e in uscita sulle porte richieste dalla configurazione.

Un'istanza di container essenziale dipende da istanze di container non essenziali che non sono nello stato INTEGRO

Se un'istanza di container non essenziale da cui dipende un'istanza di container essenziale non si trova in uno stato INTEGRO, l'attività rimane bloccata nello stato IN SOSPESO. Viene visualizzato il messaggio "stoppedReason":"Service ABCXYZ: task last status remained in PENDING too long".

Per risolvere il problema, assicurati che le istanze di container non essenziali funzionino come previsto. Se non riesci a risolvere il problema sottostante, aggiorna la definizione dell'attività per le istanze di container e imposta il parametro essential su true. Se l'attività è ancora interrotta, controlla il motivo dell'arresto. Per ulteriori passaggi per la risoluzione dei problemi, consulta Perché la mia attività Amazon ECS viene interrotta?

Il ruolo IAM è mancante o non è configurato correttamente

Se l'attività si trova in un'istanza di container che non dispone delle autorizzazioni richieste, ricevi un errore simile all'esempio seguente:

"(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.)"

Per risolvere il problema, assicurati che l'istanza di container disponga delle autorizzazioni richieste.

Inoltre, se non utilizzi un'immagine Amazon Machine Image (AMI) ottimizzata per Amazon ECS per le istanze di container, controlla le configurazioni degli agenti Amazon ECS.

Esistono problemi di compatibilità delle immagini con la versione di Windows selezionata

Le attività hanno esito negativo quando l'immagine utilizzata nelle attività Fargate per Windows non è compatibile con la piattaforma. Per verificare se l'immagine è compatibile con l'host del server Windows, consulta Compatibilità delle versioni dei contenitori Windows sul sito web Microsoft. Quindi controlla i prerequisiti per eseguire le attività Windows.

Inoltre, assicurati che l'URL dell'immagine che hai definito sia accurato.

Informazioni correlate

Dipendenze per i container

amazon-ecs-agent sul sito web GitHub

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa