Einführung
Docker Swarm ist die native Docker-Lösung für die Bereitstellung eines Clusters von Docker-Hosts. Sie können damit schnell einen Cluster von Docker-Hosts bereitstellen, die entweder auf Ihrem lokalen Computer oder auf unterstützten Cloud-Plattformen ausgeführt werden.
Vor Docker 1.12 mussten Sie zum Einrichten und Bereitstellen eines Clusters von Docker-Hosts einen externen Schlüsselwertspeicher wie etcd oder Consul verwenden für die Serviceerkennung. Mit Docker 1.12 ist jedoch kein externer Erkennungsdienst mehr erforderlich, da Docker mit einem sofort einsatzbereiten Speicher für Schlüsselwerte im Arbeitsspeicher geliefert wird.
In diesem Lernprogramm erfahren Sie, wie Sie mit der Swarm-Funktion von Docker 1.12 auf DigitalOcean einen Cluster von Docker-Computern bereitstellen. Auf jedem Docker-Knoten im Cluster wird CentOS 7 ausgeführt. Während Sie einen Cluster ausführen können, der aus Dutzenden, Hunderten oder Tausenden von Docker-Hosts besteht, besteht der Cluster, den wir in diesem Lernprogramm einrichten, aus einem Manager-Knoten und zwei Worker-Knoten für insgesamt drei Cluster-Mitglieder . Sobald Sie dieses Lernprogramm abgeschlossen haben, können Sie Ihrem Cluster problemlos weitere Knoten hinzufügen.
Voraussetzungen
Für dieses Tutorial benötigen Sie:
-
Ein lokaler Computer, auf dem Docker installiert ist. Auf Ihrem lokalen Computer kann eine beliebige Linux-Distribution oder sogar Windows oder MacOS ausgeführt werden. Installieren Sie Docker unter Windows und Mac OS mit dem official installer. Wenn auf Ihrem lokalen Computer CentOS 7 ausgeführt wird, Docker jedoch nicht installiert ist, lesen Sie https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7 [ Anleitung zur Installation und Verwendung von Docker unter CentOS 7].
-
Ein DigitalOcean-API-Token. Wenn Sie noch keine haben, generieren Sie sie mit https://www.digitalocean.com/community/tutorials/anwendungshinweise für diese Anleitung]. Stellen Sie beim Generieren eines Tokens sicher, dass es über einen Lese- / Schreibbereich verfügt. Dies ist die Standardeinstellung. Wenn Sie also beim Generieren keine Option ändern, verfügt diese über Lese- und Schreibfunktionen. Um die Verwendung in der Befehlszeile zu vereinfachen, müssen Sie das Token einer in diesem Artikel angegebenen Variablen zuweisen.
-
Docker Machine ist auf Ihrem lokalen Computer installiert und wird zum Erstellen von drei Hosts verwendet. Unter Windows und macOS enthält die Docker-Installation Docker Machine. Wenn Sie CentOS 7 lokal ausführen, lesen Sie https://www.digitalocean.com/community/tutorials/how-to-provision-and-manage-remote-docker-hosts-with-docker-machine-on-centos- Installationsanweisungen finden Sie in [Bereitstellen und Verwalten von Remote-Docker-Hosts mit Docker Machine unter CentOS 7].
Schritt 1 - Bereitstellung der Clusterknoten
Wir müssen mehrere Docker-Hosts für unseren Cluster erstellen. Zur Auffrischung stellt der folgende Befehl einen einzelnen Docker-Host bereit, wobei "+ $ DOTOKEN +" eine Umgebungsvariable ist, die als DigitalOcean-API-Token ausgewertet wird:
docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $
Stellen Sie sich vor, Sie müssen dies tun, um einen Cluster mit mindestens drei Knoten einzurichten, der jeweils einen Host bereitstellt.
Mit diesem Befehl können wir die Bereitstellung einer beliebigen Anzahl von Docker-Hosts in Kombination mit einfachen Bash-Skripten automatisieren. Führen Sie diesen Befehl auf Ihrem lokalen Computer aus, um drei Docker-Hosts mit den Namen "+ node-1 ", " node-2 " und " node-3 +" zu erstellen:
for i in ; do docker-machine create --driver digitalocean \
--digitalocean-image centos-7-0-x64 \
--digitalocean-access-token $i; done
Nachdem der Befehl erfolgreich ausgeführt wurde, können Sie überprüfen, ob alle Computer erstellt wurden, indem Sie Ihr DigitalOcean-Dashboard aufrufen oder den folgenden Befehl eingeben:
docker-machine ls
Die Ausgabe sollte der folgenden ähneln und als Kurzreferenz für die Suche nach der IP-Adresse der Knoten dienen:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
- digitalocean Running tcp:// v1.12.2
- digitalocean Running tcp:// v1.12.2
- digitalocean Running tcp:// v1.12.2
Zu diesem Zeitpunkt wurden alle drei Dockerized-Hosts erstellt und Sie haben die IP-Adresse jedes Hosts. Sie führen auch alle Docker 1.12.x aus, sind jedoch noch nicht Teil eines Docker-Clusters. In den nächsten Schritten konfigurieren wir die Firewall-Regeln, nach denen die Knoten als Mitglieder eines Clusters fungieren, wählen einen der Knoten aus und machen ihn zum Docker Swarm-Manager. Den Rest konfigurieren wir als Docker Swarm-Worker.
Schritt 2 - Konfigurieren der Firewall-Regeln, um Docker-Schwarmverkehr zuzulassen
Ein Cluster muss mindestens einen Knoten haben, der als Manager fungiert. Für ein Produktionssetup werden drei Manager empfohlen. Wählen Sie für dieses Setup den ersten Knoten aus und machen Sie ihn zum Schwarm-Manager. Die anderen beiden Knoten sind die Arbeitsknoten.
Bestimmte Netzwerkports müssen auf den Knoten geöffnet werden, die Teil eines Clusters sind, damit der Cluster ordnungsgemäß funktioniert. Dazu muss die Firewall so konfiguriert werden, dass der Datenverkehr über diese Ports zugelassen wird. Da es drei verschiedene Firewall-Anwendungen gibt, mit denen diese Aufgabe ausgeführt werden kann, wurden die Befehle, die Sie für jede Firewall-Anwendung auf den Knoten ausführen müssen, in einem separaten Artikel dokumentiert. Folgen Sie dieses Handbuchs und konfigurieren Sie die Firewalls für jeden Host. Öffnen Sie die richtigen Ports auf dem Manager und wiederholen Sie den Vorgang, um die Ports auf den beiden Clientknoten zu öffnen.
Nachdem Sie diesen Schritt ausgeführt haben, können Sie den Cluster-Manager initialisieren.
Schritt 3 - Initialisieren des Cluster Managers
Wir haben beschlossen, dass "++" unser Cluster-Manager sein wird. Melden Sie sich daher auf Ihrem lokalen Computer beim Knoten an:
docker-machine ssh
Die Eingabeaufforderung ändert sich, um die Tatsache widerzuspiegeln, dass Sie jetzt an diesem bestimmten Knoten angemeldet sind. Geben Sie den folgenden Befehl ein, um den Knoten als Swarm-Manager zu konfigurieren:
docker swarm init --advertise-addr
+ node_ip_address +
ist die IP-Adresse des Knotens. Sie können es von der Ausgabe von + docker-machine ls +
oder von Ihrem DigitalOcean-Dashboard erhalten.
Es wird eine Ausgabe angezeigt, die wie folgt aussieht:
OutputSwarm initialized: current node () is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-57m6beujakwyx0t2j5mglpi9juf8czapp8kf2tj3gudkgjkoda-0eg0x08w7uvyxiacmmx0zv67o \
111.111.111.111:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
In der Ausgabe sind die ID des Knotens, in diesem Beispiel * 2n4y8bwu6s7c1kwdryd945zv1 *, und die Anweisungen zum Hinzufügen der anderen Knoten zum Cluster enthalten.
Jetzt haben Sie einen Docker-Schwarm mit einem konfigurierten Manager. Fügen wir die verbleibenden Knoten als Worker hinzu.
Schritt 4 - Hinzufügen von Knoten zum Cluster
Um diesen Schritt abzuschließen, möchten Sie möglicherweise ein anderes Terminal öffnen und die Registerkarte oder das Fenster des Terminals, in dem Sie sich angemeldet haben, für den Moment alleine lassen.
Stellen Sie zunächst von Ihrem lokalen Computer aus eine Verbindung zu + node-2 +
her:
docker-machine ssh
Führen Sie dann diesen Befehl aus, wobei "+ your_swarm_token " das Token ist, das Sie beim Erstellen des Clusters im vorherigen Schritt erhalten haben, und " manager_node_ip_address +" die IP des Swarm-Managers ist:
docker swarm join \
--token \
:2377
Nachdem der Befehl erfolgreich ausgeführt wurde, wird folgende Antwort angezeigt:
OutputThis node joined a swarm as a worker.
Melden Sie sich von "" ab und wiederholen Sie diesen Vorgang mit "", um ihn Ihrem Cluster hinzuzufügen.
Sie haben dem Cluster jetzt zwei Arbeitsknoten hinzugefügt. Wenn die Firewall-Regeln korrekt konfiguriert wurden, haben Sie jetzt einen funktionierenden Docker-Schwarm, bei dem alle Knoten synchronisiert sind.
Schritt 5 - Verwalten des Clusters
Nachdem die Manager- und Worker-Knoten dem Cluster zugewiesen wurden, müssen alle Docker Swarm-Verwaltungsbefehle auf den Manager-Knoten ausgeführt werden. Kehren Sie zu dem Terminal zurück, mit dem Sie den Manager hinzugefügt haben, und geben Sie diesen Befehl ein, um alle Mitglieder des Clusters anzuzeigen:
docker node ls
Die Ausgabe sollte ungefähr so aussehen:
OutputID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
4smt8qechkvb8qp02nwo2oe6t * Ready Active Leader
5wzik3knakgj0c24jmtmiy5oq Ready Active
7f6ws6oladh94xnmbfdhanokm Ready Active
Diese Ausgabe zeigt, dass es sich um einen Docker-Schwarm mit drei Knoten und seinen Knoten handelt - einen Manager und zwei Mitarbeiter. Geben Sie Folgendes ein, um die anderen Verwaltungsbefehle anzuzeigen, die Sie auf dem Manager-Knoten ausführen können:
docker node --help
Ausführliche Informationen zum Cluster erhalten Sie, wenn Sie den folgenden Befehl für den Manager oder die Mitarbeiter verwenden (es handelt sich um einen allgemeinen Docker-Befehl):
docker info
Die Ausgabe sollte von dieser Art sein und den Status des Clusters (* aktiv * oder * ausstehend *), die Anzahl der Knoten im Cluster und angeben, ob der bestimmte Knoten ein Manager oder ein Worker ist.
Output...
Network: null host overlay bridge
Swarm: active
NodeID: 4smt8qechkvb8qp02nwo2oe6t
Is Manager: true
ClusterID: 31i554ti23njgxg28av52hv47
Managers: 1
Nodes: 3
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 111.111.111.111
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 3.10.0-327.22.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
...
Wenn Sie denselben Befehl auf den Arbeitsknoten wiederholen, sollte in der Zeile * Is Manager * "+ false +" angezeigt werden.
Lassen Sie uns nun einen Dienst auf dem Cluster ausführen.
Schritt 6 - Ausführen von Diensten im Docker-Schwarm
Nachdem Sie einen Docker-Schwarm eingerichtet haben, können Sie einen Testcontainer ausführen und sehen, wie der Manager damit umgeht. Auf einem Computer, auf dem Docker Engine 1.12 oder höher ausgeführt wird, werden Container mit dem Befehl + docker service +
als Dienste bereitgestellt. Und wie der Befehl + docker node
kann der Befehl` + docker service` nur auf einem Manager-Knoten ausgeführt werden.
Stellen wir also einen Webserverdienst mit dem offiziellen Nginx-Container-Image bereit:
docker service create -p 80:80 --name nginx
In diesem Befehl ordnen wir den Port "+ 80 " im Nginx-Container dem Port " 80 +" im Cluster zu, sodass wir von überall auf die Standard-Nginx-Seite zugreifen können.
Geben Sie Folgendes ein, um anzuzeigen, welche Dienste in einem Cluster ausgeführt werden:
docker service ls
Die Ausgabe sollte diese Form annehmen. Die Spalte * REPLICAS * zeigt an, wie viele Instanzen des Dienstes ausgeführt werden:
OutputID NAME REPLICAS IMAGE COMMAND
ch7xnvy8upho webserver 1/1 nginx
Sie können bestimmen, auf welchen Knoten die Dienste ausgeführt werden, indem Sie "+ docker service ps +" gefolgt vom Dienstnamen verwenden.
docker service ps
Die Ausgabe sollte ungefähr so aussehen:
OutputID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 2 minutes ago
In diesem Beispiel wird der Dienst "+ webserver " auf " node-1 " ausgeführt. Da dies ein Webserver ist, der an den Standardports ausgeführt wird, können Sie darauf zugreifen, indem Sie Ihren Browser auf " http: // +" zeigen. Versuche es. Sie sehen die Standardseite von Nginx.
Mit der Magie des Mesh-Netzwerks kann auf einen Dienst, der auf einem Knoten ausgeführt wird, auf jedem anderen Knoten des Clusters zugegriffen werden. Auf diesen Nginx-Dienst kann beispielsweise auch zugegriffen werden, indem Sie Ihren Browser auf die IP-Adresse eines beliebigen Knotens im Cluster verweisen, nicht nur auf den, auf dem er ausgeführt wird. Versuche es.
Eine weitere Funktion von Docker Swarm ist die Möglichkeit, einen Dienst zu skalieren, dh zusätzliche Instanzen eines Dienstes zu starten. Angenommen, wir möchten den zuvor gestarteten "+ Webserver +" - Dienst auf fünf Instanzen skalieren. Dazu geben wir einfach den folgenden Befehl ein und das System erstellt vier weitere Instanzen:
docker service scale =5
Und die Ausgabe von + docker service ps +
zeigt, auf welchen Knoten die neuen Instanzen gestartet wurden:
OutputID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4pfbvs7sh5mugtzckw4czhcfm webserver.1 nginx node-1 Running Running 3 minutes ago
1er2rbrnj6ltanoe47mb653wf webserver.2 nginx node-3 Running Running 14 seconds ago
evassgyvruh256ebv5pj3bqcz webserver.3 nginx node-3 Running Running 14 seconds ago
d453agrdpgng47klbl6yfjnka webserver.4 nginx node-1 Running Running 18 seconds ago
2hsdevx178rg15gqxhzrsnmg6 webserver.5 nginx node-2 Running Running 14 seconds ago
Dies zeigt, dass zwei der vier neuen Instanzen auf "+ node-3 " gestartet wurden, eine auf " node-1 " und die andere auf " node-2 +".
Wenn ein Dienst ausfällt, wird er automatisch auf demselben Knoten oder auf einem anderen Knoten neu gestartet, wenn der ursprüngliche Knoten nicht mehr verfügbar ist.
Fazit
Sie haben gesehen, wie einfach es ist, einen Docker-Schwarm mit Docker Engine 1.12 und dem neuen Schwarmmodus einzurichten. Außerdem erfahren Sie, wie Sie einige Verwaltungsaufgaben im Cluster ausführen. Aber es gibt noch mehr. Führen Sie den folgenden Befehl in Ihrem Swarm-Manager aus, um die verfügbaren Docker Swarm-Befehle anzuzeigen.
docker swarm --help
Weitere Informationen zu Docker Swarm finden Sie auf der offiziellen Dokumentationsseite unter https://docs.docker.com/engine/swarm/. Lesen Sie auch andere Docker-related articles auf DigitaloOcean.