Wie behebe ich Amazon-ECS-Aufgaben, deren Beendigung lange dauert, wenn die Container-Instance auf DRAINING gesetzt ist?

Lesedauer: 3 Minute
0

Es dauert lange, bis meine Amazon Elastic Container Service (Amazon ECS)-Aufgabe in den Status STOPPED übergeht. Oder meine Amazon-ECS-Aufgabe hängt im Status RUNNING fest, wenn die Container-Instance auf DRAINING gesetzt ist. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Wenn Sie eine ECS-Instance auf DRAINING setzen, geht Amazon ECS wie folgt vor:

  • Verhindert, dass neue Aufgaben für die Platzierung auf der Container-Instance geplant werden
  • Stoppt Aufgaben auf der Container-Instance, die sich im Status RUNNING befinden

Ihre Aufgaben können im Status RUNNING hängen bleiben oder es kann aufgrund von Problemen mit Konfigurationsparametern oder Aufgaben länger dauern, bis sie in den Status STOPPED übergehen. Ziehen Sie die folgenden Optionen in Betracht, um diese Probleme zu beheben:

Lösung

Vergewissern Sie sich, dass Ihre Parameter DeploymentConfiguration korrekt eingestellt sind

  1. Öffnen Sie die Amazon-ECS-Konsole.
  2. Wählen Sie im Navigationsbereich Cluster und wählen Sie dann den Cluster aus, in dem Ihre Container-Instance entleert wird.
  3. Wählen Sie die Registerkarte ECS-Instances und dann im Abschnitt Status die Option DRAINING aus.
  4. Wählen Sie Ihre Container-Instance aus und identifizieren Sie dann den Service für die Aufgaben, die entleert werden oder deren Entleerung zeitaufwändig ist.
  5. Wählen Sie die Registerkarte Dienste, wählen Sie den Dienst aus, und wählen Sie dann Bereitstellungen.
  6. Überprüfen Sie die Werte für minimumHealthyPercent und maximumPercent.
    Anmerkung: Serviceaufgaben auf der Container-Instance, die sich im Status RUNNING befinden, werden gestoppt und entsprechend den Bereitstellungskonfigurationsparametern des Service minimumHealthyPercent und maximumPercent ersetzt.

Vergewissern Sie sich, dass der Wert für die Abmeldeverzögerung korrekt eingestellt ist

Wichtig: Die folgenden Schritte gelten nur für Dienste, die den Application Load Balancer oder Network Load Balancer verwenden. Wenn Ihr Service den Classic Load Balancer verwendet, überprüfen Sie die Werte des Connection Drainings.

  1. Öffnen Sie die Amazon-ECS-Konsole.
  2. Wählen Sie im Navigationsbereich Cluster und wählen Sie dann den Cluster aus, in dem Ihre Container-Instance entleert wird.
  3. Wählen Sie die Registerkarte Dienste und dann den Dienst aus, bei dem der Stack im Status RUNNING hängen bleibt.
  4. Wählen Sie den Zielgruppennamen.
  5. Scrollen Sie auf der Registerkarte Details nach unten und aktivieren Sie dann das Kontrollkästchen Abmeldeverzögerung.

Vergewissern Sie sich, dass der Wert ECS_CONTAINER_STOP_TIMEOUT richtig eingestellt ist

  1. Stellen Sie mithilfe von SSH eine Verbindung zu Ihrer Container-Instance her.
  2. Führen Sie den Befehl docker inspect ecs-agent --format '{{json .Config.Env}}' aus.
  3. Prüfen Sie, ob es einen Wert für ECS_CONTAINER_STOP_TIMEOUT gibt.
    Anmerkung: ECS_CONTAINER_STOP_TIMEOUT ist ein ECS-Container-Agent-Parameter, der definiert, wie lange Amazon ECS wartet, bevor ein Container beendet wird. Die Zeit wird ab dem Moment gezählt, an dem eine Aufgabe gestoppt wird. Wenn Sie den Parameter ECS_CONTAINER_STOP_TIMEOUT nicht in der Ausgabe sehen, nachdem Sie den Befehl in Schritt 2 ausgeführt haben, verwendet Amazon ECS den Standardwert von 30 Sekunden.

Suchen Sie nach anderen Problemen im Zusammenhang mit Aufgaben

  1. Stellen Sie mithilfe von SSH eine Verbindung zu Ihrer Container-Instance her.
  2. Stellen Sie sicher, dass der Docker-Daemon und der Amazon-ECS-Container-Agent entweder für Ihre Amazon-Linux-1-AMIs oder Amazon-Linux-2-AMIs ausgeführt werden.
  3. Überprüfen Sie die Anwendungsprotokolle auf der Grundlage des von logConfiguration festgelegten Protokolltreibers.
    Anmerkung: Wenn Ihre Aufgaben beispielsweise den Protokolltreiber awslogs verwenden, überprüfen Sie Ihre Amazon CloudWatch Logs auf Probleme.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren