Skip to content

Wie behebe ich Auto-Scaling-Probleme in Amazon ECS?

Lesedauer: 6 Minute
0

Das Auto Scaling, das ich für Amazon Elastic Container Service (Amazon ECS) konfiguriert habe, skaliert die Anzahl der gewünschten Aufgaben nicht ab oder auf.

Kurzbeschreibung

Um die gewünschte Aufgabenanzahl automatisch zu aktualisieren, richte AWS Application Auto Scaling- und Amazon CloudWatch-Alarme für Amazon ECS ein.

Application Auto Scaling fügt aus den folgenden Gründen möglicherweise Aufgaben nicht wie erwartet hinzu oder entfernt diese nicht:

  • Du hast die Skalierungsrichtlinien nicht richtig konfiguriert.
  • Du hast den CloudWatch-Alarm gelöscht oder bearbeitet, der die Skalierungsrichtlinien aufruft.
  • Auto Scaling wurde unterbrochen.
  • Du hast das Format des Cron-Ausdrucks in der geplanten Aktion falsch angegeben.
  • Du hast AWS CloudFormation oder AWS Cloud Development Kit (AWS CDK) verwendet, um die gewünschte Aufgabenanzahl manuell zu aktualisieren, und den falschen Wert eingegeben.
  • Die gewünschte Anzahl von Aufgaben ist falsch konfiguriert.
  • Der Amazon ECS-Cluster verfügt nicht über genügend Ressourcen oder Kapazitäten, um neue Aufgaben auszuführen.
  • Es treten Netzwerkprobleme auf.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Problembehandlung bei CloudWatch-Alarmen und Skalierungsrichtlinien

Um Probleme mit CloudWatch-Alarmen und Skalierungsrichtlinien zu beheben, führe die folgenden Aufgaben auf der Grundlage der von dir verwendeten Skalierungsrichtlinie aus.

Skalierbares Ziel

Um zu überprüfen, ob der Service als skalierbares Ziel mit Application Auto Scaling registriert ist, führe den Befehl describe-scalable-targets aus:

aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region

Hinweis: Ersetze example-region durch deine AWS-Region.

Wenn der Service nicht registriert ist, führe den Befehl register-scalable-target aus, um den Service zu registrieren:

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

Hinweis: Ersetze your-cluster durch deinen Amazon ECS-Cluster-Namen, your-service-name durch deinen Service-Namen und example-region durch deine Region.

Überprüfe in der Ausgabe des vorherigen Befehls den Wert von DynamicScalingInSuspended, DynamicScalingOutSuspended und ScheduledScalingSuspended. Wenn DynamicScalingInSuspended oder DynamicScalingOutSuspended auf wahr gesetzt ist, aktualisiert Application Auto Scaling die Kapazität nicht, wenn du eine Skalierungsrichtlinie initiierst. Wenn ScheduledScalingSuspended auf wahr gesetzt ist, initiiert Application Auto Scaling nicht die Skalierungsaktionen, die du für den Sperrzeitraum geplant hast. Weitere Informationen zur Wiederaufnahme des unterbrochenen Auto Scaling findest du unter Unterbrechen und Fortsetzen der Skalierung für Application Auto Scaling.

Nachdem du den Service registriert hast, konfiguriere die Skalierungsrichtlinien und CloudWatch-Alarme.

Schrittweise Skalierung

Prüfe, ob CloudWatch die Alarme auslöst, die den Skalierungsrichtlinien zugeordnet sind. Du kannst Fehler im Verlauf des CloudWatch-Alarms finden. Wenn es keine Schrittanpassung für das Überschreitungs-Delta gibt, wird der folgende Fehler angezeigt: „Failed to execute AutoScaling action: No step adjustment found for metric value [xx, xx] and breach delta xx“. Um dieses Problem zu lösen, stelle sicher, dass du den Schwellenwert, die Schrittanpassungen und den Skalierungsanpassungstyp im CloudWatch-Alarm festlegst. Gib außerdem alle Schrittanpassungen in deinen Richtlinien an. Gib für abskalieren -infinity to 0 und für aufskalieren 0 to +infinity ein.

Hinweis: Wenn du Amazon ECS-Kapazitätsanbieter verwendest, stelle sicher, dass genügend Container-Instances vorhanden sind, auf denen die Aufgaben ausgeführt werden können.

Skalierung der Zielverfolgung

Da Skalierungsrichtlinien für die Zielverfolgung das Skalierungsverhalten beeinflussen können, solltest du die zugehörigen CloudWatch-Alarme nicht bearbeiten oder löschen. Wenn du diese Alarme änderst oder löschst, musst du die Richtlinie für die Zielüberwachung neu erstellen.

Wenn du mehrere Skalierungsrichtlinien konfigurierst, können die Richtlinien miteinander in Konflikt geraten und zu aufeinanderfolgenden Ab- und Aufskalierungsaktivitäten führen. Jede Richtlinie muss eine andere Metrik verwenden, wenn du mehrere Skalierungsrichtlinien für die Zielverfolgung für einen Amazon ECS-Service haben möchtest.

Problembehandlung bei falschem Cron-Ausdruck

Stelle sicher, dass der Cron-Ausdruck in der Konfiguration für geplante Aktionen für Application Auto Scaling das folgende Format verwendet: [Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Year]. Die sechs Felder müssen durch ein Leerzeichen getrennt werden.

Eine Beispielaktion, die den Cron-Ausdruck verwendet, findest du unter Eine geplante Aktion erstellen, die nach einem wiederkehrenden Zeitplan ausgeführt wird.

Problembehandlung bei der Aktualisierung der gewünschten Aufgabenanzahl

Wenn du die gewünschte Aufgabenanzahl für einen Amazon ECS-Service aktualisierst, kannst du ein Skalierungsereignis aufrufen. Beim Aufskalieren erhöht Application Auto Scaling die gewünschte Anzahl auf die Mindestkapazität. Beim Abskalieren erhöht Application Auto Scaling die gewünschte Anzahl auf die maximale Kapazität. In beiden Fällen führt Application Auto Scaling die Skalierung weiterhin auf der Grundlage der Skalierungsrichtlinie durch, ändert jedoch nicht die gewünschte Anzahl.

Wenn du den Amazon ECS-Service mit CloudFormation oder AWS CDK erstellst, ist der Standardwert DesiredCount 1. Wenn du den Amazon ECS-Service mit CloudFormation oder AWS CDK aktualisierst, verwendet die Anwendung die vorhandene DesiredCount für neue Bereitstellungen.

Gib für den gewünschten Zählwert im CloudFormation-Stack oder im AWS CDK während des Service-Updates einen Wert zwischen den Mindest- und Höchstwerten an.

Hinweis: Stelle sicher, dass die gewünschte Anzahl den Anforderungen der Bereitstellungskonfiguration des Service entspricht, insbesondere den Mindest- und Höchstwerten in Prozent.

Behebung von Cluster-Kapazitätsproblemen

Um Kapazitätsprobleme zu vermeiden, verwende Amazon ECS-Kapazitätsanbieter, um Amazon Elastic Compute Cloud (Amazon EC2)-Instances automatisch bereitzustellen.

Um eine übermäßige Skalierung zu verhindern, verwendet Auto Scaling die tatsächliche Anzahl ausgeführter Aufgaben in einem Service als Ausgangspunkt, nicht die gewünschte Anzahl. Wenn nicht genügend Container-Instance-Ressourcen vorhanden sind, um die zusätzlichen Aufgaben zu platzieren, kann Auto Scaling die Skalierung nicht abschließen. Um dieses Problem zu beheben, verwende Kapazitätsanbieter, um die Kapazität der Container-Instance automatisch zu skalieren. Andernfalls musst du die Kapazität der Container-Instance manuell erhöhen.

Nach der Ruhephase setzt Auto Scaling die Skalierung der Aktivitäten fort. Verwende für AWS Fargate-Aufgaben Fargate-Kapazitätsanbieter, um die Rechenkapazität zu verwalten.

Auto Scaling verwendet die tatsächliche Anzahl ausgeführter Aufgaben als Ausgangspunkt für die Skalierung, nicht die gewünschte Anzahl. Wenn nicht genügend Container-Instance-Ressourcen vorhanden sind, um die zusätzlichen Aufgaben zu platzieren, kann Auto Scaling die Skalierungsaktivität nicht abschließen. Um jedoch übermäßige Skalierungsversuche zu verhindern, die nicht ausgeführt werden können, versucht Auto Scaling dennoch, auf der Grundlage der verfügbaren Ressourcen so weit wie möglich zu skalieren.

Behebung netzwerkbezogener Skalierungsprobleme

Überprüfung der Konfiguration der Aufgaben im awsvpc-Netzwerkmodus

Wenn Auto Scaling die Anzahl der Aufgaben erhöht, benötigt jede Aufgabe im awsvpc-Netzwerkmodus ihre eigene IP-Adresse. Wenn deine Virtual Private Cloud (VPC)-Subnetze nicht über genügend verfügbare IP-Adressen verfügen, wird die Anzahl der Aufgaben nicht erhöht. Überwache regelmäßig die Verwendung der IP-Adresse der VPC. Wenn deine Konfiguration in der Nähe der Kapazitätsgrenzen liegt, verwende größere CIDR-Blöcke oder erstelle neue Subnetze.

Amazon ECS-Aufgaben im awsvpc-Netzwerkmodus verwenden elastische Netzwerkschnittstellen. Es gibt ein maximales Kontingent für die Gesamtzahl der Netzwerkschnittstellen in jedem Instance-Typ in jeder VPC. Wenn du dieses Kontingent überschreitest, werden die Aufgaben nicht gestartet. Gehe wie folgt vor, um die Nutzung der Netzwerkschnittstelle zu überprüfen:

  1. Öffne die Amazon-EC2-Konsole.
  2. Wähle im Navigationsbereich Netzwerkschnittstellen aus.
  3. Verwende die Spalte Instance-ID, um die Instances anzuzeigen, an die jede Netzwerkschnittstelle angefügt ist. Um weitere Informationen zur Netzwerkschnittstelle wie IP-Adressen und Sicherheitsgruppen anzuzeigen, wähle die Netzwerkschnittstelle aus.

Sicherstellen, dass deine Konfiguration den erforderlichen Datenverkehr nicht blockiert

Sicherheitsgruppen oder Regeln für Netzwerk-Zugriffssteuerungslisten (Netzwerk-ACL) können den erforderlichen Datenverkehr blockieren und Fehlschläge bei der Zustandsprüfung verursachen, die zu unnötigen Skalierungsereignissen führen. Stelle sicher, dass die Sicherheitsgruppen eingehenden Datenverkehr zu den Ports der Anwendung zulassen. Stelle außerdem sicher, dass die Netzwerk-ACLs eingehenden und ausgehenden Datenverkehr zwischen der Anwendung und Amazon ECS zulassen.

Ähnliche Informationen

Den Amazon ECS-Service automatisch skalieren

application-autoscaling

AWS OFFICIALAktualisiert vor 7 Monaten