Der beste Weg, um 100 identische Docker-Maschinen auf AWS zu starten?

7

Ich muss einige umfangreiche Tests auf einem System durchführen. Das System besteht aus 2 Hauptteilen: Manager und Knoten. Es wird nur einen Manager-Server geben, aber 100 Knoten. Sowohl der Manager als auch die Knoten sind Docker-Images.

Ich möchte in der Lage sein, ein Setup in AWS zu starten, in dem eine Instanz eines Managers und 100 Instanzen (eine Instanz pro Server) des Knotens gestartet werden.

Was würde ich dafür verwenden? Der Manager und die Knoten sollten in der Lage sein, miteinander zu kommunizieren, und die Knoten sollten in keiner Weise ausgeglichen sein. Sie benötigen daher eine dedizierte interne IP, mit der der Manager kommunizieren kann.

Ich habe mir ECS und CloudFormation + EC2 mit einem benutzerdefinierten AMI angesehen, bin mir aber nicht sicher, wie ich vorgehen soll.

Idealerweise möchte ich ein Skript, das ich gelegentlich ausführen kann, um die Server zu starten und sie einfach zu schließen.

Irgendwelche Vorschläge, was ich in AWS tun kann, um dieses Setup mühelos zu starten?

Wagen
quelle

Antworten:

4

Schauen Sie sich AWS Fargate an - damit können Sie Ihre Docker-Container ausführen, ohne die EC2-Instanzen für einen ECS-Cluster hochfahren zu müssen. Sie planen einfach die Aufgaben (oder Dienste), jeder erhält seine eigene IP-Adresse und sie können miteinander sprechen.

Sie können AWS Service Discovery auch verwenden , um die Registrierung und Suche der IP-Adressen der Aufgaben zu erleichtern.

Übrigens: Das standardmäßige Fargate-Parallelitätslimit beträgt 20 Aufgaben / Services. Wenn Sie 100 davon benötigen, müssen Sie ein Support-Ticket zur Erhöhung des Service-Limits erheben.

Wir haben es auf 200 gleichzeitige Aufgaben erhöht, da in unserer Verarbeitung mehr als 160 Container parallel ausgeführt werden, alle auf Fargate, ohne dass ein einziger EC2 verwaltet werden muss.

Update - wie man 100 Container hochfährt

Ich kann Ihnen sagen, wie wir es mit Fargate machen - in unserer CI / CD-Pipeline erstellen wir das Container-Image und laden es in ECR hoch. Ein Teil der Quelle ist auch eine CloudFormation (CFN) -Vorlage. In der Bereitstellungsphase der Pipeline erstellen / aktualisieren wir den CFN-Stapel, der die ECS TaskDefinition mit allen Containerparametern erstellt.

Dann haben wir einen Scheduler- Job, der in Python geschrieben und durch das CloudWatch-Ereignis (Cron-ähnlicher Scheduler) ausgelöst wurde , der den TaskDefinition-ARN nachschlägt und über 160 Aufgaben von diesem einzelnen TaskDef aus ausführt. Sie können jeder Aufgabe einen zusätzlichen Parameter zuweisen oder eine Konfiguration usw. überschreiben. Oder auch nicht und einfach hochfahren.

Früher verwendeten wir EC2 / ECS und mussten zunächst einen zusätzlichen Schritt ausführen: Skalieren Sie die ECS AutoScaling-Gruppe auf zehn Knoten, um unsere Arbeitslast zu unterstützen, und skalieren Sie sie am Ende wieder auf 0. Ansonsten ist es gleich, ob Sie Führen Sie es auf Fargate oder EC2 / ECS aus.

Ich hoffe, das hilft :)

MLu
quelle
Ich habe mir auch Fargate angesehen, aber auf den Knoten werden Simulationen ausgeführt. Daher bin ich mir nicht sicher, ob es "schlecht" ist, dass ich die Instanzgröße nicht steuern kann. Aber ist die anfängliche Einrichtung von ECS / EC2 im Vergleich zu ECS / Fargate nicht ziemlich gleich, außer dass Sie nicht an EC2 denken müssen?
Trolley
@Trolley hat die Antwort mit unserer Methode zum Hochfahren der über 160 Container aktualisiert.
MLu
@Trolley Fargate reserviert CPU und Speicher für Ihre Container - wir haben bei Fargate im Vergleich zu EC2 keine Leistungseinbußen festgestellt.
MLu
1

Warum verwenden Sie Terraform nicht für diesen Zweck? Es kann so viele Instanzen starten, wie Sie möchten, ein Netzwerk für Sie erstellen, Sicherheitsgruppen, ECS, IAMs oder was auch immer Sie erstellen möchten und einfach beenden, wenn Sie möchten. Dies ist heute in der Industrie weit verbreitet.

Deosha
quelle