Skalierungsrichtlinien für die Ziel-Nachverfolgung - Amazon ECS

Skalierungsrichtlinien für die Ziel-Nachverfolgung

Mit Skalierungsrichtlinien für die Zielverfolgung wählen Sie eine Metrik aus und legen einen Zielwert fest. Amazon-ECS-Service Auto Scaling erstellt und verwaltet CloudWatch-Alarme, die die Skalierungsrichtlinie auslösen, und berechnet die Skalierungsanpassung basierend auf dem metrischen Wert und dem Zielwert. Durch die Skalierungsrichtlinie werden so viele Service-Aufgaben wie erforderlich hinzugefügt oder entfernt, damit die Metrik auf oder nahe an dem Zielwert gehalten wird. Abgesehen davon, dass eine Skalierungsrichtlinie für die Ziel-Nachverfolgung die Metrik nahe an dem Zielwert hält, passt sie sich auch an die Schwankungen in der Metrik aufgrund eines schwankenden Lastmusters an und verringert schnelle Schwankungen der Anzahl der Aufgaben, die in Ihrem Service ausgeführt werden.

Überlegungen

Beachten Sie folgende Überlegungen:

  • Eine Skalierungsrichtlinie für die Ziel-Nachverfolgung geht davon aus, dass sie eine horizontale Skalierung nach oben vornehmen soll, wenn die angegebene Metrik über dem Zielwert liegt. Sie können keine Skalierungsrichtlinie für die Ziel-Nachverfolgung verwenden, um eine horizontale Skalierung nach oben vorzunehmen, wenn die angegebene Metrik unter dem Zielwert liegt.

  • Eine Skalierungsrichtlinie für die Ziel-Nachverfolgung nimmt keine Skalierung vor, wenn die angegebene Metrik unzureichende Daten aufweist. Es wird keine horizontale Skalierung nach unten vorgenommen, da unzureichende Daten nicht als geringe Auslastung interpretiert werden.

  • Möglicherweise werden Lücken zwischen den Datenpunkten für den Zielwert und die aktuelle Metrik angezeigt. Der Grund hierfür ist, dass Service Auto Scaling stets vorsichtig agiert, indem beim Ermitteln der hinzuzufügenden oder zu entfernenden Kapazität Auf- oder Abrundungen vorgenommen werden. Dadurch wird verhindert, dass zu wenig Kapazität hinzufügt oder zu viel Kapazität entfernt wird.

  • Um die Verfügbarkeit der Anwendung sicherzustellen, wird der Service schnellstmöglich proportional zur Metrik hochskaliert, jedoch etwas langsamer herunterskaliert.

  • Application Auto Scaling deaktiviert Scale-In-Prozesse, während Amazon ECS-Bereitstellungen ausgeführt werden. Scale-Out-Prozesse werden während einer Bereitstellung jedoch weiterhin ausgeführt, es sei denn, sie werden angehalten. Weitere Informationen finden Sie unter Automatische Skalierung und Bereitstellung von Diensten.

  • Sie können mehrere Skalierungsrichtlinien für die Ziel-Nachverfolgung für einen Amazon-ECS-Service erstellen, vorausgesetzt, dass diese alle verschiedene Metriken verwenden. Da Service Auto Scaling immer darauf ausgerichtet ist, Verfügbarkeit zu priorisieren, ist sein Verhalten davon abhängig, ob die Richtlinien für die Ziel-Nachverfolgung für die horizontale Skalierung nach oben oder nach unten bereit sind. Sofern Richtlinien für die Ziel-Nachverfolgung für die Skalierung nach oben bereit sind, findet eine Skalierung des Service nach oben statt. Eine Skalierung nach unten wird jedoch nur vorgenommen, wenn alle Richtlinien für die Ziel-Nachverfolgung (mit aktivierter Skalierung nach unten) zur Skalierung nach unten bereit sind.

  • Bearbeiten oder löschen Sie die CloudWatch-Alarme nicht, die das Service Auto Scaling für eine Skalierungsrichtlinie für die Zielverfolgung verwaltet. Service Auto Scaling löscht die Alarme automatisch, wenn Sie die Skalierungsrichtlinie löschen.

Anleitung: Autoskalierung eines Services mit Ziel-Nachverfolgung

Die folgenden Verfahren helfen Ihnen beim Erstellen eines Amazon ECS-Clusters und eines Services, der die Zielverfolgung verwendet, um automatisch basierend auf Bedarf aufwärts (und abwärts) zu skalieren.

In diesem Lernprogramm erstellen Sie unter Verwendung des Amazon ECS-Einrichtungsgegenständen einen Cluster und einen Service (der hinter einem Elastic Load Balancing-Load Balancer ausgeführt wird). Anschließend konfigurieren Sie eine Zielverfolgungsskalierungsrichtlinie, die Ihren Dienst automatisch basierend auf der aktuellen Anwendungslast skaliert, gemessen an der CPU-Auslastung des Dienstes (aus der Kategorie ECS, ClusterName, ServiceName in CloudWatch).

Wenn die CPU-Nutzung Ihres Service mehr als 75 % erreicht (also mehr als 75 % der für den Service reservierten CPU verwendet werden), löst der Hochskalierungsalarm Service Auto Scaling aus, damit Ihrem Service eine weitere Aufgabe hinzugefügt wird, um die erhöhte Auslastung zu bewältigen. Umgekehrt gilt: Wenn die durchschnittliche CPU-Auslastung Ihres Services für einen längeren Zeitraum unter die Zielauslastung fällt, löst ein Abwärtsskalierungsalarm eine Verringerung der gewünschten Anzahl des Services aus, um diese Clusterressourcen für andere Aufgaben und Dienste freizumachen.

Voraussetzungen

In diesem Lernprogramm wird davon ausgegangen, dass Sie Administratoranmeldeinformationen verwenden und dass Sie ein Amazon EC2-Schlüsselpaar in der aktuellen Region haben. Wenn Sie nicht über diese Ressourcen verfügen oder sich nicht sicher sind, können Sie sie unter Berücksichtigung der Schritte im Abschnitt Einrichtung für die Verwendung von Amazon ECS erstellen.

Schritt 1: Erstellen eines Clusters und eines Service

Erstellen Sie zunächst einen Cluster und einen Service mithilfe des Amazon ECS-Einrichtungsassistenten. Der Einrichtungsassistent sorgt dafür, dass die erforderlichen IAM-Rollen und für dieses Lernprogramm sowie eine Auto-Scaling-Gruppe für Ihre Container-Instances erstellt werden und erstellt einen Service, der hinter einem Load Balancer ausgeführt wird. Auch der Bereinigungsprozess ist bei Verwendung des Assistenten viel einfacher, da Sie den gesamten AWS CloudFormation-Stack in einem Schritt löschen können.

Für dieses Tutorial erstellen Sie einen Cluster mit der Bezeichnung service-autoscaling und einen Service mit der Bezeichnung sample-webapp.

Erstellen Sie Ihren Cluster und Service

  1. Öffnen Sie den Amazon ECS-Konsolen-Einrichtungsassistent unter https://console.aws.amazon.com/ecs/home#/firstRun.

  2. Wählen Sie in der Navigationsleiste die Region US East (N. Virginia) (USA Ost (Nord-Virginia)) aus.

  3. Wählen Sie unter Step 1: Container and Task (Schritt 1: Container und Aufgabe) für Container definition (Containerdefinition) sample-app aus.

  4. Belassen Sie unter Task definition (Aufgabendefinition) alle Standardoptionen und klicken Sie auf Next (Weiter).

  5. Klicken Sie unter Step 2: Service (Schritt 2: Service) für Load balancer type (Load Balancer-Typ) auf Application Load Balancer (Anwendungs-Load Balancer) und Next (Weiter).

    Wichtig

    Application Load Balancer verursachen Kosten, während sie in Ihren AWS-Ressourcen existieren. Weitere Informationen finden Sie unter Elastic Load Balancing Pricing.

  6. geben Sie unter Step 3: Cluster (Schritt 3: Cluster) für Cluster name (Cluster-Name) service-autoscaling ein und klicken Sie auf Next (Weiter).

  7. Überprüfen Sie Ihrer Auswahl und klicken Sie dann auf Create (Erstellen).

    Sie werden zu einer Seite Launch Status (Startstatus) weitergeleitet, die den Status Ihres Starts anzeigt und jeden Schritt des Prozesses beschreibt (dies kann einige Minuten dauern, während Ihre Cluster-Ressourcen erstellt und befüllt werden).

  8. Wenn Ihr Cluster und Service erstellt werden, klicken Sie auf View service (Service anzeigen).

Schritt 2: Konfigurieren von Service Auto Scalings

Nachdem Sie nun einen Cluster gelauncht und in diesem Cluster einen Service erstellt haben, der hinter einer Lastenverteilung ausgeführt wird, können Sie die automatische Skalierung für Services aktivieren, indem Sie eine Skalierungsrichtlinie für die Zielverfolgung erstellen.

So konfigurieren Sie grundlegende Service Auto Scaling-Parameter

  1. Auf der Seite Service: sample-app-service sollte Ihre Servicekonfiguration ähnlich aussehen wie die folgende Abbildung (obwohl die Revision der Aufgabendefinition und der Name des Load Balancers wahrscheinlich anders lauten). Wählen Sie Update aus, um den neuen Service zu aktualisieren.

    
                                Wählen Sie Ihre Konfigurationsoptionen aus
  2. Klicken Sie auf der Seite Update service (Service aktualisieren) auf Next step (Nächster Schritt), bis Sie Step 3: Set Auto Scaling (optional) (Schritt 3: Autoskalierung einrichten (optional)) erreichen.

  3. Wählen Sie unter Service Auto Scaling Configure Service Auto Scaling to adjust your service’s desired count (Konfigurieren Sie Service Auto Scaling, um die gewünschte Anzahl Ihres Services anzupassen) aus.

  4. Geben Sie unter Minimum number of tasks (Mindestanzahl an Aufgaben) 1 für die Untergrenze der Anzahl der Aufgaben an, die Service Auto Scaling verwenden kann. Die gewünschte Anzahl Ihres Services wird nicht automatisch unter diesem Betrag angepasst werden.

  5. Das Feld Desired number of tasks (Gewünschte Aufgabenanzahl) wird mit dem Wert vorausgefüllt, den Sie zuvor eingegeben haben. Dieser Wert muss zwischen der Mindest- und Höchstanzahl von Aufgaben liegen, die auf dieser Seite angeben sind. Lassen Sie diesen Wert auf 1.

  6. Geben Sie unter Maximum number of tasks (Höchstanzahl an Aufgaben) 2 für die Obergrenze der Anzahl der Aufgaben an, die Service Auto Scaling verwenden kann. Die gewünschte Anzahl Ihres Services wird nicht automatisch über diesem Betrag angepasst.

  7. Wählen Sie für IAM role for Service Auto Scaling (IAM-Rolle für Service Auto Scaling) die ecsAutoscaleRole. Wenn diese Rolle nicht vorhanden ist, wählen Sie Create new role (Neue Rolle erstellen), damit die Konsole sie für Sie erstellt.

So konfigurieren Sie Skalierungsrichtlinien für die Zielnachverfolgung für Ihren Service:

  1. Klicken Sie auf Add scaling policy (Skalierungsrichtlinie hinzufügen), um Ihre Skalierungsrichtlinie zu konfigurieren.

  2. Aktualisieren Sie auf der Seite Add policy (Richtlinie hinzufügen) die folgenden Felder:

    1. Wählen Sie für Scaling policy type (Typ der Skalierungsrichtlinie) Target tracking (Ziel-Nachverfolgung) aus.

    2. Geben Sie unter Policy name (Richtlinienname) TargetTrackingPolicy ein.

    3. Wählen Sie unter ECS service metric (ESC-Service-Metrik) ECSServiceAverageCPUUtilization aus.

    4. Geben Sie unter Target value (Zielwert) 75 ein.

    5. Geben Sie unter Scale-out cooldown period (Ruhephase vor Hochskalieren) 60 ein. Eine Hochskalierungsaktivität erhöht die Anzahl der Aufgaben Ihres Services. Während die Ruhephase wirksam ist, wird die Kapazität, die durch das vorherige Skalierungsereignis nach oben (Scale-Out) hinzugefügt wurde, das die Ruhephase initiiert hat, als Teil der gewünschten Kapazität für das nächste Skalierungsereignis nach oben berechnet. Der Zweck ist eine kontinuierliche (jedoch nicht exzessive) Erweiterung.

    6. Geben Sie unter Scale-in cooldown period (Ruhephase vor Herunterskalieren) 60 ein. Eine Abwärtsskalierungsaktivität reduziert die Anzahl der Aufgaben Ihres Services. Die Ruhephase wird verwendet, um nachfolgende Anforderungen zum Herunterskalieren so lange zu blockieren, bis sie abgelaufen ist. Der Zweck ist eine vorsichtige Verkleinerung, um die Verfügbarkeit Ihrer Anwendung zu schützen. Wenn während der Ruhephase nach einer Abwärts-Skalierung jedoch ein anderer Alarm eine Aufwärts-Skalierung auslöst, skaliert das Auto Scaling Ihr skalierbares Ziel sofort.

    7. Wählen Sie Save (Speichern) aus.

  3. Klicken Sie auf Next step.

  4. Überprüfen Sie Ihre Auswahl und klicken Sie dann auf Update Service (Service aktualisieren).

  5. Wenn die Aktualisierung Ihres Service-Status abgeschlossen ist, wählen Sie View Service aus.

Schritt 3: Auslösen einer Skalierung

Nachdem Ihr Service mit Service Auto Scaling konfiguriert wurde, können Sie eine Skalierung auslösen, indem Sie die CPU-Nutzung des Service in den Status ALARM versetzen. Da es sich bei dem Beispiel in dieser Anleitung um eine Webanwendung handelt, die hinter einem Load Balancer ausgeführt wird, können Sie (mit dem Dienstprogramm "ApacheBench") Tausende HTTP-Anforderungen an Ihren Service senden, damit die CPU-Nutzung des Service über den Schwellenwert hochgetrieben wird. Aufgrund dieser Spitzenauslastung müsste der Alarm ausgelöst werden, der wiederum eine Skalierung auslöst, um Ihrem Service eine Aufgabe hinzuzufügen.

Nachdem das Dienstprogramm „ApacheBench” die Anforderungen bearbeitet hat, müsste die CPU-Nutzung des Service unter Ihren Schwellenwert von 75 % fallen, wodurch eine Abwärtsskalierung ausgelöst wird, durch die wieder die gewünschte Anzahl von 1 für den Service erreicht wird.

Auslösen einer Skalierungsaktivität für Ihren Service

  1. Wählen Sie auf der Hauptseite Ihres Service in der Konsole den Namen des Load Balancers aus, um seine Details in der Amazon EC2-Konsole anzuzeigen. Sie brauchen den DNS-Namen des Load Balancers, der etwa wie folgt aussehen sollte: EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com.

  2. Verwenden Sie das Dienstprogramm ApacheBench (ab), um in einem kurzen Zeitraum Tausende von HTTP-Anfragen an Ihren Load Balancer zu stellen.

    Anmerkung

    Dieser Befehl ist standardmäßig auf Mac OS installiert und ist auch für viele Linux-Distributionen verfügbar. Sie können beispielsweise ab auf Amazon Linux mit dem folgenden Befehl installieren:

    $ sudo yum install -y httpd24-tools

    Führen Sie den folgenden Befehl aus, womit Sie den DNS-Namen Ihres Load Balancers ersetzen.

    $ ab -n 100000 -c 1000 http://EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com/
  3. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  4. Klicken Sie im linken Navigationsbereich auf Alarms (Alarme).

  5. Warten Sie, bis Ihre ab-HTTP-Anfragen den Heraufskalierungsalarm in der CloudWatch-Konsole auslösen. Sie sollten sehen, wie Ihr Amazon-ECS-Service hinaufskaliert, und eine Aufgabe zur gewünschten Anzahl Ihrer Services hinzugefügt wird.

  6. Kurz nachdem Ihre ab-HTTP-Anfragen abgeschlossen sind, (zwischen 1 und 2 Minuten), sollte Ihr Herunterskalierungsalarm ausgelöst werden und die Herunterskalierungsrichtlinie die gewünschte Anzahl Ihres Service wieder auf 1 reduzieren.

Schritt 4: Nächste Schritte

Gehen Sie zum nächsten Schritt, wenn Sie die grundlegende Infrastruktur löschen möchten, die Sie gerade für dieses Lernprogramm erstellt haben. Andernfalls können Sie diese Infrastruktur als Grundlage verwenden und die folgenden Aktionen ausprobieren:

  • Um diese Skalierungsaktivitäten über die Amazon ECS-Konsole anzuzeigen, wählen Sie die Registerkarte Events (Ereignisse) des Services. Wenn Skalierungsereignisse auftreten, werden hier Informationsmeldungen angezeigt. Zum Beispiel:

    Message: Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy
  • Nachdem Sie CloudWatch Container Insights und die dazugehörigen erfassten Amazon ECS-Metriken eingerichtet haben, können Sie diese Metriken in den automatischen Dashboards von CloudWatch anzeigen. Weitere Informationen finden Sie unter Einführung in Amazon CloudWatch Container Insights für Amazon ECS im AWS-Compute Blog.

  • Erfahren Sie, wie Sie CloudWatch-Container Insights einrichten. Es fallen zusätzliche Gebühren an. Weitere Informationen finden Sie unter Amazon ECS CloudWatch Container-Einblicke und Aktualisieren der Cluster-Einstellungen.

Schritt 5: Bereinigen

Wenn Sie dieses Lernprogramm abgeschlossen haben, können Sie sich entscheiden, dass Cluster, Auto-Scaling-Gruppe, Load Balancer, Skalierungsrichtlinie für die Zielverfolgung und CloudWatch-Alarme beibehalten werden. Wenn Sie diese Ressourcen jedoch nicht aktiv verwenden, sollten Sie sie bereinigen, damit Ihrem Konto keine unnötigen Gebühren berechnet werden.

So löschen Sie Ihren Cluster:

  1. Öffnen Sie die Amazon ECS-Konsole unter https://console.aws.amazon.com/ecs/.

  2. Wählen Sie im linken Navigationsbereich die Option Cluster aus.

  3. Wählen Sie auf der Seite Clusters (Cluster) den Cluster service-autoscaling aus.

  4. Klicken Sie auf Delete Cluster (Cluster löschen) und Delete (Löschen). Es kann einige Minuten dauern, bis der Cluster-AWS CloudFormation-Stack das Löschen abgeschlossen hat.