Wie man mit Auto-Scaling-Container-Bereitstellungen auf AWS ECS

0
38

AWS Elastic Container Service (ECS) ist eine Rechen-engine, die speziell entwickelt für Docker-Container. Sie können es verwenden, um die Bereitstellung von Containern mit zugrunde liegenden EC2-instances, oder führen Sie eine server-unabhängige Bereitstellung auf Fargate.

Was Ist ECS?

Die grundsätzliche Verwendung von ECS ist ziemlich einfach. Anstatt auf die Administration von Linux-Servern, geben Sie einfach es ein Docker-container, wählen Sie, wie viel Rechenleistung Sie wollen, es zu geben, und ihn an der Arbeit. ECS übernimmt die schmutzige Arbeit zu finden, das Metall, um es zu laufen. Standardmäßig läuft es serverlose mit Fargate, obwohl Sie können Optional wählen, ob Sie Ihre Container, die auf EC2-Instanzen und behalten Sie volle Kontrolle über Sie.

Wenn Sie möchten, um updates, die Sie einfach aktualisieren Sie den container im container, – Registrierung und-trigger ein update für ECS. Automatisieren Sie den gesamten Prozess mit CodePipeline, die bauen Ihre container von Quell-und roll-out ein blau/grün-Bereitstellung auf ECS.

ECS kann auch einfach automatisch skaliert mit einem einzigen Umschalten, im Vergleich zu EC2, das dauert einige zusätzliche Einstellungen vorgenommen werden. Wenn Sie wählen, um diese Funktion zu aktivieren, ECS wird die automatische Bereitstellung von neuen Containern um der Nachfrage zu entsprechen, wenn die CPU-Nutzung, Speicher-Nutzung, oder andere Alarme hoch bekommen. Mit auto-scaling, müssen Sie sich nie sorgen zu machen über den server aktualisieren, auf eine höhere Klasse, oder manuell bereitstellen mehrerer von Ihnen. Das Gegenteil ist auch wahr—Ihre Anwendung kann die Skala nach unten, während off Stunden, sparen Sie Geld in den Prozess.

Soweit Preisgestaltung geht, es gibt keine zusätzlichen Gebühren für die EC2-Start-Modell. Sie zahlen nur für die zugrunde liegenden Instanzen. Für Fargate, die Gebühr wird berechnet basierend auf der Anzahl der vCPUs und Arbeitsspeicher angefordert. Wenn Sie die zahlen, Fargate kommt zu 20% teurer, auf dem Papier. Dies ist jedoch durch die Tatsache ausgeglichen, dass Fargate-Implementierungen (wenn richtig konfiguriert) wird nur genau so viel Ressourcen, wie Sie benötigen, optimiert so die Kosten durchaus ein bit. Fargate unterstützt auch Spot-Instances, die sparen Sie eine Tonne Geld über EC2 und machen Fargate die bevorzugte Start-Methode in jedem Fall nicht erforderlich ist, direkten Zugriff auf die zugrunde liegenden server aus irgendeinem Grund.

Einrichten von Docker und Schieben, um ECR

Um den container, ECS, müssen Sie schieben Sie es in ein repository. Sie können Docker-hub oder eigene registry-server, aber AWS bietet eine eigene Lösung mit Elastic Container Registry. Sie können push-Container hier, und haben Sie privat zu Ihrem AWS-Konto, und leicht zugänglich von anderen Diensten wie ECS und CodePipeline.

Den Kopf über die ECR-Management-Konsole und erstellen Sie eine neue repository. Der repository-URI, hängt von Ihrem AWS-Konto-ID—Sie können kopieren Sie es unter dem “URI” – Spalte.

Speichern Sie das folgende Skript als updateECR.sh neben Ihrem Dockerfile. Ersetzen Sie das TAG-und REPO-Variablen mit den korrekten Werten.

TAG=”docker-test”
REPO=”ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/”$TAG”:die Letzte”

aws ecr-get-login-Passwort | Andockfenster login –username AWS –Passwort von stdin, $REPO
docker build-t $ – TAG .
docker-tag $TAG:die Letzte $REPO
docker push – $REPO

Dieses Skript ausgeführt wird anmelden, um ECR, erstellen Sie Ihre container, markieren Sie Sie, und schieben Sie es an Ihrem repository. Wenn Sie die Liste aktualisieren, sollten Sie Ihre container:

Bereitstellung auf ECS

Starten Sie einen container auf ECS, benötigen Sie zwei Dinge:

  • Eine “Task Definition”, ” enthält Metadaten über die Behälter selbst—die Häfen ausgesetzt sind, wie viel Speicher zu reservieren Container, etc. Sie können mehrere Container in einer einzigen Aufgabenstellung, wenn Ihre Anwendung mehr als eine.
  • Ein “Service”, die für eine Bereitstellung einer task definition, die die Vernetzung zugeordnet, und der auto-scaling-Einstellungen. Sie können die Gruppe mehrere Dienste zusammen in einer einzigen “Cluster.”

Sie müssen, um die Aufgabenstellung zunächst, so erstellen Sie eines über den “Task-Definitionen” in der Seitenleiste.

Geben Sie einen Namen ein, und geben Sie die Aufgabe Speicher und vCPU Größe. Halten Sie im Verstand, können Sie immer erstellen Sie mehrere Container auf und verbinden Sie zusammen mit einem Load Balancer. Wenn Sie planen, über die Verwendung von auto-scaling, werden Sie wollen, zu denken, dieser Wert als die Einheit, die Größe der einzelnen container—anstatt bereitstellen einer eine einzelne 16 vCPU-container, die Sie wählen könnten, bereitstellen acht 2 vCPU-Container.

Weiter, klicken Sie auf “Add Container” zu definieren die Container dieser Aufgabenstellung zugreifen. Fügen Sie den URI Ihre Docker-container in ECR. Sie können auch soft – und hard-Speicher-Grenzen und öffnen von ports (nur für EC2-Start-Typen).

Wenn das einmal erstellt wurde, können Sie Services bereitstellen, mit dieser definition. Gehen Sie zu “Clustern” und erstellen Sie einen neuen cluster, wenn entweder die Fargate-oder EC2-je nach Vorliebe. Optional können Sie auswählen, ob Sie eine neue VPC für dieses cluster, oder stellen Sie es in Ihrem Standard-VPC.

Sie können die Aufgaben manuell ausführen, aber es ist besser, einen Dienst zu erstellen, Sie zu Bearbeiten. Erstellen Sie einen neuen Dienst aus der Cluster-Ansicht:

Geben Sie einen Namen ein, wählen Sie den Start-Typ, den Sie verwenden, und wählen Sie die task-definition, die Sie gerade erstellt haben. Hier können Sie die Anzahl der Aufgaben, die Sie möchten, um zu starten, und wie viele von Ihnen sollten gesund sein, zu jeder Zeit. Wenn eine Aufgabe fehlschlägt oder abgebrochen wird, wird ein neuer gedreht werden, um Sie zu ersetzen. Dies ist unabhängig von der auto-Skalierung.

Auf dem nächsten Bildschirm, wählen Sie Ihre VPC, und wählen Sie ein Subnetz bereitgestellt werden. Sie wollen auch auf öffnen Sie das Security-Gruppe, die Ihren Dienst verwenden, und öffnen Sie die ports, die notwendig für Ihre Anwendung zu funktionieren.

Sie können auch einen Lastenausgleich oder benutzerdefinierte DNS-Einstellungen von dieser Seite. Wenn Sie einen Load Balancer, werden Sie wollen, stellen Sie sicher, dass eine angemessene “Health Check ” Grace Period”, die verhindern, dass Aufgaben von gekennzeichnet wird als ungesund, während immer noch starten.

Auf dem nächsten Bildschirm können Sie konfigurieren, automatische Skalierung, die ist so einfach wie das drehen Sie es auf, können Sie angeben, wie viele Aufgaben Sie ausführen möchten, ist die maximale Zahl, die Sie sich leisten können, und das minimum, das ECS sollte nie unterschritten wird.

Sie können die target-tracking-scaling-Richtlinie zu TargetTrackingPolicy, und die ECSServiceAverageCPUUtilization Schwelle zu 75-80% oder so. Wenn Sie nicht möchten, verwenden Sie die-target-tracking-Richtlinie, können Sie manuell scale-up und down basierend auf CloudWatch-Alarme.

Einmal bereitgestellt, der service dauert eine minute oder so, um Feuer auf die ersten Container, und werden auf dem container-oder Load-Balancer ENI Endpunkt. Wenn Sie möchten, können Sie eine Elastische IP zu dieser ENI, die Sie konfigurieren können, mit Ihrer DNS, die für eine ständige Verbindung zum cluster.