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 messaggio di errore: "DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s." Desidero risolvere l'errore.

Breve descrizione

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

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

Di seguito sono elencati i motivi che causano questo errore con maggiore frequenza:

  • 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 lavori possono esaurire il burst balance.
  • I container ECS bloccati non vengono puliti abbastanza velocemente da liberare il daemon Docker. Se utilizzi un'Amazon Machine Image (AMI) personalizzata anziché l'AMI predefinita fornita da Batch AWS, potresti riscontrare problemi con Docker.

Se nessuno di questi problemi è la causa dell'errore, intraprendi le seguenti azioni per approfondire il problema:

  • 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 all’ambiente di elaborazione Batch AWS.

Risoluzione

Risolvi i problemi del burst balance

Controlla il burst balance della tua istanza ECS

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati che la versione di AWS CLI che stai utilizzando sia la più recente.

Completa i seguenti passaggi:

  1. Apri la console Amazon ECS.
  2. Nel riquadro di navigazione, scegliCluster. Quindi, seleziona 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 Infrastruttura.
  4. Dalla colonna Infrastruttura, sotto la riga Istanze del container, scegli l'ID istanza.
    Nota: per trovare l'ID istanza del processo non riuscito, esegui il comando di AWS CLI describe-jobs. L'ID istanza viene visualizzato nell'output di containerInstanceArn.
  5. Nella console Amazon EC2, assicurati che l'istanza sia ancora selezionata. Quindi, nella sezione Archiviazione, scegli il link per il tuo ID volume.
  6. Nella finestra pop-up del dispositivo a blocchi, in ID volume, seleziona il tuo volume.
  7. Scegli la scheda Monitoraggio. Quindi, scegli Saldo burst per controllare i parametri del burst balance. Se il tuo burst balance scende a 0, significa che è esaurito.

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.

Completa i seguenti passaggi:

  1. Apri la console Amazon EC2, quindi scegli Modelli di avvio.
  2. Scegli Crea modello di avvio.
  3. In ID AMI, 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 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é non puoi aggiornare il parametro ID AMI.

Completa i seguenti passaggi:

  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 ID AMI.

Risolvi i problemi relativi a 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 usi. L'AMI predefinita per Batch AWS ottimizza le impostazioni di pulizia di Amazon ECS.

Completa i seguenti passaggi:

  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: per velocizzare la pulizia delle attività e delle immagini, riduci i valori delle seguenti variabili:
    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.

Crea una nuova AMI con valori aggiornati

Completa i seguenti passaggi:

  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 ID AMI.

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

Completa i seguenti passaggi:

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

    Ad esempio, i dati utente nel seguente file MIME multipart 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==--

    Per ulteriori informazioni sui file MIME multiparte, consulta MIME multi-part file sul sito cloud-init.

  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

Compute resource AMIs

amazon-ecs-agent sul sito Web GitHub

AWS UFFICIALE
AWS UFFICIALEAggiornata 6 mesi fa