Erstellen eines Docker-Container-Clusters mit Docker Swarm und DigitalOcean unter CentOS 7

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.