Wie behebe ich den Fehler „DockerTimeoutError“ in AWS Batch?

Lesedauer: 5 Minute
0

Die Jobs in meiner AWS Batch-Rechnerumgebung schlagen fehl und lösen die folgende Fehlermeldung aus: „DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s.“ Wie behebe ich die Fehler „DockerTimeoutError“ in AWS Batch?

Kurzbeschreibung

Wenn Ihre docker start und docker create-API-Aufrufe länger als vier Minuten dauern, meldet AWS Batch einen DockerTimeoutError-Fehler.

Hinweis: Das vom Amazon Elastic Container Service (Amazon ECS) Container Agent festgelegte Standard-Timeout-Limit beträgt vier Minuten.

Der Fehler kann aus einer Vielzahl von Gründen auftreten, aber er wird in der Regel durch eine der folgenden Ursachen verursacht:

  • Die ECS Instance Volumes der AWS-Batch-Rechnerumgebung stehen aufgrund aller anderen Jobs in Ihrer Warteschlange unter hohem I/O-Druck. Diese Jobs, die auf der ECS Instance erstellt und auf dieser ausgeführt werden, können die Burst Balance aufbrauchen. Um dieses Problem zu beheben, folgen Sie den Schritten im Abschnitt Probleme mit der Burst Balance beheben in diesem Artikel.
  • Gestoppte ECS-Container werden nicht schnell genug bereinigt, um den Docker-Daemon freizugeben. Docker-Probleme können auftreten, wenn Sie ein angepasstes Amazon Machine Image (AMI) anstelle des von AWS Batch bereitgestellten Standard-AMI verwenden. Das Standard-AMI für AWS Batch optimiert Ihre Amazon-ECS-Cleanup-Einstellungen. Um dieses Problem zu beheben, folgen Sie den Schritten im Abschnitt Beheben aller Docker-Probleme in diesem Artikel.

Wenn keines dieser Probleme den Fehler verursacht, können Sie das Problem möglicherweise beheben, indem Sie wie folgt vorgehen:

  • Überprüfen Sie Ihre Docker-Protokolle, um die Fehlerquelle zu ermitteln.
  • Führen Sie das Amazon-ECS-Protokollkollektor-Skript auf den ECS Instances im ECS Cluster aus, der Ihrer AWS-Batch-Rechnerumgebung zugeordnet ist.

Behebung

Alle Probleme mit der Burst Balance beheben

Überprüfen Sie die Burst Balance Ihrer ECS Instance

1.Öffnen Sie die Amazon-ECS-Konsole.

2.    Wählen Sie im Navigationsbereich die Option Clusters aus. Wählen Sie dann den Cluster aus, der Ihren Job enthält.

Hinweis: Der Name des Clusters beginnt mit dem Namen der Rechnerumgebung, gefolgt von**\ _Batch\ _** und einer zufälligen Folge von Zahlen und Buchstaben.

  1. Wählen Sie die Registerkarte ECS Instances aus.

  2. Wählen Sie in der Spalte EC2 Instance Ihre Instance aus.

Hinweis: Führen Sie den AWS-Batch-Befehl describe-jobs aus, um die Instance ID des fehlgeschlagenen Jobs zu ermitteln. Die Instance ID erscheint in der Ausgabe für containerInstanceArn.

  1. Wählen Sie in der Amazon-EC2-Konsole auf der Registerkarte Beschreibungen unter Blockgeräte den Link für Ihr Volume aus.

  2. Wählen Sie im Popup-Fenster Blockgeräte für EBS ID Ihr Volume aus.

  3. Wählen Sie die Registerkarte Überwachung aus. Wählen Sie dann Burst Balance aus, um Ihre Burst-Balance-Metriken zu überprüfen. Wenn Ihre Burst Balance auf 0 fällt, ist Ihre Burst Balance aufgebraucht.

Erstellen Sie eine Startvorlage für Ihre verwaltete Rechnerumgebung

Hinweis: Wenn Sie die Startvorlage ändern, müssen Sie eine neue Rechnerumgebung erstellen.

  1. Öffnen Sie die Amazon-EC2-Konsole und wählen Sie dann Startvorlagen aus.

  2. Wählen Sie Startvorlage erstellen aus.

  3. Wählen Sie für AMI ID das für Amazon ECS optimierte Standard-AMI aus.

  4. Wählen Sie im Abschnitt Speicher (Volumes) in der Spalte Datenträgertyp einen Datenträgertyp aus. Geben Sie dann einen Ganzzahlwert in die Spalte Größe (GiB) ein.

Hinweis: Wenn Sie Bereitgestellte IOPS SSD (io1) als Ihren Datenträgertyp wählen, geben Sie einen Ganzzahlwert ein, der für IOPS zulässig ist.

  1. Wählen Sie Startvorlage erstellen aus.

  2. Verwenden Sie Ihre neue Startvorlage, um eine neue verwaltete Rechnerumgebung zu erstellen.

Erstellen Sie eine AWS-Batch-Rechnerumgebung mit Ihrem AMI

Hinweis: Wenn Sie das AMI ändern, müssen Sie eine neue Rechnerumgebung erstellen, da der AMI ID-Parameter nicht aktualisiert werden kann.

1.Öffnen Sie die Amazon-EC2-Konsole.

  1. Wählen Sie Instance starten aus.

  2. Folgen Sie den Schritten des Einrichtungsassistenten, um Ihre Instance zu erstellen.

Wichtig: Ändern Sie auf der Seite Speicher hinzufügen den Datenträgertyp oder die Größe Ihrer Instance. Je größer der Datenträger ist, desto höher ist die Ausgangsleistung und desto langsamer wird die Burst Balance wieder aufgefüllt. Um eine bessere Leistung bei hohen I/O-Lasten zu erzielen, ändern Sie den Datenträger auf den Typ io1.

  1. Erstellen Sie ein Rechnerressourcen-AMI aus Ihrer Instance.

  2. Erstellen Sie eine Rechnerumgebung für AWS Batch, die Ihre AMI ID enthält.

Alle Docker-Probleme beheben

Standardmäßig bereinigt der Amazon ECS Container Agent automatisch gestoppte Jobs und Docker-Images, die Ihre Container Instances nicht verwenden. Wenn Sie neue Jobs mit neuen Images ausführen, füllt sich Ihr Container-Speicher möglicherweise mit Docker-Images, die Sie nicht verwenden.

  1. Verwenden Sie SSH, um eine Verbindung zur Container-Instance für Ihre AWS-Batch-Rechnerumgebung herzustellen.

  2. Führen Sie den Docker-Befehl ** inspect ecs-agent** aus, um den Amazon ECS Container Agent zu überprüfen. Überprüfen Sie dann den Abschnitt env in der Ausgabe.

Hinweis: Sie können die Werte der folgenden Variablen reduzieren, um die Job- und Image-Bereinigung zu beschleunigen:

  • ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
  • ECS_IMAGE_CLEANUP_INTERVAL
  • ECS_IMAGE_MINIMUM_CLEANUP_AGE
  • ECS_NUM_IMAGES_DELETE_PER_CYCLE

Sie können auch einstellbare Parameter für die automatische Job- und Image-Bereinigung verwenden.

  1. Erstellen Sie ein neues AMI mit aktualisierten Werten.

-oder-

Erstellen Sie eine Startvorlage mit den Benutzerdaten, die Ihre neuen Umgebungsvariablen enthält.

Um ein neues AMI mit aktualisierten Werten zu erstellen

  1. Stellen Sie Ihre Agentenkonfigurationsparameter in der Datei /etc/ecs/ecs.config ein.

  2. Starten Sie Ihren Container Agent neu.

  3. Erstellen Sie ein Rechenressourcen-AMI aus Ihrer Instance.

  4. Erstellen Sie eine Rechnerumgebung für AWS Batch, die Ihre AMI ID enthält.

Um eine Startvorlage mit den Benutzerdaten zu erstellen, die Ihre neuen Umgebungsvariablen enthalten

  1. Erstellen einer Startvorlage mit Benutzerdaten.

Beispielsweise überschreiben die Benutzerdaten in der folgenden mehrteiligen MIME-Datei die standardmäßigen Cleanup-Einstellungen für ein Docker-Image und eine Rechnerressource:

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==--
  1. Verwenden Sie Ihre neue Startvorlage, um eine verwaltete Rechnerumgebung zu erstellen.

Weitere Informationen

AWS-Services, die CloudWatch-Metriken veröffentlichen

AMI für Rechenressourcen

amazon-ecs-agent (AWS GitHub)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren