Wie behebe ich Probleme mit der automatischen Service-Skalierung in Amazon ECS?

Zuletzt aktualisiert: 30.3.2022

Die automatische Service-Skalierung, die für meinen Amazon-ECS-Service (Amazon Elastic Container Service) konfiguriert wurde, skaliert die gewünschte Anzahl von Aufgaben nicht wie erforderlich nach unten oder oben.

Kurzbeschreibung

Sie können die gewünschte Anzahl von Aufgaben für Ihren Amazon ECS-Service automatisch aktualisieren, indem Sie Ihren ECS-Service in den Application-Auto-Scaling-Service und Amazon-CloudWatch-Alarme integrieren.

Die automatische Service-Skalierung kann möglicherweise aus einem oder mehreren der folgenden Gründe keine Aufgaben wie erwartet hinzufügen oder entfernen:

  • Die Skalierungsrichtlinien sind nicht richtig konfiguriert.
  • Der CloudWatch-Alarm, der die Skalierungsrichtlinien auslöst, wurde gelöscht oder bearbeitet.
  • Das Cron-Ausdrucksformat ist in der geplanten Aktion falsch angegeben.
  • Sie haben die gewünschte Anzahl von Aufgaben manuell oder über AWS CloudFormation oder AWS Cloud Development Kit (AWS CDK) auf einen Wert aktualisiert, der kleiner als das Minimum oder größer als der in der automatischen Service-Skalierung festgelegte Maximalwert ist.
  • Ihr ECS-Cluster verfügt nicht über genügend Ressourcen oder Kapazität, um neue Aufgaben auszuführen.

Auflösung

Problembehandlung bei CloudWatch-Alarmen und Skalierungsrichtlinien

Skalierbares Ziel

  • Stellen Sie sicher, dass der ECS-Service mit Application Auto Scaling als skalierbares Ziel registriert ist. Wenn der Service nicht registriert ist, registrieren Sie ihn mit dem folgenden Befehl. Konfigurieren Sie anschließend die Skalierungsrichtlinien und CloudWatch-Alarme entsprechend. Weitere Informationen finden Sie unter Wie kann ich Amazon ECS Service Auto Scaling in Fargate konfigurieren?
aws application-autoscaling register-scalable-target --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name --min-capacity 1 --max-capacity 10 --region example-region
  • Verwenden Sie die folgenden Befehle, um Informationen über die automatische Service-Skalierung Ihres ECS-Service abzurufen:
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region 
aws application-autoscaling describe-scaling-policies --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-activities --service-namespace ecs \ 
--scalable-dimension ecs:service:DesiredCount --resource-id service/your-cluster/your-service-name --region example-region
  • Achten Sie beim Erstellen oder Aktualisieren der CloudWatch-Alarme für die automatische ECS-Service-Skalierung darauf, dass die Metriken, Dimensionen, Statistiken, der Zeitraum, die Bedingung und die Schwellenwerte korrekt angegeben sind. Andernfalls wird der Alarm nicht ausgelöst, um die zugehörige Skalierungsrichtlinie zu aktualisieren.

Hinweis: Wenn beim Ausführen von AWS-CLI-Befehlen Fehler gemeldet werden, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Skalierung in Schritten

  • Prüfen Sie, ob die mit den Skalierungsrichtlinien verknüpften CloudWatch-Alarme ausgelöst werden. Prüfen Sie, ob Fehler aufgetreten sind, indem Sie den CloudWatch-Alarmverlauf anzeigen.
  • Prüfen Sie für Richtlinien zur Skalierung in Schritten, ob der Schwellenwert für Verletzungen, die Schrittanpassungen und die Skalierungsanpassungsart im CloudWatch-Alarm festgelegt sind. Wenn es keine passende Schrittanpassung für das Verletzungsdelta gibt, d. h. den Schwellenwert, der vom Metrikwert subtrahiert wird, wird im Alarmverlauf die folgende Fehlermeldung angezeigt: Failed to execute AutoScaling action: No step adjustment found for metric value [xx, xx] and breach delta xx
    Stellen Sie daher sicher, dass alle Schrittanpassungen, d. h. von -infinity bis 0 für Scale-In und 0 bis +infinity für Scale-Out, in Ihren Richtlinien abgedeckt sind.
    Hinweis: In der Regel kann für eine Scale-Out-Richtlinie bei den Schrittanpassungen nur die Obergrenze Null (positiv unendlich) sein. Bei einer Scale-In-Richtlinie kann nur die Untergrenze Null (negativ unendlich) sein. Weitere Informationen finden Sie unter Schrittanpassungen.

Zielverfolgungsskalierung

  • Da die Richtlinien für die Zielverfolgungsskalierung von AWS verwaltet werden, erstellt Application Auto Scaling CloudWatch-Alarme für die Auf- und Abskalierung basierend auf dem Zielwert oder Schwellenwert, der bei der Erstellung dieser Richtlinien angegeben wurde. Bearbeiten oder löschen Sie diese Alarme daher nicht. Das Bearbeiten oder Löschen dieser Alarme hat Auswirkungen auf das Skalierungsverhalten. Wenn Sie diese Alarme geändert oder gelöscht haben, erstellen Sie die Zielverfolgungsrichtlinie unbedingt erneut.
  • Sie können mehrere Richtlinien für die Zielverfolgungsskalierung für einen ECS-Service haben, solange jede Richtlinie eine andere Metrik verwendet. Das Ziel von Application Auto Scaling ist es, die Verfügbarkeit zu priorisieren. Daher unterscheidet sich das Verhalten dieser Richtlinien je nachdem, ob die Zielverfolgungsrichtlinien für die Auf- oder Abskalierung bereit sind. Application Auto Scaling skaliert die Aufgaben auf, wenn eine der Zielverfolgungsrichtlinien für die Skalierung bereit ist, skaliert jedoch nur dann ab, wenn alle Richtlinien für die Zielverfolgung (mit aktiviertem Scale-In-Teil) für die Skalierung bereit sind.
  • Wenn mehrere Skalierungsrichtlinien, einschließlich Zielverfolgung und Schrittskalierungsrichtlinien, für einen ECS-Service konfiguriert sind, stellen Sie sicher, dass sie keine Konflikte verursachen. Diese Konflikte können zu unerwünschtem Verhalten führen, z. B. aufeinanderfolgende ab- und Aufskalierung, was zu einer unnötigen Oszillation der Anzahl von Aufgaben führt.

Weitere Informationen finden Sie unter Richtlinien zur Zielverfolgungsskalierung für Application Auto Scaling.

Fehlerbehebung bei falschem Cron-Ausdruck

Stellen Sie sicher, dass der im Zeitplan angegebene Cron-Ausdruck in der Konfiguration der geplanten Aktionen für Application Auto Scaling korrekt ist. Das von Application Auto Scaling unterstützte Cron-Format besteht aus sechs Feldern, die durch Leerräume getrennt sind: [Minuten] [Stunden] [Tag_des_Monats] [Monat] [Wochentag] [Jahr].

Weitere Informationen finden Sie unter Beispiel für geplante Aktionen für Application Auto Scaling.

Problembehandlung bei der Aktualisierung der gewünschten Anzahl von Aufgaben

Beachten Sie Folgendes, wenn Sie entweder manuell aktualisieren oder CloudFormation oder AWS CDK verwenden, um die gewünschte Anzahl von Aufgaben für Ihren ECS-Service zu aktualisieren:

  • Wenn Sie die gewünschte Anzahl von Aufgaben für Ihren ECS-Service auf einen Wert aktualisiert haben, der unter dem Mindestkapazitätswert liegt, und ein Alarm eine Aufscalierungsaktivität auslöst, skaliert die automatische Serviceskalierung die gewünschte Anzahl bis zum Mindestkapazitätswert. Anschließend wird die automatische Serviceskalierung basierend auf der Skalierungsrichtlinie, die mit dem Alarm verknüpft ist, weiter nach Bedarf aufskaliert. Eine Abskalierungsaktivität passt jedoch nicht die gewünschte Anzahl an, da die gewünschte Anzahl bereits unter dem Mindestkapazitätswert liegt.
  • Wenn Sie die gewünschte Anzahl von Aufgaben für Ihren ECS-Service auf einen Wert aktualisiert haben, der über dem maximalen Kapazitätswert liegt, und ein Alarm eine Skalierung der Aktivität auslöst, skaliert die automatische Dienstskalierung den gewünschten Zähler auf den maximalen Kapazitätswert. Anschließend wird die automatische Serviceskalierung basierend auf der Skalierungsrichtlinie, die mit dem Alarm verknüpft ist, weiter abskaliert. Eine Aufskalierungsaktivität passt jedoch nicht die gewünschte Anzahl an, da die gewünschte Anzahl bereits über dem maximalen Kapazitätswert liegt.
  • Wenn Sie Ihren ECS-Service mit CloudFormation oder CDK erstellt haben, ohne das Feld DesiredCount anzugeben, wird die gewünschte Anzahl auf den Standardwert 1 festgelegt. Wenn derselbe Service jedoch über CloudFormation oder CDK aktualisiert wird, ohne das Feld DesiredCount anzugeben, wird die vorhandene gewünschte Anzahl in der aktuellen Bereitstellung für die neue Bereitstellung verwendet. Wenn die gewünschte Anzahl im CloudFormation-Stack oder AWS CDK angegeben ist, stellen Sie daher sicher, dass der Wert während der Serviceaktualisierung zwischen dem Mindest- und Maximalwert liegt.

Beheben von Problemen mit der Cluster-Kapazität

Wenn Ihr ECS-Cluster nicht über genügend Ressourcen wie Amazon-EC2-Container-Instances (Amazon Elastic Compute Cloud) verfügt, um Aufgaben auszuführen, bleibt die durch die Skalierungsrichtlinien initiierte Skalierungsaktivität unerfüllt. In diesem Fall wird eine Fehlermeldung in Serviceereignissen protokolliert. Um diese Amazon-EC2-Kapazitätsprobleme zu vermeiden und die Aufgaben erfolgreich zu starten, nutzen Sie Amazon-ECS-Kapazitätsanbieter, um EC2-Instances bei Bedarf automatisch bereitzustellen.

Hinweis: Bei Skalierungsaktivitäten verwendet die automatische Serviceskalierung die tatsächliche Anzahl der laufenden Aufgaben in einem Service als Ausgangspunkt, im Gegensatz zur gewünschten Anzahl. Dadurch wird eine übermäßige Skalierung verhindert, die möglicherweise nicht erfüllt wird, z. B. wenn nicht genügend Container-Instance-Ressourcen vorhanden sind, um die zusätzlichen Aufgaben zu platzieren. Wenn die Container-Instance-Kapazität später verfügbar ist, ist die ausstehende Skalierungsaktivität möglicherweise erfolgreich. Dann werden weitere Skalierungsaktivitäten nach der Ruhephase fortgesetzt.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?