Come posso risolvere l'errore "DockerTimeoutError" in Batch AWS?

6 minuti di lettura
0

I processi nel mio ambiente di elaborazione Batch AWS non funzionano e restituiscono il seguente errore: "DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s." Come posso risolvere gli errori "DockerTimeoutError" in Batch AWS?

Breve descrizione

Se le chiamate API docker start e docker create richiedono più di quattro minuti, Batch AWS restituisce un errore DockerTimeoutError.

Nota: Il limite di timeout predefinito impostato dall'agente container di Amazon Elastic Container Service (Amazon ECS) è di quattro minuti.

L'errore può verificarsi per diversi motivi, ma in genere è causato da uno dei seguenti:

  • I volumi di istanze ECS dell'ambiente di elaborazione Batch AWS sono sottoposti a forti pressioni di I/O dovute a tutti gli altri processi in coda. Questi processi, creati ed eseguiti sull'istanza ECS, possono esaurire il burst balance. Per risolvere questo problema, segui i passaggi indicati nella sezione Risoluzione di eventuali problemi relativi al burst balance di questo articolo.
  • I container ECS bloccati non vengono puliti abbastanza velocemente da liberare il daemon Docker. Potresti riscontrare problemi con Docker se utilizzi un'Amazon Machine Image (AMI) personalizzata anziché l'AMI predefinita fornita da Batch AWS. L'AMI predefinita per Batch AWS ottimizza le impostazioni di pulizia di Amazon ECS. Per risolvere questo problema, segui i passaggi indicati nella sezione Risoluzione di eventuali problemi relativi al Docker di questo articolo.

Se nessuno di questi problemi causa l'errore, puoi risolvere ulteriormente il problema procedendo come segue:

  • Controlla i log Docker per identificare l'origine dell'errore.
  • Esegui lo script di raccolta dei log di Amazon ECS sulle istanze ECS nel cluster ECS associato al tuo ambiente di elaborazione Batch AWS.

Soluzione

Risolvi eventuali problemi di burst balance

Controlla il burst balance della tua istanza ECS

1.    Apri la console Amazon ECS.

2.    Nel pannello di navigazione, scegli Cluster. Quindi, scegli il cluster che contiene il tuo processo.

Nota: Il nome del cluster inizia con il nome dell'ambiente di elaborazione, seguito da _Batch_ e un hash casuale di numeri e lettere.

3.    Scegli la scheda Istanze ECS.

4.    Dalla colonna Istanza EC2, scegli la tua istanza.

Nota: Per trovare l'ID di istanza del processo non riuscito, esegui il comando Batch AWS describe-jobs. L'ID dell'istanza viene visualizzato nell'output di containerInstanceArn.

5.    Nella scheda Descrizioni della console Amazon EC2, in Dispositivi a blocchi, scegli il link per il tuo volume.

6.    Nella finestra pop-up del dispositivo a blocchi, in EBS ID scegli il tuo volume.

7.    Scegli la scheda ** Monitoraggio**. Quindi, scegli Burst Balance per controllare le metriche di burst balance. Se il tuo burst balance scende a 0, allora il tuo burst balance si esaurisce.

Crea un modello di avvio per il tuo ambiente di elaborazione gestito

Nota: Se modifichi il modello di avvio, devi creare un nuovo ambiente di elaborazione.

1.    Apri la console Amazon EC2, quindi scegli Modelli di avvio.

2.    Scegli Crea modello di avvio.

3.    In AMI ID, seleziona l'AMI predefinita ottimizzata per Amazon ECS.

4.    Nella sezione Archiviazione (volumi), scegli un tipo di volume nella colonna Tipo di volume. Quindi, inserisci un valore intero nella colonna Dimensione (GiB).

Nota: Se scegli Capacità di IOPS allocata SSD (io1) per il tuo tipo di volume, inserisci un valore intero consentito per IOPS.

5.    Scegli Crea modello di avvio.

6.    Usa il tuo nuovo modello di avvio per creare un nuovo ambiente di elaborazione gestito.

Crea un ambiente di elaborazione Batch AWS con la tua AMI

Nota: Se modifichi l'AMI, devi creare un nuovo ambiente di elaborazione perché il parametro ID AMI non può essere aggiornato.

1.    Apri la console Amazon EC2.

2.    Scegli Avvia istanza.

3.    Segui i passaggi della procedura guidata di configurazione per creare la tua istanza.

Importante: Nella pagina Aggiungi spazio di archiviazione, modifica il tipo di volume o la dimensione dell'istanza. Maggiore è la dimensione del volume, maggiori sono le prestazioni di base e più lentamente si ripristina il burst balance. Per ottenere prestazioni migliori per carichi I/O elevati, modifica il volume impostando io1.

4.    Crea una risorsa di elaborazione AMI dalla tua istanza.

5.    Crea un ambiente di elaborazione per Batch AWS che includa il tuo AMI ID.

Risolvi eventuali problemi con Docker

Per impostazione predefinita, l'agente container Amazon ECS pulisce automaticamente le attività interrotte e le immagini Docker che le tue istanze di container non stanno utilizzando. Se esegui nuovi processi con nuove immagini, lo spazio di archiviazione del container potrebbe riempirsi di immagini Docker che non stai utilizzando.

1.    Usa SSH per connetterti all'istanza di container per il tuo ambiente di elaborazione Batch AWS.

2.    Per ispezionare l'agente container Amazon ECS, esegui il comando Docker inspect ecs-agent. Quindi, rivedi la sezione env nell'output.

Nota: È possibile ridurre i valori delle seguenti variabili per velocizzare la pulizia delle attività e delle immagini:

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

È inoltre possibile utilizzare parametri regolabili per la pulizia automatica delle attività e delle immagini.

3.    Crea una nuova AMI con valori aggiornati.

-oppure-

Crea un modello di avvio con i dati utente che includa le nuove variabili di ambiente.

Per creare una nuova AMI con valori aggiornati

1.    Imposta i parametri di configurazione dell'agente nel file /etc/ecs/ecs.config.

2.    Riavvia il tuo agente container.

3.    Crea una risorsa di elaborazione AMI dalla tua istanza.

4.    Crea un ambiente di elaborazione per Batch AWS che includa il tuo AMI ID.

Per creare un modello di avvio con i dati utente che includa le nuove variabili di ambiente

1.    Crea un modello di avvio con i dati utente.

Ad esempio, i dati utente nel seguente file MIME multiparte sovrascrivono le impostazioni predefinite di pulizia delle immagini Docker per una risorsa di elaborazione:

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.    Usa il tuo nuovo modello di avvio per creare un ambiente di elaborazione gestito.


Informazioni correlate

Servizi AWS che pubblicano i parametri di CloudWatch

AMI delle risorse di elaborazione

amazon-ecs-agent (AWS GitHub)

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa