Wie behebe ich Skalierungsprobleme mit meinem Amazon-ECS-Kapazitätsanbieter?

Letzte Aktualisierung: 14.04.2022

Ich habe einen Kapazitätsanbieter für meinen Amazon Elastic Container Service (Amazon ECS)-Cluster eingerichtet. Der Kapazitätsanbieter skaliert jedoch nicht auf, wenn dem Cluster die Ressourcen ausgehen, oder skaliert nicht ab, wenn die Kapazität weniger belegt ist.

Kurzbeschreibung

Der Kapazitätsanbieter für Ihren Amazon-ECS-Cluster skaliert aus einem oder mehreren der folgenden Gründe nicht automatisch auf oder ab:

  • Der Amazon-ECS-Service ist nicht dem Kapazitätsanbieter zugeordnet.
  • Die Skalierungsrichtlinien für den Kapazitätsanbieter sind nicht an die Auto-Scaling-Gruppe angefügt.
  • Die Skalierungsrichtlinien für die Zielverfolgung sind nicht richtig konfiguriert.
  • Der Prozentsatz der Zielkapazität ist im Kapazitätsanbieter nicht richtig konfiguriert.
  • Die Strategie zur Aufgabenplatzierung ist nicht entsprechend der Workload definiert.
  • Der ECS-Service scheitert mit einigen Fehlern und hindert den Kapazitätsanbieter an der Skalierung.
  • Sie verwenden die verwaltete Skalierung für den Kapazitätsanbieter, und an die Auto-Scaling-Gruppe sind benutzerdefinierte Skalierungsrichtlinien angefügt.
  • Die Auto-Scaling-Gruppe hat die Container-Instance gelauncht, kann dem Cluster jedoch nicht beitreten.
  • Ihre Container-Instances sind vor Abskalierung geschützt.
  • Der Kapazitätsanbieter steckt im Zustand „fehlgeschlagen“ fest.
  • Die Auto-Scaling-Gruppe steckt in einer Schleife des Aufkalierens und Abskalierens fest.

Auflösung

Der Amazon-ECS-Service ist nicht dem Kapazitätsanbieter zugeordnet

Um zu überprüfen, ob der ECS-Service dem Kapazitätsanbieter zugeordnet ist, führen Sie den AWS Command Line Interface (AWS CLI)-Befehl describe-services aus.

aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query services[].capacityProviderStrategy

Wenn Ihr ECS-Service dem Kapazitätsanbieter zugeordnet ist, muss die Ausgabe etwa wie folgt aussehen:

[
  [
    {
      "capacityProvider": "example-capacity-provider",
      "weight": 1,
      "base": 1
    }
  ]
]

Stellen Sie sicher, dass das Feld CapacityProviderStrategy in der Ausgabe nicht Null ist. Sie können die Konfiguration des Service anzeigen, indem Sie AWS-CloudTrail-Ereignisse für die API-Aufrufe CreateService und UpdateService überprüfen.

Um dieses Problem zu beheben, aktualisieren Sie den ECS-Service mithilfe der AWS-CLI-Befehle update-service, run-task oder put-cluster-capacity-providers. Sie können auch über die Amazon-ECS-Konsole den Service aktualisieren.

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

Wenn ein Kapazitätsanbieter erstellt und einer Auto-Scaling-Gruppe zugeordnet wird, erstellt die Auto-Scaling-Gruppe eine Skalierungsrichtlinie, die mithilfe der Zielverfolgung die gewünschte Kapazität für die Aufnahme von Clusterlasten ändert.

Um dieses Problem zu beheben, überprüfen Sie CloudTrail-Ereignisse für die APIs UpdateAutoScalingGroup, CreateCapacityProvider, UpdateCapacityProvider und PutScalingPolicy.

Stellen Sie sicher, dass die Auto-Scaling-Gruppe als Cluster-Anhang erstellt wurde, indem Sie den folgenden Befehl ausführen:

aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query clusters[].attachments[]

Die Ausgabe des Befehls muss etwa wie folgt aussehen:

[
  {
    "id": "100a23456-5f0b-4abc-b998-d6789d111a",
    "type": "asp",
    "status": "CREATED",
    "details": [
      {
        "name": "capacityProviderName",
        "value": "example-capacityProvider"
      },
      {
        "name": "scalingPlanName",
        "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345"
      }
    ]
  }
]

Wenn Sie eine Richtlinie für verwaltete Skalierung verwenden, überprüfen Sie wie folgt, ob die Richtlinie an die Auto-Scaling-Gruppe angefügt ist:

  1. Öffnen Sie die Amazon-ECS-Konsole.
  2. Wählen Sie im Navigationsbereich Clusters.
  3. Öffnen Sie den Cluster, den Sie überprüfen möchten.
  4. Wählen Sie die Registerkarte Capacity Provides (Kapazitätsanbieter).
  5. Wählen Sie für den Kapazitätsanbieter, den Sie überprüfen möchten, den ASG aus.
    Sie werden in der Amazon-EC2-Konsole zur Seite der Auto-Scaling-Gruppen weitergeleitet.
  6. Wählen Sie die Registerkarte Atomatic Scaling (Automatische Skalierung).
    Sie können die Skalierungsrichtlinien anzeigen.
  7. Prüfen Sie, ob die Skalierungsrichtlinie, die Sie verwenden, enthalten ist.

Achten Sie außerdem darauf, das Präfix AutoScaling-ECSManagedAutoScalingPlan in den Namen der Skalierungsrichtlinie für die Auto-Scaling-Gruppe aufzunehmen. Andernfalls verwendet die Auto-Scaling-Gruppe eine Skalierungsrichtlinie, die sich von der vom Kapazitätsanbieter verwalteten unterscheidet. Beachten Sie, dass Kapazitätsanbieter zusammen mit anderen Arten von Skalierungsrichtlinien verwendet werden können. Weitere Informationen finden Sie unter Automatische Skalierung für Services.

Die Skalierungsrichtlinien für die Zielverfolgung sind nicht richtig konfiguriert

Eine Skalierungsrichtlinie für die Zielverfolgung verfolgt einen Zielwert für die von Ihnen definierte Metrik. Die automatische Skalierung für Services von Amazon ECS erstellt und verwaltet die Amazon-CloudWatch-Alarme, die die Skalierungsrichtlinie auslösen, und berechnet die Skalierungsanpassung basierend auf der Metrik und dem Zielwert. Wenn die Zielverfolgungs-Richtlinie nicht richtig konfiguriert ist, werden Aufgaben möglicherweise nicht automatisch nach Bedarf skaliert.

Angenommen, die automatische Skalierungsrichtlinie für die Zielverfolgung verfolgt die CPUUtilization-Metrik in CloudWatch, und Sie geben einen Prozentsatz der Zielverfolgung von 60 an. In diesem Fall arbeitet der Kapazitätsanbieter nach bester Fähigkeit, um die gesamte CPU-Auslastung bei 60 % zu halten. Dies führt zu einem Aufskalierungs-Ereignis, wenn die CPU-Auslastung über 60 % liegt, und zu einem Abskalierungs-Ereignis, wenn die Auslastung unter 60 % liegt.

Um dieses Problem zu beheben, wählen Sie die richtige Metrik aus und legen Sie die richtigen Abskalierungs- und Aufskalierungs-Werte in der Zielverfolgungs-Richtlinie basierend auf Ihrer Workload fest. Weitere Informationen finden Sie unter Skalierungsrichtlinien für die Zielverfolgung.

Der Prozentsatz der Zielkapazität ist im Kapazitätsanbieter nicht richtig konfiguriert

Der Zielkapazitätswert wird als Zielwert für die CloudWatch-Metrik verwendet, die in der von Amazon ECS verwalteten Skalierungsrichtlinie für die Zielverfolgung verwendet wird. Dieser Zielkapazitätswert wird nach bester Fähigkeit erreicht. Die erlaubten Werte für diesen Wert sind ganze Zahlen zwischen 1 und 100. Wenn Sie beispielsweise die Zielkapazität auf 100 % festlegen, werden alle Instances genutzt und alle Instances, die keine Aufgaben ausführen, werden abskaliert. Dieses Verhalten ist jedoch nicht immer garantiert. Wenn Sie Kapazitätsreserven benötigen, legen Sie die Zielkapazität auf einen Wert fest, der je nach Ihrer Anforderung etwas unter 100 % liegt.

Um den Kapazitätsanbieter mit dem richtigen Zielkapazitäts-Prozentsatz zu aktualisieren, befolgen Sie die Anweisungen unter Aktualisieren eines Auto-Scaling-Gruppen-Kapazitätsanbieters mithilfe der klassischen Konsole.

Die Strategie zur Aufgabenplatzierung ist nicht entsprechend der Workload definiert

Strategien zur Aufgabenplatzierung können angegeben werden, wenn Sie einen Service erstellen oder eine Aufgabe ausführen. Sie können auch die Strategien zur Aufgabenplatzierung für vorhandene Services aktualisieren. Wenn Ihre Workload beispielsweise speicherintensiv ist und Sie die Strategie zur Aufgabenplatzierung nicht entsprechend konfiguriert haben, werden die Aufgaben nicht anhand Ihrer Speichernutzung auf- oder abskaliert. Überprüfen Sie unbedingt die Strategietypen für die Aufgabenplatzierung und definieren Sie diese Strategien entsprechend Ihrer Workload.

Der ECS-Service versagt mit einigen Fehlern und verhindert die Skalierung des Kapazitätsanbieters

Wenn Ihr ECS-Service mit irgendwelchen Fehlern ausfällt, wird der Kapazitätsanbieter daran gehindert, ab- und aufzuskalieren. Um zu beheben, warum der ECS-Service fehlgeschlagen ist, überprüfen Sie die Serviceereignis-Meldungen in der Amazon-ECS-Konsole.

Sie verwenden die verwaltete Skalierung für den Kapazitätsanbieter, und der Auto-Scaling-Gruppe sind benutzerdefinierte Skalierungsrichtlinien angefügt

Wenn Ihr Cluster nicht automatisch skaliert, erhalten Sie möglicherweise den folgenden Fehler:

"StatusCode": "ActiveWithProblems"
"StatusMessage": "Scaling plan has been created but failed to be applied to all resources. Problems were encountered for 1 resource. See scaling plan resources for the failure details."
Dieser Fehler tritt auf, wenn die beiden folgenden Bedingungen zutreffen:
  • Sie verwenden die von AWS verwaltete Skalierung für den Kapazitätsanbieter.
  • Der Auto-Scaling-Gruppe sind benutzerdefinierte Skalierungsrichtlinien angefügt, die nicht von Amazon ECS erstellt wurden.

Informationen zur Behebung dieses Fehlers finden Sie unter Vermeiden des ActiveWithProblems-Fehlers. Wenn Sie die verwaltete Skalierung aktivieren, verwaltet Amazon ECS die Abskalierungs- und Aufskalierungs-Aktionen der Auto-Scaling-Gruppe mit Auto-Scaling-Skalierungsplänen. Es ist eine bewährte Methode, immer eine neue Auto-Scaling-Gruppe zu erstellen und diese Gruppe an den Kapazitätsanbieter anzufügen.

Die Auto-Scaling-Gruppe hat die Container-Instance gelauncht, kann dem Cluster jedoch nicht beitreten

Ihre Container-Instances sind vor Abskalierung geschützt

Wenn Sie den verwalteten Beendigungsschutz bei der Konfiguration des Kapazitätsanbieters aktiviert haben, verhindert Amazon ECS, dass die Amazon-EC2-Instances in einer Auto-Scaling-Gruppe, die Aufgaben enthalten, während einer Abskalierungs-Aktion beendet werden.

Um sicherzustellen, dass die Auto-Scaling-Gruppe alte Instances beenden kann, wenn Sie die gewünschte Kapazität ändern, gehen Sie wie folgt vor:

Weitere Informationen finden Sie unter Wie behebe ich den Fehler „Der verwaltete Beendigungsschutz für den Kapazitätsanbieter ist ungültig“ in Amazon ECS?

Der Kapazitätsanbieter steckt im Zustand „fehlgeschlagen“ fest

Es ist eine bewährte Methode, eine neue Auto-Scaling-Gruppe zu erstellen, die Sie mit Ihrem Kapazitätsanbieter verwenden können, anstatt eine vorhandene Gruppe zu verwenden. Wenn Sie eine vorhandene Auto-Scaling-Gruppe verwenden, haben Sie möglicherweise Probleme bei der Verwendung des Kapazitätsanbieters. Dies liegt daran, dass die Amazon-EC2-Instances im running-Zustand, die der vorhandenen Gruppe zugeordnet und in einem Amazon-ECS-Cluster registriert sind, möglicherweise nicht ordnungsgemäß beim Kapazitätsanbieter registriert sind.

Um den Status des Kapazitätsanbieters anzuzeigen, führen Sie den AWS-CLI-Befehl describe-capacity-providers aus.

Überprüfen Sie außerdem CloudTrail-Ereignisse und suchen Sie nach Fehlern im Zusammenhang mit der CreateCapacityProvider-API.

Die Auto-Scaling-Gruppe steckt in einer Schleife der Aufskalierung und Abskalierung fest

Wenn der Metrikwert, der in der Skalierungsrichtlinie für Ihren ECS-Service angegeben ist, Spitzen erreicht, wird die Auto-Scaling-Gruppe aufskaliert und Instances nach Bedarf gelauncht. Wenn der Wert der Metrik jedoch nach dem plötzlichen Anstieg sinkt, versucht die Auto-Scaling-Gruppe, die Instances abzuskalieren. Wenn der Metrikwert innerhalb eines kurzen Zeitraums mehrmals schwankt, bleibt die Auto-Scaling-Gruppe möglicherweise in einer Schleife des Aufskalierens und Abskalierens stecken. Um dieses Problem zu vermeiden, müssen Sie den Schwellenwert der Metrik in der Skalierungsrichtlinie entsprechend Ihrer Workload definieren.