6.1 Grundlegende Konzepte Docker Swarm
Docker Swarm
ist ein integriertes Container-Orchestrierungssystem, das von Docker bereitgestellt wird. Es ermöglicht das Erstellen, Verwalten und Skalieren eines Clusters von Docker-Hosts, indem diese in einen einzigen logischen Host umgewandelt werden, auf dem Container ausgeführt werden können. Swarm verteilt Aufgaben automatisch zwischen den Nodes und bietet dadurch Benutzerfreundlichkeit und Fehlertoleranz. In dieser Vorlesung schauen wir uns die Schlüsselkomponenten und grundlegenden Befehle zur Verwaltung von Docker Swarm
an.
Grundlegende Konzepte Docker Swarm
:
- Cluster (Swarm): eine Gruppe von Docker-Hosts, die zu einem einzigen logischen Cluster verbunden sind.
- Manager (Managers): Nodes, die den Cluster verwalten und Aufgaben auf die Workernodes verteilen.
- Workernodes (Workers): Nodes, die Aufgaben ausführen und Container starten.
- Dienste (Services): eine logische Darstellung von Anwendungen, beschreibt, welche Aufgaben erledigt werden sollen und wie viele Container-Instanzen gestartet werden.
- Aufgaben (Tasks): einzelne Container, die Instanzen von Diensten sind.
Architektur Docker Swarm
:
Docker Swarm verwendet eine Architektur, die auf Managern und Workernodes basiert. Manager verwalten den Zustand des Clusters, und Workernodes führen Aufgaben aus.
Manager:
- Verwalten den Zustand des Clusters und dessen Konfiguration.
- Verteilen Aufgaben auf die Workernodes.
- Bieten Fehlertoleranz und hohe Verfügbarkeit (bei mehreren Managern).
Workernodes:
- Führen Aufgaben aus, die von den Managern zugewiesen wurden.
- Starten Container entsprechend den Aufgaben.
Grundlegende Befehle Docker Swarm
:
-
docker swarm init
: Initialisiert einen neuen Swarm-Cluster. -
docker swarm join
: Fügt einem bestehenden Cluster einen Node hinzu. -
docker node ls
: Zeigt die Liste der Nodes im Cluster an. -
docker service create
: Erstellt einen neuen Service. -
docker service ls
: Zeigt laufende Dienste an. -
docker service scale
: Skaliert den Service auf eine bestimmte Anzahl von Instanzen. -
docker service rm
: Entfernt einen Service aus dem Cluster.
Die Verwendung von Docker Swarm
vereinfacht die Verwaltung von Anwendungen in verteilten Systemen und bietet Fehlertoleranz, Skalierbarkeit und Benutzerfreundlichkeit beim Deployment.
6.2 Erstellen eines Docker Swarm
-Clusters
Erstellen und Verwalten eines Docker Swarm-Clusters
Schritt 1: Initialisierung des Clusters
Führe auf dem ersten Host (Manager) den folgenden Befehl aus:
docker swarm init --advertise-addr <MANAGER_IPl>
Dieser Befehl initialisiert einen neuen Swarm-Cluster, macht den aktuellen Knoten zum Manager und gibt einen Befehl aus, um Worker-Knoten dem Cluster hinzuzufügen.
Schritt 2: Hinzufügen von Worker-Knoten
Führe auf den anderen Hosts den Befehl aus, der von docker swarm init
ausgegeben wurde, um sie dem Cluster hinzuzufügen:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Wo:
<SWARM_TOKEN>
: Token zum Verbinden mit dem Cluster (wird vondocker swarm init
ausgegeben).<MANAGER_IP>
: IP-Adresse des Manager-Knotens.
Schritt 3: Ansehen der Knoten
Um alle Knoten im Cluster anzuzeigen, verwende den folgenden Befehl:
docker node ls
Dieser Befehl zeigt eine Liste aller Knoten, inklusive deren Rollen, Status und Verfügbarkeit.
Beispielausgabe des Befehls docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Erklärung der Spalten:
- ID: Eindeutiger Identifikator des Knotens.
- HOSTNAME: Der Hostname des Knotens.
- STATUS: Aktueller Status des Knotens (z.B. Ready).
- AVAILABILITY: Verfügbarkeit des Knotens (z.B. Active).
- MANAGER STATUS: Zeigt an, ob der Knoten ein Manager ist (z.B. Leader, Reachable) oder ein Worker-Knoten (leer).
Jetzt ist der Docker Swarm-Cluster konfiguriert und du kannst Anwendungen erstellen und skalieren.
6.3 Verwaltung von Docker Swarm
Verwaltung von Services in Docker Swarm
1. Service erstellen
Erstelle einen Service, der mit einer bestimmten Anzahl von Replikaten läuft:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
In diesem Beispiel wird ein Service my_web
erstellt, der 3 Exemplare von Nginx ausführt. Die Container veröffentlichen Port 80 auf Port 8080 des Hosts.
2. Services anzeigen
Um alle laufenden Services im Cluster anzuzeigen, benutze den Befehl:
docker service ls
Beispielausgabe des Befehls docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Skalieren eines Services
Um die Anzahl der Instanzen (Replikate) eines Services zu ändern, benutze den Befehl docker service scale
:
docker service scale my_web=5
Jetzt hat der Service my_web
5 Exemplare.
4. Aktualisierung eines Services
Um das Image eines Services auf eine neue Version zu aktualisieren, benutze den Befehl docker service update
:
docker service update --image nginx:latest my_web
Gewährleistung der Hochverfügbarkeit
Docker Swarm unterstützt Hochverfügbarkeit durch:
- Verteilung von Aufgaben zwischen den Knoten im Cluster zur automatischen Wiederherstellung von Containern bei Ausfällen.
- Unterstützung mehrerer Manager: Es wird empfohlen, eine ungerade Anzahl von Managern (z. B. 3 oder 5) zu haben, um Probleme mit dem Quorum zu vermeiden.
- Verwendung von Replikaten: Konfiguriere mehrere Replikate für jeden Service, um die Fehlertoleranz zu erhöhen.
Das Konzept des Quorums
Ein Quorum stellt die Mehrheit der Knoten dar, die einer bestimmten Aktion (z. B. dem Schreiben von Daten oder der Wahl eines Leaders) zustimmen müssen, damit sie als gültig gilt. Zum Beispiel ist in einem Cluster mit 5 Knoten ein Quorum von 3 Knoten erforderlich.
Nützlicher Tipp!
Stelle sicher, dass Manager auf verschiedenen physischen oder Cloud-Servern bereitgestellt werden, um das Risiko gleichzeitiger Ausfälle zu minimieren.
6.4 Beispielkonfiguration für Docker Compose
mit Docker Swarm
Docker Compose
kann zusammen mit Docker Swarm
verwendet werden, um die Verwaltung von Multi-Container-Anwendungen zu vereinfachen.
Beispieldatei docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: beispiel
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Stack mit Docker Compose
in Swarm
starten
Um einen Stack in Docker Swarm
zu deployen, verwende den Befehl:
docker stack deploy -c docker-compose.yml mystack
Stack anzeigen
Zum Anzeigen der bereitgestellten Stacks:
docker stack ls
Dienste im Stack anzeigen
docker stack services mystack
GO TO FULL VERSION