So installieren und konfigurieren Sie einen Docker Swarm-Cluster auf CentOS 8

Docker ist ein Open-Source-Tool, mit dem Sie Anwendungen mithilfe eines Containers erstellen, bereitstellen und ausführen können. Der Container ermöglicht es Ihnen, eine Anwendung mit allen erforderlichen Abhängigkeiten zu verpacken und als ein einziges Paket auszuliefern.

Docker Swarm ist ein Clustering-Tool, das für die Verwaltung des Docker-Hosts verwendet wird. Es ermöglicht Ihnen, eine Gruppe von Docker-Hosts zu einem einzigen logischen virtuellen Server zu machen. Auf diese Weise können Sie Ihre Anwendung horizontal skalieren und die Anzahl der Container-Instanzen erhöhen. Docker Swarm bietet sehr nützliche Funktionen, darunter die Selbstheilung von Containern, Lastausgleich, Skalierung von Containern nach oben und unten, Service Discovery und Rolling Updates.

In diesem Beitrag zeigen wir Ihnen, wie Sie einen Docker Swarm-Cluster auf CentOS 8 einrichten.

Voraussetzungen

  • Zwei Server, auf denen CentOS 8 läuft.
  • Auf jedem Server ist ein Root-Passwort konfiguriert.

Installieren Sie Docker auf beiden Nodes

Zunächst müssen Sie Docker auf beiden Knoten installieren. Standardmäßig ist die neueste Version von Docker nicht im Standard-Repository von CentOS 8 enthalten. Sie müssen also ein Docker-Repository in Ihrem System hinzufügen.

Sie können es mit dem folgenden Befehl hinzufügen:

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Sobald das Docker-Repo erstellt ist, installieren Sie Docker mit dem folgenden Befehl:

dnf install docker-ce --nobest

Starten Sie nach der Installation von Docker den Docker-Dienst und aktivieren Sie, dass er beim Neustart des Systems gestartet wird, mit dem folgenden Befehl:

systemctl start docker
systemctl enable docker

Sie können den Status von Docker auch mit dem folgenden Befehl überprüfen:

systemctl status docker

Sie sollten die folgende Ausgabe erhalten:

? docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-03-12 03:55:24 EST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 2173 (dockerd)
    Tasks: 8
   Memory: 44.7M
   CGroup: /system.slice/docker.service
           ??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Failed to built-in GetDriver graph btrfs>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Your kernel does not support cgroup bl>
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Loading containers: start."
Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Default bridge (docker0) is assigned with>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Loading containers: done."
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver>
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon has completed initialization"
Mar 12 03:55:24 workernode systemd[1]: Started Docker Application Container Engine.
Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"

Überprüfen Sie nun die installierte Version von Docker mit dem folgenden Befehl:

docker --version

Sie sollten die folgende Ausgabe sehen:

Docker version 20.10.5, build 55c4c88

Firewall konfigurieren

Als nächstes müssen Sie die Ports 2376, 2377, 7946 und 80 durch die Firewall auf beiden Knoten zulassen. Sie können sie mit dem folgenden Befehl zulassen:

firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp

Laden Sie anschließend die Firewalld neu, um die Änderungen zu übernehmen:

firewall-cmd --reload

Initialisieren Sie den Docker-Swarm-Cluster

Als nächstes müssen Sie den Docker Swarm-Cluster auf dem Manager-Knoten initialisieren. Das können Sie mit dem folgenden Befehl tun:

docker swarm init --advertise-addr 45.58.32.185

Sie sollten die folgende Ausgabe erhalten:

Swarm initialized: current node (cq8xpscsls2ctqhdha8lhdrph) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Sie können den in der obigen Ausgabe gezeigten Befehl auf dem Docker-Arbeitsknoten verwenden, um den Knoten dem Cluster beizutreten.

Sie können die Informationen des Docker Swarm-Clusters mit dem folgenden Befehl überprüfen:

docker info

Sie sollten die folgende Ausgabe erhalten:

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.5
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: cq8xpscsls2ctqhdha8lhdrph
  Is Manager: true
  ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8  
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 45.58.32.185
  Manager Addresses:
   45.58.32.185:2377

Sie können nun den Docker Swarm-Knoten mit dem folgenden Befehl überprüfen:

docker node ls

Sie sollten die folgende Ausgabe erhalten:

ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5

Add Worker Node to Docker Swarm Cluster

Als nächstes müssen Sie den Worker Node zum Docker Swarm-Managerknoten hinzufügen. Sie können dies mit dem folgenden Befehl auf dem Worker-Knoten tun:

docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377

Sie sollten die folgende Ausgabe erhalten:

This node joined a swarm as a worker.

Überprüfen Sie auf dem Docker-Manager-Knoten den Worker-Knoten mit dem folgenden Befehl:

docker node ls

Sie sollten sehen, dass der Worker-Knoten dem Docker Swarm hinzugefügt wurde:

cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5
bipfv8sfm94a9po0uame5rd1n     workernode   Ready     Active                          20.10.5

Starten eines Dienstes in Docker Swarm

Hier werden wir einen neuen Nginx-Webservice erstellen und ihn mit zwei Containern skalieren. Sie können ihn erstellen, indem Sie den folgenden Befehl auf dem Manager-Knoten ausführen:

docker service create -p 80:80 --name webservice --replicas 2 nginx

Sie sollten die folgende Ausgabe erhalten:

agyxlaswxakrbboakkyydsh0k
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged 

Sie können den Webservice nun mit dem folgenden Befehl überprüfen:

docker service ls

Sie sollten die folgende Ausgabe sehen:

ID             NAME         MODE         REPLICAS   IMAGE          PORTS
agyxlaswxakr   webservice   replicated   2/2        nginx:latest   *:80->80/tcp

Sie können auch den laufenden Container mit dem folgenden Befehl überprüfen:

docker ps

Sie sollten die folgende Ausgabe sehen:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
c887cad1df2e   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 30 seconds   80/tcp    webservice.2.jelyj9gmeb7ikl2scg7mz8yg8

Um die Detailinformationen des Webservice zu erhalten, führen Sie den folgenden Befehl aus:

docker service ps webservice

Sie sollten die folgende Ausgabe sehen:

ID             NAME           IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR     PORTS
eye9zukwwrkq   webservice.1   nginx:latest   workernode   Running         Running 3 minutes ago             
jelyj9gmeb7i   webservice.2   nginx:latest   masternode   Running         Running 3 minutes ago   

Docker Swarm verifizieren

An diesem Punkt haben wir einen Nginx-Container über die Clusterknoten einschließlich des Management-Knotens verteilt. Sie können nun auf Ihren Nginx-Webserver über eine beliebige IP-Adresse des Worker-Knotens oder des Management-Knotens zugreifen:

Docker-Container wurde erfolgreich bereitgestellt

Fazit

In der obigen Anleitung haben Sie gelernt, wie Sie den Docker Swarm-Cluster auf CentOS 8 einrichten. Sie können nun eine beliebige Anzahl von Worker Nodes zum Docker Swarm-Cluster hinzufügen und Ihre Anwendung skalieren.

Das könnte dich auch interessieren …