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:
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.