Amazon-ECS-Services - Amazon Elastic Container Service

Amazon-ECS-Services

Ein Amazon-ECS-Service ermöglicht Ihnen die das gleichzeitige Ausführen und Aufrechterhalten einer festgelegten Anzahl von Instances einer Aufgabendefinition in einem Amazon ECS-Cluster. Wenn eine Ihrer Aufgaben aus irgendeinem Grund fehlschlägt oder angehalten wird, startet der Amazon ECS-Service Scheduler eine andere Instance Ihrer Aufgabendefinition, um die Aufgabe zu ersetzen und die gewünschte Anzahl von Aufgaben im Service aufrechtzuerhalten.

Zusätzlich zur Aufrechterhaltung der gewünschten Anzahl von Aufgaben in Ihrem Service können Sie Ihren Service optional hinter einem Load Balancer ausführen. Der Load Balancer verteilt den Datenverkehr über die mit dem Service verbundenen Aufgaben.

Service-Scheduler-Konzepte

Der Service-Scheduler eignet sich ideal für lang laufende, zustandslose Services und Anwendungen. Der Service Scheduler stellt sicher, dass die von Ihnen angegebene Einplanungsstrategie einhalten wird, und plant Aufgaben neu ein, wenn eine Aufgabe fehlschlägt (zum Beispiel, wenn die zugrundeliegende Infrastruktur aus irgendeinem Grund fehlschlägt). Mit Aufgabenplatzierungsstrategien und -bedingungen können Sie festlegen, wie der Scheduler Aufgaben platziert und beendet. Wenn eine Aufgabe in einem Service gestoppt wird, startet der Scheduler eine neue Aufgabe, die diese ersetzt. Dieser Vorgang wird fortgesetzt, bis Ihr Service die Anzahl der gewünschten ausgeführten Aufgaben basierend auf der Planungsstrategie (auch als Servicetyp bezeichnet) erreicht, die der Service verwendet.

Der Service-Scheduler beinhaltet eine Logik, die eine Begrenzung einführt, wie oft Aufgaben neu gestartet werden, wenn sie wiederholt nicht gestartet werden können. Wenn eine Aufgabe angehalten wird, ohne dass sie in einen RUNNING-Status übergegangen ist, der anhand des startedAt-Zeitstempels der Aufgabe bestimmt wird, beginnt der Service-Scheduler, inkrementell die Startversuche zu verzögern, und gibt eine Service-Ereignis-Meldung aus. Dieses Verhalten verhindert, dass unnötige Ressourcen für fehlgeschlagene Aufgaben verwendet werden, womit Sie die Gelegenheit haben, das Problem zu lösen. Nachdem der Service aktualisiert wurde, setzt der Service-Scheduler sein normales Verhalten fort. Weitere Informationen erhalten Sie unter Service-Drosselungslogik und Service-Ereignismeldungen.

Es gibt zwei Strategien für Service-Scheduler:

  • REPLICA: Die Replica-Einplanungsstrategie platziert und die gewünschte Anzahl von Aufgaben in Ihrem Cluster und behält sie bei. Standardmäßig verteilt der Service Scheduler Aufgaben über Availability Zones. Mit Aufgabenplatzierungsstrategien und -bedingungen können Sie festlegen, wie Aufgaben platziert und beendet werden. Weitere Informationen finden Sie unter Replica.

  • DAEMON: Die Daemon-Einplanungsstrategie stellt genau eine Aufgabe auf jeder aktiven Container-Instance bereit, die alle von Ihnen in Ihrem Cluster angegebenen Platzierungsbedingungen für die Aufgaben erfüllt. Der Serviceplaner wertet die Aufgabenplatzierungsbedingungen für laufende Aufgaben aus und stoppt Aufgaben, die die Platzierungsbedingungen nicht erfüllen. Bei Verwendung dieser Strategie ist es nicht erforderlich, eine gewünschte Anzahl von Aufgaben oder eine Aufgabenplatzierungsstrategie anzugeben oder Auto Scaling-Richtlinien zu verwenden. Weitere Informationen finden Sie unter Daemon.

    Anmerkung

    Fargate-Aufgaben unterstützen die DAEMON-Einplanungsstrategie nicht.

Daemon

Die Daemon-Planungsstrategie stellt genau eine Aufgabe auf jeder aktiven Container-Instance bereit, die alle Platzierungseinschränkungen für die Aufgaben in Ihrem Cluster erfüllt. Der Service Scheduler wertet auch die Aufgabenplatzierungseinschränkungen für ausgeführte Aufgaben aus und stoppt Aufgaben, die die Platzierungsbedingungen nicht erfüllen. Bei Verwendung dieser Strategie ist es nicht erforderlich, eine gewünschte Anzahl von Aufgaben oder eine Aufgabenplatzierungsstrategie anzugeben oder Auto Scaling-Richtlinien zu verwenden.

Amazon ECS reserviert Container-Instance-Computing-Ressourcen, einschließlich CPU, Arbeitsspeicher und Netzwerkschnittstellen für die Daemon-Aufgaben. Wenn Sie einen Daemon-Dienst auf einem Cluster mit anderen Replikatdiensten starten, priorisiert Amazon ECS die Daemon-Aufgabe als erste Aufgabe, die auf den Instances gestartet wird, und als letzte Aufgabe, die beendet werden soll. Diese Strategie stellt sicher, dass Ressourcen nicht von ausstehenden Replikataufgaben verwendet werden und für die Daemon-Aufgaben verfügbar sind.

Der Daemon Service Scheduler platziert keine Aufgaben auf Instances mit dem Status DRAINING. Wenn eine Container-Instance in den Status DRAINING übergeht, werden die darauf ausgeführten Daemon Aufgaben beendet. Der Service Scheduler überwacht auch, ob Ihrem Cluster neue Container-Instances hinzugefügt werden, und fügt diesen die Daemon-Aufgaben hinzu.

Wenn eine Bereitstellungskonfiguration angegeben ist, muss der Parameter für den maximalen Prozentsatz gleich 100 sein. Der Standardwert für einen Daemon-Service für maximumPercent ist 100 %. Der Standardwert für einen Daemon-Service für minimumHealthyPercent ist 0 %.

Eine Änderung der Platzierungsbedingungen für den Daemon-Service erfordert einen Service-Neustart, damit die Änderungen wirksam werden. Amazon ECS aktualisiert dynamisch die Ressourcen, die für qualifizierende Instances für die Daemon-Aufgabe reserviert sind. Bei vorhandenen Instances versucht der Scheduler, die Aufgabe auf der Instance zu platzieren.

Eine Änderung der Vorgangsgröße oder Containerressourcenreservierung in der Vorgangsdefinition startet eine Bereitstellung des Dienstes. Amazon ECS nimmt die aktualisierten CPU- und Speicherreservierungen für den Daemon auf und sperrt diese Kapazität für die Daemon-Aufgabe.

Wenn für einen der oben genannten Fälle nicht genügend Ressourcen vorhanden sind, geschieht Folgendes:

  • Die Aufgabenplatzierung schlägt fehl.

  • Ein CloudWatch-Ereignis wird generiert.

  • Amazon ECS versucht weiterhin, die Aufgabe für die Instance zu planen, indem er darauf wartet, dass Ressourcen verfügbar sind.

  • Amazon ECS gibt alle reservierten Instances frei, die die Platzierungseinschränkungskriterien nicht mehr erfüllen, und stoppt die entsprechenden Daemon-Aufgaben.

Die Daemon-Scheduling-Strategie kann in folgenden Fällen verwendet werden:

  • Ausführen von Anwendungscontainern

  • Ausführen von Support-Containern für Protokollierungs-, Überwachungs- und Tracing-Aufgaben

Aufgaben, die den Starttyp Fargate oder die Bereitstellungs-Controller-Typen CODE_DEPLOY oder EXTERNAL verwenden, unterstützen die Daemon-Scheduling-Strategie nicht.

Anmerkung

Der Daemon-Service Scheduler unterstützt die Verwendung von Classic Load Balancers nicht.

Wenn der Service-Scheduler Aufgaben stoppt, versucht er, eine Ausgewogenheit in den Availability Zones in Ihrem Cluster herzustellen. Der Planer verwendet die folgende Logik:

  • Wenn eine Platzierungsstrategie definiert ist, wählen Sie mit dieser Strategie die zu beendenden Aufgaben aus. Wenn für einen Service beispielsweise eine Availability Zone-Verteilungsstrategie definiert ist, dann wird eine Aufgabe ausgewählt, bei der für die übrigen Aufgaben eine optimale Verteilung belassen wird.

  • Wenn keine Platzierungsstrategie definiert ist, bewahren Sie mit der folgenden Logik eine ausgewogene Verteilung über die Availability Zones in Ihrem Cluster:

    • Sortieren Sie die gültigen Container-Instances so, dass den Instances mit der größten Anzahl laufender Aufgaben für diesen Service in ihrer jeweiligen Availability Zone Priorität erteilt wird. Wenn beispielsweise Zone A über eine ausgeführte Serviceaufgabe verfügt und die Zonen B und C jeweils über zwei, werden Container-Instances in Zone B oder C optimal zum Beenden erachtet.

    • Stoppen Sie die Aufgabe auf einer Container-Instance in einer optimalen Availability Zone (basierend auf den vorherigen Schritten), wobei Sie die Container-Instances mit der größten Anzahl an ausgeführten Aufgaben für diesen Service bevorzugen sollten.

Replica

Die Planungsstrategie replica platziert und bewahrt die gewünschte Anzahl von Aufgaben in Ihrem Cluster.

Beim Erstellen eines Services, der Aufgaben auf Fargate ausführt, versucht der Service-Scheduler das Gleichgewicht zwischen Availability Zones zu wahren, wenn er neue Aufgaben startet oder ausgeführte Aufgaben anhält. Es ist nicht erforderlich, Strategien oder -Beschränkungen zur Aufgabenstellung anzugeben.

Wenn Sie einen Service erstellen, der Aufgaben auf EC2-Instances ausführt, können Sie optional Strategien und Beschränkungen zur Aufgabenplatzierung festlegen, um Entscheidungen über die Platzierung von Aufgaben anzupassen. Wenn keine Strategien oder Einschränkungen für die Aufgabenplatzierung angegeben werden, verteilt der Service Scheduler die Aufgaben standardmäßig über Availability Zones. Der Scheduler verwendet die folgende Logik:

  • Ermitteln Sie, welche der Container-Instances in Ihrem Cluster die Aufgabendefinition Ihres Service unterstützen kann (sie verfügen beispielsweise über den erforderlichen CPU und Speicher sowie über die erforderlichen Ports und Container-Instance-Attribute).

  • Bestimmen Sie, welche Container-Instances alle Platzierungseinschränkungen erfüllen, die für den Service definiert sind.

  • Wenn eine Platzierungsstrategie definiert ist, verwenden Sie diese Strategie zur Auswahl einer Instance aus den verbleibenden Kandidaten.

  • Wenn keine Platzierungsstrategie definiert ist, verteilen Sie Aufgaben mithilfe der folgenden Logik ausgewogen über die Availability Zones in Ihrem Cluster:

    • Sortieren Sie die gültigen Container-Instances so, dass den Instances mit der niedrigsten Anzahl laufender Aufgaben für diesen Service in ihrer jeweiligen Availability Zone Priorität erteilt wird. Wenn beispielsweise Zone A über eine ausgeführte Serviceaufgabe verfügt und die Zonen B und C jeweils über keine, werden gültige Container-Instances in Zone B oder C als optimal für eine Platzierung erachtet.

    • Platzieren Sie die neue Serviceaufgabe auf einer gültigen Container-Instance in einer optimalen Availability Zone (basierend auf den vorherigen Schritten), wobei die Container-Instances mit der geringsten Anzahl an ausgeführten Aufgaben für diesen Service bevorzugt werden.

Zusätzliche Service-Konzepte

  • Sie können Ihren Service optional auch hinter einem Load Balancer ausführen. Weitere Informationen finden Sie unter Service-Load Balancing.

  • Sie können optional eine Bereitstellungskonfiguration für Ihren Service festlegen. Eine Bereitstellung wird durch Aktualisierung der Aufgabendefinition oder der gewünschten Zahl eines Services ausgelöst. Während einer Bereitstellung verwendet der Service Scheduler die Parameter mindestens fehlerfreie Prozentsatz und maximaler Prozentsatz, um die Bereitstellungsstrategie zu ermitteln. Weitere Informationen finden Sie unter Servicedefinitionsparameter.

  • Sie können Ihren Service optional so konfigurieren, dass er Amazon ECS-Service Discovery verwendet. Die Serviceerkennung verwendet Amazon Route 53 Auto-Namen-APIs, um DNS-Einträge für die Aufgaben Ihres Service zu verwalten und sie in Ihrem VPC erkennbar zu machen. Weitere Informationen finden Sie unter Service Discovery.

  • Wenn Sie einen Service löschen und dieser noch laufende Aufgaben enthält, für die eine Bereinigung erforderlich ist, ändert sich der Servicestatus von ACTIVE zu DRAINING und der Service ist nicht mehr in der Konsole oder in den ListServices-API-Operationen sichtbar. Nachdem alle Aufgaben entweder in den Status STOPPING oder STOPPED übergegangen ist, ändert sich der Servicestatus von DRAINING zu INACTIVE. Services im Status DRAINING oder INACTIVE können weiterhin mit der API-Operation DescribeServices angezeigt. In Zukunft werden jedoch INACTIVE-Services möglicherweise bereinigt und von der Amazon ECS-Datensatzverwaltung gelöscht. DescribeService-Aufrufe für diese Services geben dann einen ServiceNotFoundException-Fehler zurück.