Neuer Service von Amazon Web Services: EC2 Container Service

Amazon EC2 Container Service
Keine Kommentare

EC2 Container Service (ECS) ist ein neuer Service von Amazon Web Services (AWS). ECS ist ein hoch skalierbarer, leistungsfähiger Container-Management-Service, der Docker-Container unterstützt. Anwendungen können auf einem von Amazon-EC2-Instanzen verwalteten Cluster betrieben und verwaltet werden. Amazons neuer Container-Service tritt dabei in Konkurrenz zu Docker Swarm, Kubernetes und Mesos auf.

Amazons EC2 Container Service operiert auf demselben Layer wie Docker Swarm oder Kubernetes, wird aber wie ein Service bereitgestellt: So muss keine eigene Cluster-Management-Struktur installiert und betrieben werden. Im Gegensatz zu Googles Container-Engine, die prinzipiell ein Pendant zu ECS ist, basiert diese aber nicht auf Kubernetes. Über API-Befehle lassen sich Docker-aktivierte Anwendungen starten und beenden sowie der Zustand des Clusters abfragen. Anhand der eigenen Verfügbarkeitserfordernisse kann die Platzierung von Containern im Cluster geplant werden.

ECS-Architektur

ECS ist kein Black-Box-Service, sondern startet Entwickler-eigene EC2-Server-Instanzen, auf die SSH angewendet werden kann. Außerdem lassen sie sich genauso managen wie jeder andere EC2-Server. Die EC2-Server in einem Cluster betreiben einen ECS-Agent, der für die Registrierung des Hosts mit dem ECS-Service verantwortlich ist. Zudem verwaltet er eingehende Anfragen für Container-Deployments oder Lifecycle-Events, wie zum Beispiel das Starten oder Stoppen des Containers. Der golang-Code für ECS-Agent steht auf GitHub zum Download bereit.

Wie Amazons CTO Werner Vogel in einem Blogpost bekanntgab, teilt sich der zentralisierte Service logistisch zwischen Cluster-Manager und Scheduling-Engine auf:

Amazon EC2 Container Service

Screenshot: http://bit.ly/1M9gGiv

Services und Tasks

Innerhalb von ECS werden Docker-Workloads als Tasks beschrieben. Ein Task besteht im Prinzip aus einer oder mehreren Container-Definitionen, die die Namen der zu startenden Container sowie relevante Port- und Laufwerk-Volume-Informationen beinhalten. Läuft der Task, starten die zugrundeliegenden Container – enden alle Container-Prozesse, endet auch der Task. Tasks können entweder einen short-event-driven-Datenverarbeitungsprozess oder einen Webserver-Prozess darstellen. Wichtig ist, dass alle Container für einen vorgegebenen Task auf demselben Rechner laufen müssen.

Services hingegen sind Requests, die eine zuvor festgelegte Anzahl von Instanzen für einen bestimmten Task starten. Geht man vom zuvor beschriebenen Task auf dem NGINX-Webserver-Container aus, könnte beispielsweise ein Service definiert werden, der fordert, dass drei oder mehr Instanzen des Webserver-Tasks im Cluster laufen müssen. Über Services stellt ECS seine Ausfallsicherheit bereit: Wird ein Service gestartet, überwacht dieser, dass der zugrundeliegende Task mit der korrekten Anzahl von Instanzen und den zugrundeliegenden Containern läuft. Stoppt der Task oder wird unresponsiv oder schädlich, fordert der Service weitere neue Tasks an, die die ausgefallenen Funktionen übernehmen.

Warum Container-Orchestrierung?

Ein Orchestration-Layer ist ein wichtiger Bestandteil für den Einsatz und die Funktion von Container-basierten Applikationen. Zuerst müssen Container in Cluster verpackt werden, um sie skalierbar zu machen. Mit dem Anwachsen der Arbeitslast müssen dann immer mehr Container hinzugefügt und horizontal über Server skaliert werden, um mehr von der Arbeitslast zu verarbeiten.

Zum zweiten sollten Container auch für Beständigkeit und Ausdauer in Cluster verpackt werden. Versagt ein Host oder Container, sollte der Container zum Beispiel auf einem funktionierenden Host wiederhergestellt werden – ohne dass das System beeinflusst wird.

Und schließlich bieten die Tools im Orchestration-Layer einen wichtigen Funktionsbereich, den sich Entwickler sonst von zugrundeliegenden Geräten nehmen müssen. Denn in einer containerisierten Welt sollten sich Entwickler keine Gedanken um Hosts machen müssen – es sollte nur wichtig sein, dass die gewünschte Anzahl an Containern besteht und läuft:

Orchestration and clustering tools do this for us, allowing us to simply deploy the container to the cluster, and let the supporting software work out the optimal scheduling of containers onto hosts.

Stabile und performante Cluster-Systeme zu erstellen, ist relativ kompliziert – deswegen setzen Tools wie Kubernetes und Swarm an der Stelle an und übernehmen diese Aufgabe. EC2 Container Service führt das Ganze noch einen Schritt weiter und übernimmt Setup, Programmstart und Verwaltung des Orchestration-Layers.

ECS – PaaS-ähnliche Plattform für Container

EC2 Container Service unterstützt zudem auch Elastic Load Balancing (ELB), Autoscaling und Container Links. Außerdem ist ECS komplett in AWS Command Line Interface integriert. Wie man Container mit ECS deployet, erklärt Benjamin Wootton ausführlich im zugehörigen Blogpost.

ECS und sein Pendant Google Container Engine sind beide wichtige Komponenten des Container-Ökosystems. Während das Entwickeln von Code und das Deployen innerhalb von Containern relativ leicht ist, ist das Betreiben von Orchestration-Layern wie Kubernetes oder Mesos schon schwieriger. ECS bietet eine einfache, zugängliche, stabile, PaaS-ähnliche Plattform für Container, die viele neue Möglichkeiten eröffnet. Zu bedenken ist aber, dass es sich bei ECS um ein relativ neues Produkt handelt, das noch nicht komplett mit allen Funktionen ausgestattet ist. Im Video erhält man einen Überblick über die Features von ECS:

Aufmacherbild: Stack of Cargo Containers at the docks von Shutterstock / Urheberrecht: Snw

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -