Was ist der Docker-Schwarmmodus und wann sollten Sie ihn verwenden?

0
174

Der Schwarmmodus ist Dockers integriertes Orchestrierungssystem für die Skalierung Container über einen Cluster physischer Maschinen hinweg. Mehrere unabhängige Clients, die Docker Engine ausführen, bündeln ihre Ressourcen und bilden einen Schwarm.

Die Funktion wird mit Docker gebündelt und enthält alles, was Sie zum Bereitstellen von Apps auf Knoten benötigen. Der Schwarmmodus verfügt über ein deklaratives Skalierungsmodell, bei dem Sie die Anzahl der benötigten Replikate angeben. Der Schwarmmanager ergreift Maßnahmen, um die tatsächliche Anzahl der Replikate an Ihre Anfrage anzupassen und Container nach Bedarf zu erstellen und zu zerstören.

Schwärme haben auch viel mehr Funktionen. Cluster profitieren von integrierten Service-Discovery-Funktionen, Unterstützung für fortlaufende Updates und Netzwerkverkehr-Routing über externe Load Balancer.

So können Sie den Schwarmmodus verwenden, um einfache verteilte Workloads auf einer Maschinenflotte einzurichten. Sie sollten Swarm verwenden, wenn Sie skalierbare Anwendungen mit Redundanz unter Verwendung einer Standard-Docker-Installation hosten möchten, ohne dass weitere Abhängigkeiten erforderlich sind.

Erstellen Ihres eigenen Swarms

Stellen Sie sicher, dass Docker installiert ist, bevor Sie fortfahren. Sie benötigen das vollständige Docker-CE-Paket auf jeder Maschine, die Sie dem Schwarm hinzufügen möchten.

Werbung

Bestimmen Sie einen Ihrer Hosts als Schwarmmanager. Dieser Knoten orchestriert den Cluster, indem er Container-Scheduling-Anforderungen an die anderen Knoten ausgibt. Führen Sie docker swarm init auf dem Manager aus, um den Cluster-Setup-Prozess zu starten:

docker swarm init –advertise-addr 192.168.0.1

Ersetzen Sie die IP-Adresse mit der echten IP Ihres Manager-Knotens. Der Befehl gibt einen Docker Swarm Join-Befehl aus, den Sie auf Ihren sekundären Knoten ausführen sollten. Sie werden dann dem Schwarm beitreten und berechtigt sein, Container zu hosten.

Nachdem Sie Ihre Knoten hinzugefügt haben, führen Sie docker info auf dem Manager aus, um den Status des Clusters zu überprüfen. Der Abschnitt Swarm der Befehlsausgabe sollte als “aktiv aufgeführt werden.” Überprüfen Sie die “Knoten” count stimmt mit der Anzahl der hinzugefügten Knoten überein.

< p>Sie können weitere Details zu einem Knoten abrufen, indem Sie docker node ls ausführen. Dies zeigt die eindeutige ID jedes Knotens, seinen Hostnamen und seinen aktuellen Status. Knoten, die eine Verfügbarkeit von “aktiv” mit dem Status “bereit” sind gesund und bereit, Ihre Workloads zu unterstützen. Die Spalte Managerstatus zeigt Knoten an, die auch als Schwarmmanager fungieren. Der “Führer” ist der Knoten mit der Gesamtverantwortung für den Cluster.

Bereitstellen eines Containers

Sobald Ihre Knoten bereit sind, können Sie einen Container in Ihrem Schwarm bereitstellen. Der Schwarmmodus verwendet das Konzept der “Dienste” Containerbereitstellungen zu beschreiben. Jede Dienstkonfiguration verweist auf ein Docker-Image und eine Replikatanzahl, die aus diesem Image erstellt werden soll.

docker service create –replicas 3 –name apache httpd:latest

Dieser Befehl erstellt einen Dienst mit dem httpd:latest-Image für der Apache-Webserver. Es werden drei unabhängige Replikate erstellt, die Ihnen Widerstandsfähigkeit gegen Containerbeendigungen und Knotenausfälle bieten. Containerreplikate werden als “Aufgaben” im Docker Swarm-Sprachgebrauch.

Werbung

Docker behält den angeforderten Zustand kontinuierlich bei. Wenn einer der Knoten offline fällt, werden die von ihm gehosteten Replikate auf die anderen umgeplant. Während der gesamten Lebensdauer des Dienstes werden drei Apache-Container ausgeführt.

Dienste skalieren

Mit dem Docker können Sie Dienste jederzeit skalieren service scale-Befehl:

docker service scale apache=5

Docker fügt zwei neue Containerinstanzen hinzu, damit die Anzahl der Replikate weiterhin der angeforderten Anzahl entspricht. Die zusätzlichen Instanzen werden auf Knoten mit genügend freier Kapazität geplant, um sie zu unterstützen.

Dienste können auch mit Docker-Service-Update skaliert werden:

Docker-Service-Update apache –replicas=5

Wenn Wenn Sie diese Variante verwenden, können Sie die Änderung mit einem dedizierten Befehl rückgängig machen:

docker service rollback apache

Der Dienst wird auf drei Replikate zurückgesetzt. Docker zerstört zwei Container-Instanzen, sodass die Anzahl der Live-Replikate wieder dem vorherigen Zustand entspricht.

Rolling Updates

Der Schwarmmodus unterstützt Rolling Updates, bei denen Containerinstanzen inkrementell skaliert werden. Sie können eine Verzögerung zwischen der Bereitstellung des überarbeiteten Dienstes auf jedem Knoten im Schwarm angeben. Dies gibt Ihnen Zeit, auf Regressionen zu reagieren, wenn Probleme festgestellt werden. Sie können schnell ein Rollback durchführen, da nicht alle Knoten den neuen Dienst erhalten haben.

Werbung

Fügen Sie das Flag –update-delay zu einem docker service scale-Befehl hinzu, um fortlaufende Updates zu aktivieren. Die Verzögerung wird als Kombination aus Stunden h, Minuten m und Sekunden s angegeben. Der Schwarmmanager aktualisiert jede Containerinstanz einzeln. Sie können die Anzahl der in einem einzigen Vorgang aktualisierten Aufgaben mit dem Flag –update-parallelism anpassen.

So skalieren Sie einen Dienst auf 10 Replikate, indem Sie drei Container gleichzeitig mit a . aktualisieren fünf Minuten Verzögerung zwischen jedem Batch:

docker service scale –name apache –replicas=10 –update-delay 5m –update-parallelism 3

Managing Services

Viele bekannte Docker-Befehle funktionieren auch mit Diensten. Stellen Sie den Docker-Dienst regulären Containerverwaltungsbefehlen voran, um Dienste aufzulisten, ihre Protokolle anzuzeigen und sie zu löschen.

  • Docker-Dienst inspizieren – Überprüfen Sie die technischen Daten eines benannten Dienstes.
  • Docker-Dienstprotokolle – Protokollausgabe anzeigen, die einem benannten Dienst zugeordnet ist.
  • docker service ls – Alle laufenden Dienste auflisten.
  • docker service ps– Zeigen Sie die einzelnen Container-Instanzen an, die von einem bestimmten Dienst gekapselt sind.
  • Docker-Dienst rm – Entfernen Sie einen Dienst mit all seinen Replikaten. Es gibt keine Bestätigungsaufforderung.

Neben den bisher beschriebenen grundlegenden Verwaltungsvorgängen bieten Dienste zahlreiche Konfigurationsoptionen. Diese können beim Erstellen eines Dienstes oder später mit dem Befehl docker service update angewendet werden.

Zu den Serviceoptionen gehören Umgebungsvariablen, Integritätsprüfungsbefehle, DNS-Einstellungen, Labels und Neustartbedingungen. Laufende Containerinstanzen werden normalerweise bei einem Docker-Dienst-Update nicht zerstört, es sei denn, Sie ändern Einstellungen, die eine Neuerstellung erfordern, damit sie wirksam werden.

Netzwerkports freigeben

Container-Netzwerkports werden mit dem Flag –publish für Docker-Diensterstellung und Docker-Dienstaktualisierung verfügbar gemacht. Auf diese Weise können Sie einen Ziel-Container-Port und den öffentlichen Port angeben, als der er verfügbar gemacht werden soll.

docker service create –name apache –replicas 5 –publish published=8080,target=80 nginx:latest Advertisement

Jetzt können Sie sich mit Port 8080 auf jedem Ihrer Worker-Knoten verbinden, um auf eine Instanz des NGINX-Dienst. Dies funktioniert auch dann, wenn der Knoten, mit dem Sie eine Verbindung herstellen, nicht tatsächlich eine der Dienstaufgaben hostet. Sie interagieren einfach mit dem Schwarm und er kümmert sich um das Netzwerk-Routing. Dieser Ansatz wird als “Routing-Mesh bezeichnet.”

Mit einer alternativen Option können Sie Container-Ports auf den einzelnen Knoten veröffentlichen, auf denen Aufgaben ausgeführt werden. Fügen Sie mode=host zum Flag –published hinzu, um dies zu aktivieren. Der Dienst wird nur auf den Knoten verfügbar gemacht, die ihn hosten. Dies ist in Fällen nützlich, in denen Sie eine Verbindung zu einer bestimmten Instanz des Dienstes herstellen möchten. Das Routing-Mesh ordnet die Instanz, mit der Sie sich verbinden, zufällig zu, unabhängig davon, mit welchem ​​Knoten Sie eine Verbindung herstellen.

Docker Swarm unterstützt auch Overlay-Netzwerke. Diese ähneln normalen Docker-Netzwerken. Durch die Verbindung eines Dienstes mit einem Netzwerk können seine Container mit allen anderen Diensten im Netzwerk kommunizieren.

docker service create –name service1 –network demo-network my-image:latest docker service create –name service2 –network demo-network my-image:latest

Aufgaben, die von service1 und service2 erstellt wurden, können sich über das Overlay-Netzwerk gegenseitig erreichen. Ein Standardnetzwerk namens Ingress bietet die oben beschriebene Standard-Routing-Mesh-Funktionalität.

Schlussfolgerung

Der Swarm-Modus ist ein Container-Orchestrator, der direkt in Docker integriert ist. Da es standardmäßig enthalten ist, können Sie es auf jedem Host mit installierter Docker Engine verwenden.

Durch das Erstellen eines Schwarms können Sie Container über eine Flotte physischer Maschinen replizieren. Mit Swarm können Sie auch mehrere Managerknoten hinzufügen, um die Fehlertoleranz zu verbessern. Wenn der aktive Leiter aus dem Cluster ausscheidet, kann ein anderer Manager den Betrieb übernehmen.

Werbung

Der Docker-Swarm-Modus ist im Vergleich zu alternativen Orchestrierungsplattformen wie Kubernetes günstig. Der Einstieg ist einfacher, da es in Docker integriert ist und weniger Konzepte zu erlernen sind. Es ist oft einfacher, auf selbstverwalteter Hardware zu installieren und zu warten, obwohl vorgefertigte Kubernetes-Lösungen wie MicroK8s den Swarm-Komfortfaktor untergraben haben. Trotzdem bleibt der Swarm-Modus ein praktikabler Orchestrator für selbst gehostete Workloads, insbesondere wenn Sie nach einer entwicklerorientierten CLI-gesteuerten Lösung suchen, die weniger Anforderungen an Betriebsteams stellt.