Detaillierte Erläuterung zum Erstellen eines kontinuierlichen Integrationsclusterdienstes basierend auf Docker-Swarm

Detaillierte Erläuterung zum Erstellen eines kontinuierlichen Integrationsclusterdienstes basierend auf Docker-Swarm

Vorwort

Dieser Artikel ist lediglich eine einfache Aufzeichnung meines eigenen Konstruktionsprozesses. Sollten während des Trainings Fragen auftauchen, könnt ihr diese gemeinsam besprechen.

Um die Clusterumgebung auf dem lokalen Computer (macOS) zu simulieren, werden vb und Docker-Machine verwendet. Die maschinelle Ausstattung für die kontinuierliche Integration ist wie folgt:

1. Serviceknoten: drei Managerknoten und ein Workerknoten. Der Manager muss mehr Ressourcen belegen, daher sollte die Managerkonfiguration so hoch wie möglich sein. Die Fehlertoleranzrate des Swarm-Manager-Knotens beträgt (N-1)/2. N ist die Anzahl der Managerknoten. Das heißt, wenn drei Manager vorhanden sind, kann der Ausfall eines Managerknotens toleriert werden. Offizielle Algorithmusbeschreibung: Raft-Konsens im Schwarmmodus.

2. Lokales Image-Repository-Register: Wird zum Speichern aller Service-Docker-Images verwendet, die bereitgestellt werden müssen.

https://docs.docker.com/registry/deploying/

Da der Schwarmmechanismus verwendet wird, müssen bei der Kommunikation zwischen Diensten keine Probleme bei der Diensterkennung und dem Lastausgleich berücksichtigt werden (anstelle der ursprünglichen Konsul- und Registriermethode).

3. Erstellen Sie die Betriebs- und Wartungsknoten-Ops des Images:

Das heißt, die Betriebs- und Wartungsmaschine. Ein einzelner Knoten reicht aus. Hauptsächlich verantwortlich für das Erstellen und Pushen von Bildern. Sie können in Ops ein privates Repository für Gitlab erstellen. Build-Skripte pflegen. Der Konfigurationsaufwand der Maschine ist nicht hoch, die Netzwerkbandbreite sollte jedoch möglichst hoch sein.

Verwenden Sie Docker-Machine, um eine Clusterumgebung zu simulieren

Erstellen eines Registrierungsknotens

Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "512" Registrierung

–engine-registry-mirror Mit diesem Parameter können die Adressen einiger Beschleunigungs-Repositories festgelegt werden.

Erstellen von Manager- und Workerknoten

Manager

Kopieren Sie den Code wie folgt:
Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "800" Manager1

Arbeitnehmer:

Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "800" Worker1 
Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "800" Worker2 
Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "800" Worker3

Erstellen eines Ops-Knotens

Docker-Maschine erstellen -d Virtualbox --virtualbox-memory "512" ops

Anzeigen des Maschinenlistenstatus

Docker-Maschine ls

Erstellen eines Registrierungsdienstes

Melden Sie sich beim Registrierungscomputer an.

Docker-Maschine SSH-Registrierung

Erstellen Sie einen Registrierungsdienst.

docker run -d -p 5000:5000 --restart=always --name registry \
 -v `pwd` /data:/var/lib/registry \
 Registrierung:2

Der Befehl setzt die Volumeoption -v, sodass die abgerufenen Image-Daten nicht bei jedem Neustart des Containerdienstes verloren gehen. Für Container mit Speichertypen wie Registry und MySQL wird empfohlen, das Volume festzulegen. Zur besseren Erweiterung können Sie das Image-Repository auch auf anderen Treibern sichern, beispielsweise auf OSS von Alibaba Cloud.

Führen Sie Docker PS aus, um einen gestarteten Registrierungsdienst anzuzeigen. Zur besseren Erweiterbarkeit können Sie es natürlich auch unter Ihrem eigenen Domänennamen mounten und beim erneuten Ausführen Authentifizierungsinformationen hinzufügen.

Um die Verwaltung von Containern zu vereinfachen, können Sie die Komponente Docker-Compose verwenden. Installieren:

Kopieren Sie den Code wie folgt:
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Sie können auch direkt nach dem Schreiben der Compose-Datei beginnen:

docker-compose up -d

Push-Image des lokalen Repositorys

Jetzt können Sie versuchen, ein Image abzurufen und es in Ihrer lokalen Registrierung zu markieren, z. B.

Kopieren Sie den Code wie folgt:
Docker Pull lijingyao0909/siehe: 1.0.3 && Docker-Tag lijingyao0909/siehe: 1.0.3 localhost:5000/siehe: 1.0.3

Führen Sie dann den Push-Befehl aus:

docker push localhost:5000/siehe:1.0.3

Dieses Image wird an den Registrierungsdienst gesendet. Die direkteste Möglichkeit, die Imagedaten anzuzeigen, besteht darin, das lokale Datenträgerverzeichnis anzuzeigen, wie in diesem Beispiel das Datenverzeichnis.
Wenn Sie die Registrierung bequemer verwalten möchten, können Sie auch mit der Registrierungs-Benutzeroberfläche verbundene Images wie hyper/docker-registry-web ausprobieren.

Kopieren Sie den Code wie folgt:
docker run -it -p 8080:8080 --name Registrierungsweb --link Registrierungsservv -e REGISTRY_URL=http://registry-srv:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web

Besuchen Sie dann Hostname:5000/Registrierung/Index, um eine einfache Benutzeroberfläche mit einer Bilderliste anzuzeigen.

https-Probleme

Wenn Sie die oben genannten Schritte während lokaler Tests ausführen, können beim Pushen oder Pullen von Bildern in anderen VB-Versionen die folgenden Probleme auftreten:

Fehlerantwort vom Daemon: Get https://registry:5000/v1/_ping: dial tcp 218.205.57.154:5000: i/o timeout

Die Lösung besteht darin, die Registrierungsauthentifizierung zu ändern. Ändern Sie zunächst "/var/lib/boot2docker/profile" wie folgt:

sudo vi /var/lib/boot2docker/profile

Hinzufügen zu

DOCKER_OPTS="--insecure-registry <Hostname>:5000"
DOCKER_OPTS="--insecure-registry Registrierung:5000"

Weil der Hostname der Registrierung Registry ist. Wenn Sie also den Befehl „Docker ifno“ ausführen, wird Folgendes angezeigt:

Unsichere Register:
 Registrierung: 5000
 127.0.0.0/8

Gleichzeitig muss auf anderen Arbeits- und Managercomputern das Attribut „–insecure-registry“ geändert werden, bevor das private Bibliotheksimage abgerufen werden kann. Nach der Änderung müssen Sie vb neu starten.

Versuchen Sie nach dem Neustart erneut, den Manager zu ziehen

Docker Pull Registry:5000/siehe:1.0.3

Sie können sehen, dass die Verbindung zum Repository erfolgreich hergestellt und das Image abgerufen wurde. Beachten Sie, dass in diesem Beispiel der Computername bzw. die Registrierung und nicht die IP-Adresse verwendet wird. Daher müssen Sie beim Abrufen des Images die Zuordnung zwischen IP und Computername in der Datei „etc/hosts“ jedes VB konfigurieren. Durch die Verwendung des Maschinennamens ist es einfacher, sich den Vorgang zu merken. Der beste Weg ist natürlich, über den Domänennamen auf das Lager zuzugreifen.

Verweise

Bereitstellen des Registrierungsdienstes

Ops-Dienst erstellen

Der Swarm-Service-Cluster zieht das Image direkt aus der Registrierung und startet den Anwendungsdienst direkt. Das Service-Image wird direkt in der Registrierung gespeichert, der Quellcode kann jedoch auf der Ops-Maschine verwaltet werden. Die zuvor erstellte Ops-Virtual-Box kann den Gitlab-Dienst bereitstellen. Informationen zu Startparametern finden Sie unter GitLab Docker-Images bereitstellen.

Ziehen Sie zuerst ein Gitlab-Image

docker run --detach \
 --hostname gitlab.lijingyao.com \
 --veröffentlichen 443:443 --veröffentlichen 80:80 --veröffentlichen 22:22 \
 --name gitlab \
 --restart immer \
 --volume `pwd`/gitlab/config:/etc/gitlab \
 --volume `pwd` /gitlab/logs:/var/log/gitlab \
 --volume `pwd` /gitlab/data:/var/opt/gitlab \
 gitlab/gitlab-ce:8.14.4-ce.0

Verwenden eines privaten Git-Repositorys

Da Port 80 gebunden ist, starten Sie Gitlab und besuchen Sie: http://machine-host/

Wenn Sie Gitlab zum ersten Mal aufrufen, werden Sie automatisch zum Zurücksetzen Ihres Passworts weitergeleitet. Sie können ein neues Passwort festlegen, welches das Passwort für das Root-Konto ist. Anschließend können Sie weitere Git-Benutzer zur Nutzung registrieren.
Wenn Sie hier einen Domänennamendienst beantragen oder gitlab.lijingyao.com lokal an die IP-Adresse dieser Virtualbox binden, können Sie direkt auf die Adresse gitlab.lijingyao.com zugreifen. In der tatsächlichen Produktionsumgebung gibt es eine feste öffentliche IP und einen eigenen DNS-Dienst, sodass keine Hostbindung erforderlich ist. Dies ist nur ein lokaler Test, binden Sie den Host daher vorübergehend.

Schwarm

Der Dienst in diesem Beispiel ist ein einfaches Springboot- und Gradle-Projekt. Das Dienstimage kann vom Docker Hub abgerufen werden, siehe Dienstimage. Nachdem Sie das Image gepackt haben, übertragen Sie es direkt in der Gradle-Aufgabe in das Registrierungs-Repository. In der lokalen Umgebung kann es direkt im Projektverzeichnis ausgeführt werden. Die Gradle-Aufgabe wird dann in die VB-Registrierung übertragen und anschließend kann das Image aus dem Registrierungs-Repository abgerufen werden. Jetzt sind wir bereit, den Swarm-Cluster zu initialisieren.

Jetzt lauten die Maschinen im gesamten VB-Cluster wie folgt:

$ Docker-Maschine ls

NAME AKTIV TREIBER STATUS URL SWARM DOCKER FEHLER
haproxy - Virtualbox läuft tcp://192.168.99.103:2376 v1.12.3 
manager1 - Virtualbox wird ausgeführt tcp://192.168.99.100:2376 v1.12.3 
ops - Virtualbox läuft tcp://192.168.99.106:2376 v1.12.3 
Registrierung - Virtualbox wird ausgeführt tcp://192.168.99.107:2376 v1.12.3 
worker1 - Virtualbox läuft tcp://192.168.99.101:2376 v1.12.3 
worker2 - virtualbox Läuft tcp://192.168.99.102:2376 v1.12.3 
worker3 - Virtualbox läuft tcp://192.168.99.105:2376 v1.12.3

Verwenden Sie dann Docker-Machine SSH Manager1, um sich bei der Maschine Manager1 anzumelden.

Initialisieren Sie den Swarm-Manager-Knoten

Initialisieren Sie Swarm auf der Maschine manager1. Diese initialisierte Maschine ist der Manager des Swarms. Führen Sie Folgendes aus:

 Docker Swarm init --advertise-addr 192.168.99.100

Sie sehen die folgende Ausführungsausgabe:

Swarm initialisiert: Der aktuelle Knoten (03x5vnxmk2gc43i0d7xpycvjg) ist jetzt ein Manager.

Um diesem Schwarm einen Arbeiter hinzuzufügen, führen Sie den folgenden Befehl aus:

 Docker-Schwarm beitreten \
 --token SWMTKN-1-5ru6lyco3upj7oje6hidug3erqczok84wk7bekzfaca4uv51r9-22bcjhkbxnclmw3nl3ui8601l \
 192.168.99.100:2377

Um diesem Swarm einen Manager hinzuzufügen, führen Sie „Docker Swarm Join-Token Manager“ aus und folgen Sie den Anweisungen.

Der generierte Token-Wert ist der Schlüssel für andere Swarm-Clusterknoten, um dem gesamten Swarm beizutreten. Wenn Sie das Token vergessen, können Sie es auf Manager1 ausführen:

$docker swarm Join-Token-Manager

Um den aktuellen Token-Wert anzuzeigen. Die offizielle Empfehlung lautet, die folgenden Token mindestens alle 6 Monate auszutauschen. Ersetzen Sie den Befehl:

$docker swarm join-token --rotate Arbeiter

Hinzufügen eines Worker-Knotens

Melden Sie sich jeweils bei Worker1, Worker2 und Worker3 an und führen Sie den Join-Befehl aus.

Überprüfen Sie vor dem Beitritt die Docker-Netzwerkeinrichtungen. implementieren

$ Docker-Netzwerk ls
NETZWERK-ID-NAME TREIBER-UMFANG
4b7fe1416322 Brücke Brücke lokal    
06ab6f3352b0 Host Host lokal    
eebd5c8e0d5d keine null lokal

Führen Sie nach der Initialisierung von Manager1 gemäß dem Befehl Folgendes aus:

Docker-Schwarm beitreten \
 --token SWMTKN-1-5ru6lyco3upj7oje6hidug3erqczok84wk7bekzfaca4uv51r9-22bcjhkbxnclmw3nl3ui8601l \
 192.168.99.100:2377

Wenn Sie an diesem Punkt „Docker Network LS“ auf einem beliebigen Worker-Knoten ausführen, können Sie sehen, dass es einen zusätzlichen Overlay-Netzwerkkanal mit einer Swarm-Abdeckungsreichweite gibt.

Nachdem alle drei Worker beigetreten sind, wird der Knotenstatus des Managers auf manager1 angezeigt.

Docker-Knoten ls
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS
03x5vnxmk2gc43i0d7xpycvjg * manager1 Bereit Aktiv Leiter  
2y5wrndibe8c8sqv6851vrlgp worker1 Bereit Aktiv Erreichbar
dwgol1uinkpsybigc1gm5jgsv worker2 Bereit Aktiv  
etgyky6zztrapucm59yx33tg1 worker3 Bereit Aktiv Erreichbar

Der Status „Erreichbar“ des Managers zeigt an, dass der Knoten auch ein Managerknoten ist. Dies liegt daran, dass wir in worker1 bzw. worker3 Folgendes ausgeführt haben:

Docker-Knoten fördert Worker1
Docker-Knoten fördern Worker3

Worker1 und Worker3 können zu diesem Zeitpunkt auch Schwarmbefehle ausführen. Wenn Manager1 heruntergefahren wird, wird einer von ihnen zum neuen Leiter gewählt. Wenn Sie den Managerstatus eines Knotens entfernen möchten, können Sie ihn mit dem Befehl „demote“ entfernen. Nach der Ausführung wird der Worker-Knoten zu einem normalen Task-Knoten.

Docker-Knoten herabstufen Worker1 Worker3

Andere Zustände von Schwarmknoten

Der Swarm-Knoten kann in den Drain-Zustand versetzt werden. Der Knoten im Drain-Zustand führt keinen Dienst aus.

Legen Sie fest, dass ein Knoten nicht verfügbar ist:

Docker-Knoten-Update – Verfügbarkeitsabfluss Worker1

Es gibt drei Zustände: Pause, Drain und Aktiv. Pause bedeutet, dass eine Aufgabe ausgeführt wird und keine neuen Aufgaben akzeptiert werden.

Wenn Sie den Worker1-Knoten aus dem Swarm-Center entfernen möchten, führen Sie jetzt den zu entfernenden Knoten (Worker1) aus: „docker swarm leave“ und führen Sie dann auf dem Manager „docker node rm worker1“ aus, um einen Swarm-Knoten zu entfernen.

Erstellen eines Schwarmdienstes

In diesem Beispiel wird Swarm verwendet, um einen Springboot-basierten REST-API-Dienst bereitzustellen. Die Adresse des Lagers lautet springboot-restful-exam. Der erstellte Dienstname lautet deftsee, der an Port 80 gebunden ist und 4 laufende Containerdienste erweitert.

Docker-Dienst erstellen \
 --Replikate 4 \
 --name deftsee \
 --update-delay 10s \
 --veröffentlichen 8080:80 \
 lijingyao0909/siehe:1.0.3

Nachdem der Dienst erstellt wurde, können Sie den Status des Dienstknotens anzeigen

docker@manager1:~$ Docker-Dienst ls
ID NAME REPLIKATE BILD BEFEHL
a6s5dpsyz7st deftsee 4/4 lijingyao0909/siehe:1.0.3 

REPLICAS stellt die Anzahl der laufenden Container des Dienstes dar. Wenn es 0/4 ist, bedeutet dies, dass nicht alle Dienste gestartet wurden. Um den Betriebsstatus jedes Knotens im Detail anzuzeigen, können Sie den Docker-Dienst PS Servicename verwenden.

docker@manager1:~$ docker service ps deftsee
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER
8lsdkf357lk0nmdeqk7bi33mp deftsee.1 lijingyao0909/see:1.0.3 worker2 Läuft Läuft vor 5 Minuten 
cvqm5xn7t0bveo4btfjsm04jp deftsee.2 lijingyao0909/see:1.0.3 manager1 Läuft Läuft vor 7 Minuten 
6s5km76w2vxmt0j4zgzi4xi5f deftsee.3 lijingyao0909/see:1.0.3 worker1 Läuft Läuft vor 5 Minuten 
4cl9vnkssedpvu2wtzu6rtgxl deftsee.4 lijingyao0909/see:1.0.3 worker3 Läuft Läuft vor 6 Minuten

Sie können sehen, dass die Aufgaben zur Ausführung gleichmäßig auf alle vier Aufgabenknoten verteilt sind. Erweitern Sie als nächstes den deftsee-Dienst

docker@manager1:~$ Docker-Dienstskala deftsee=6
deftsee skaliert auf 6
docker@manager1:~$ docker service ps deftsee
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER
8lsdkf357lk0nmdeqk7bi33mp deftsee.1 lijingyao0909/see:1.0.3 worker2 Läuft Läuft vor 8 Minuten 
cvqm5xn7t0bveo4btfjsm04jp deftsee.2 lijingyao0909/see:1.0.3 manager1 Läuft Läuft vor 10 Minuten 
6s5km76w2vxmt0j4zgzi4xi5f deftsee.3 lijingyao0909/see:1.0.3 worker1 Läuft Läuft vor 8 Minuten 
4cl9vnkssedpvu2wtzu6rtgxl deftsee.4 lijingyao0909/see:1.0.3 worker3 Läuft Läuft vor 9 Minuten 
71uv51uwvso4l340xfkbacp2i deftsee.5 lijingyao0909/see:1.0.3 manager1 Läuft Läuft vor 5 Sekunden 
4r2q7q782ab9fp49mdriq0ssk deftsee.6 lijingyao0909/see:1.0.3 worker2 Läuft Läuft vor 5 Sekunden

lijingyao0909/see:1.0.3 ist ein Spiegel des öffentlichen Lagers von Dockerhub. Der Spiegel wird gezogen, wenn der Dienst erstellt wird. Die Gesamtgeschwindigkeit ist langsam, daher können Sie es mit einem privaten Lager kombinieren und den Spiegel direkt auf dem Registrierungscomputer ziehen. Der Dienst kann mit dem Docker-Dienst „rm deftsee“ direkt entfernt und anschließend über die Registrierung neu erstellt werden.

Docker-Dienst erstellen \
 --Replikate 6 \
 --name deftsee \
 --update-delay 10s \
 --veröffentlichen 8080:80 \
 Registrierung: 5000/siehe: 1.0.4

Melden Sie sich jetzt bei einem beliebigen Worker-Dienst an und zeigen Sie das laufende Container-Image an:

docker@worker2:~$ docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
89d4f588290b registry:5000/see:1.0.4 "/bin/sh -c 'java -Dc" Vor etwa einer Minute Aktiv Vor etwa einer Minute 8080/tcp deftsee.1.eldpgb1aqtf9v49cxolydfjm9

Wenn Sie den Dienst aktualisieren möchten, können Sie die Version direkt über den Update-Befehl aktualisieren. Der Dienst wird dann fortlaufend freigegeben. Durch Festlegen von *–update-delay 10s * können Sie die Verzögerungszeit jedes Knotens während der Aktualisierung ändern.

Docker-Dienstaktualisierung --Image-Registrierung: 5000/siehe: 1.0.5 deftsee

Neustarten eines Knotendienstes

Herunterfahren: Docker-Knoten-Update – Verfügbarkeitsabfluss Worker1

Öffnen: Docker-Knoten-Update – Verfügbarkeit aktiver Worker1

Service-Port aktualisieren

Durch das Aktualisieren des Ports eines Dienstes wird der Dienst neu gestartet (der ursprüngliche Dienst wird heruntergefahren, der Dienst wird neu erstellt und dann neu gestartet):

 Docker-Dienstaktualisierung \
 --publish-add <VERÖFFENTLICHTER-PORT>:<ZIEL-PORT> \
 <BEDIENUNG>

docker@manager1:~$ Docker-Dienstaktualisierung \
 --veröffentlichen-add 8099:8080 \
 deftsee

docker@manager1:~$ docker service ps deftsee
ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER
3xoe34msrht9eqv7eplnmlrz5 deftsee.1 registry:5000/see:1.0.4 manager1 Läuft Läuft vor 39 Sekunden  
eldpgb1aqtf9v49cxolydfjm9 \_ deftsee.1 registry:5000/see:1.0.4 worker2 Herunterfahren Herunterfahren vor 39 Sekunden  
9u4fh3mi5kxb14y6gih5d8tqv deftsee.2 registry:5000/see:1.0.4 manager1 Läuft Läuft vor etwa einer Minute 
0skgr5fx4xtt6y71yliksoft0 \_ deftsee.2 registry:5000/see:1.0.4 worker1 Herunterfahren Herunterfahren vor etwa einer Minute 
8hposdkqe92k7am084z6kt1j0 deftsee.3 registry:5000/see:1.0.4 worker3 Läuft Läuft vor etwa einer Minute 
c5vhx1wx0q8mxaweaq0mia6n7 \_ deftsee.3 registry:5000/see:1.0.4 manager1 Herunterfahren Herunterfahren vor etwa einer Minute 
9se1juxiinmetuaccgkjc3rr2 deftsee.4 registry:5000/see:1.0.4 worker1 Läuft Läuft vor etwa einer Minute 
4wofho0axvrjildxhckl52s41 \_ deftsee.4 registry:5000/see:1.0.4 worker3 Herunterfahren Herunterfahren vor etwa einer Minute

Dienstauthentifizierung und Netzwerk

Nachdem der Dienst im Beispiel gestartet wurde, kann er direkt über ip:port aufgerufen werden. Wenn Sie beispielsweise http://192.168.99.100:8099/see aufrufen, können Sie sehen, dass die Serviceanforderung an jeden laufenden Knoten verteilt wird. Dies ist die Overlay-Netzwerkschicht von Swarm. Die Netzwerke der einzelnen Knoten sind miteinander verbunden. Swarm sorgt für den Lastenausgleich. Basierend auf der LB von Swarm können Sie auch Ihr eigenes Overlay-Netzwerk erstellen. Alle Knoten im erstellten Overlay-Netzwerk können mit diesem Netzwerk kommunizieren. Allerdings müssen beim Erstellen des Dienstes Netzwerkoptionen angegeben werden.

$Docker-Netzwerk erstellen \
 --Treiber-Overlay \
 --subnet 10.0.9.0/24 \
 --opt verschlüsselt \  
 mein-netzwerk

$ Docker-Dienst erstellen \
 --name deftsee \
 --veröffentlichen 8099:80 \
 --Replikate 4 \
 --network mein-Netzwerk \
 -l com.df.serviceDomain=deftsee.com \
 -l com.df.notify=true \
 lijingyao0909/siehe:1.0.3

–network my-network gibt das Docker-Netzwerk an, mit dem der Dienst eine Verbindung herstellen kann. Sie können auf dem Swarm-Knoten ein Netzwerk mit dem Namen my-network erstellen. Daher ist es auch möglich, die Serviceerkennung und den LB-Mechanismus von Consul und Haproxy in den Swarm-Mechanismus einzubinden.

Wenn für einen Dienst ein Netzwerk angegeben ist, müssen sich die auf dem Schwarm ausgeführten Aufgaben auch in diesem angegebenen Netzwerk befinden, um mit dem Dienst kommunizieren zu können. Wenn der Knoten nicht zum Swarm-Modus-Knoten hinzugefügt wird oder nicht ausgeführt wird und in diesem angegebenen Netzwerk gemountet ist, kommuniziert er nicht mit diesem Netzwerk. Docker-Netzwerk-LS erkennt das Netzwerk nicht. Wenn Sie einen Dienst erstellen, verknüpfen Sie ihn mit dem Tag --network my-network mit diesem Netzwerk. Beim Anzeigen des Netzwerks können Sie „Docker Network Inspection My-Network“ verwenden, um die gemounteten Container des Knotens anzuzeigen, der in den zurückgegebenen Containern aufgelistet ist.

Ein Netzwerkdienst wird erstellt. Wenn ein Dienst mit dem Netzwerk verbunden ist, weist Swarm dem Dienst in diesem Netzwerk eine VIP zu. Das lb innerhalb von Swarm verteilt den Dienst automatisch. Es ist nicht erforderlich, jeden Dienstport anzugeben. Das heißt, Container, die mit demselben Netzwerk verbunden sind, können über den Dienstnamen auf den Dienst zugreifen. Denn alle zu diesem Netzwerk hinzugefügten Container teilen sich eine DNS-Zuordnung über das Gossip-Protokoll (die VIP-Zuordnung basiert auf der an den Dienstnamen gebundenen DNS-Alias-Zuordnung).

Sehen Sie sich die VIP-Netzwerkinformationen des Dienstes an:

$ Docker-Dienst inspizieren \
 --format='{{json .Endpoint.VirtualIPs}}' \
 deftsee

Ausgabe: [{"NetworkID":"dn05pshfagohpebgonkhj5kxi","Addr":"10.255.0.6/16"}]

Schwarmmanagement

Um die Verfügbarkeit des Managerknotens (Heartbeat-Mechanismus, Leiterwahl) aufrechtzuerhalten, kann der Managerknoten so eingestellt werden, dass er keine Servicevorgänge akzeptiert, Managerknotenressourcen spart und den Managerknoten von der Aufgabenumgebung isoliert.

Docker-Knoten-Update – Verfügbarkeitsabfluss <KNOTEN>

Sichern Sie den Status von /var/lib/docker/swarm/raft.

Nicht verfügbare Knoten bereinigen

Docker-Knoten herabstufen <NODE> 
Docker-Knoten rm <ID-Knoten>.

Der Knoten tritt dem Manager wieder bei

$docker-Knoten herabstufen <NODE>.
$docker node rm <KNOTEN>.
$ Docker-Schwarm beitreten …

Geben Sie während der Initialisierung eine feste IP-Adresse an: init –advertise-addr. Worker-Knoten können dynamische IP verwenden.

Verweise

Schwarmmodus

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispiel für die Verwendung von Docker Swarm zum Erstellen eines verteilten Crawler-Clusters
  • Wie führt Docker Swarm einen bestimmten Container auf einem bestimmten Knoten aus?
  • Detaillierte Erläuterung der Prinzipien der Diensterkennung und des Lastenausgleichs von Docker Swarm
  • Detaillierte Erklärung von Docker-Swarm-Clusterfehlern und Ausnahmen
  • So verwenden Sie Docker Swarm zum Erstellen eines Clusters
  • Docker Swarm – Beispiel für die ersten Schritte
  • Detaillierte Erläuterung zur Verwendung von Docker 1.12 zum Erstellen eines Docker-Schwarmclusters mit mehreren Hosts
  • So erstellen Sie einen Docker-Containercluster mit Docker Swarm und DigitalOcean unter Ubuntu 16.04
  • Installieren Sie Docker ganz einfach und führen Sie den Docker Swarm-Modus aus
  • So installieren Sie Docker und verwenden es im Docker Swarm-Modus

<<:  Detaillierte Diskussion der InnoDB-Sperren (Record-, Gap-, Next-Key-Sperre)

>>:  Vue Grundanleitung Beispiel grafische Erklärung

Artikel empfehlen

Detailliertes Tutorial zur Installation von mysql8.0 mit dem Linux-Befehl yum

1. Reinigen Sie vor der Installation gründlich rp...

SQL-Aggregation, Gruppierung und Sortierung

Inhaltsverzeichnis 1. Aggregierte Abfrage 1. COUN...

Detaillierte Erklärung der HTML-Formularelemente (Teil 2)

HTML-Eingabeattribute Das Value-Attribut Das Valu...

Richtige Verwendung der Vue-Funktion Anti-Shake und Throttling

Vorwort 1. Entprellen: Nach dem Auslösen eines Ho...

uniapp implementiert Datums- und Zeitauswahl

In diesem Artikelbeispiel wird der spezifische Co...

Die vernachlässigten Spezialeffekte von META-Tags (Seitenübergangseffekte)

Durch die Verwendung von JS im Webdesign können vi...

Beispiel für die Implementierung einer virtuellen Liste im WeChat Mini-Programm

Inhaltsverzeichnis Vorwort analysieren Erste Rend...

Analyse des Prinzips und der Verwendung der kontinuierlichen MySQL-Aggregation

Dieser Artikel veranschaulicht anhand von Beispie...

Implementieren Sie über 24 Array-Methoden in JavaScript von Hand

Inhaltsverzeichnis 1. Traversal-Klasse 1. fürJede...

So erzielen Sie mit Vue3 beispielsweise einen Lupeneffekt

Inhaltsverzeichnis Vorwort 1. Die Bedeutung der K...

So rufen Sie einen Hyperlink auf und öffnen ihn

<br />Die unzähligen Informationen im Intern...