Docker Swarm te installeren op Rocky Linux

Docker Swarm is een container orkestratie gebouwd bovenop Docker Engine. Hiermee kun je een cluster van Docker nodes met meerdere servers maken en inzetten. Docker Swarm vereenvoudigt de inzet van je gecontaineriseerde applicatie in een dienst. Biedt een eenvoudige en gemakkelijkste manier om containers te beheren en te orkestreren.

Docker Swarm biedt een hoge mate van beschikbaarheid voor applicaties. In Docker Swarm kun je een enkele applicatie of dienst draaien op meerdere knooppunten, die ‘Worker Nodes’ worden genoemd. En er is ook een node genaamd “Swarm Manager”, die het centrale beheer en de orkestratie van de Docker Swarm verzorgt.

Deze tutorial laat zien hoe je Docker Swarm opzet met behulp van Rocky Linux servers. Je installeert Docker op elke server, stelt firewalld in, initialiseert de Swarm Manager en voegt Nodes toe, en tenslotte leer je het basisgebruik van Docker Swarm voor het inzetten van gecontaineriseerde applicaties.

Voorwaarden

Om deze gids te voltooien heb je minstens drie Rocky Linux servers nodig en een niet-root gebruiker met sudo/administrator privileges.

Voor deze demonstratie gebruiken we drie Rocky Linux servers met de details hieronder:

Hostname            IP Address        Used as
---------------------------------------------------
swarm-manager1     192.168.5.100     Swarm Manager
worker1            192.168.5.120     Node
worker2            192.168.5.121     Node

Met al deze vereisten op hun plaats ben je klaar om de Docker Swarm implementaties te starten.

Docker installeren

Om Docker Swarm op te zetten, moet je Docker Engine installeren op elke machine/server. Voor Rocky Linux distributie kun je Docker installeren via de officiële Docker repository.

Nu installeer je Docker Engine op elk van je Rocky Linux servers.

Voeg de Docker repository voor het Rocky Linux systeem toe via het onderstaande dnf commando.

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

Zodra de repository is toegevoegd, voer je het onderstaande dnf commando uit om de repository lijst te controleren en alle pakketten bij te werken.

sudo dnf repo list
sudo dnf update

Als de Docker repository is toegevoegd, zie je de onderstaande uitvoer:

repo docker toevoegen

Installeer vervolgens Docker via het onderstaande dnf commando. Wanneer gevraagd wordt om de installatie te bevestigen, voer dan y in en druk op ENTER om door te gaan.

sudo dnf install docker-ce docker-ce-cli containerd.io

docker installeren

Zodra Docker is geïnstalleerd, start en activeer je de‘docker‘ service via het onderstaande systemctl commando. De‘docker‘ service zou moeten draaien en zal automatisch draaien bij het opstarten van het systeem.

sudo systemctl enable docker
sudo systemctl start docker

Controleer tenslotte de‘docker‘ service met het onderstaande commando om er zeker van te zijn dat de service draait.

sudo systemctl status docker

Als de‘docker‘ service draait, zou je de onderstaande uitvoer moeten krijgen.

controleer docker service

Bovendien, als je Docker wilt draaien met een niet-root gebruiker, moet je de gebruiker toevoegen aan de‘docker‘ groep via onderstaand commando.

sudo usermod -aG docker user

Firewalld instellen

Voor de productieomgeving moet je op elke server de firewall inschakelen. Op het standaard Rocky Linux systeem is de firewalld standaard ingeschakeld. Je hoeft dus alleen wat TCP en UDP poorten toe te voegen voor de Docker Swarm inzet.

Hieronder staan enkele van de TCP en UDP poorten die je op elke server moet openen om Docker Swarm in te zetten en goed te laten draaien:

  • TCP poort 2377 voor clustermanagement communicatie – dit is als je meerdere Swarm Managers hebt.
  • TCP en UDP poort 7946 voor communicatie tussen knooppunten – voor alle knooppunten op de Swarm omgeving.
  • UDP-poort 4789 voor overlay netwerkverkeer

Voeg Docker Swarm-poorten toe aan de firewalld via onderstaand firewall-cmd commando.

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

Herlaad vervolgens de firewalld regels en controleer de lijst met poorten op de firewalld met onderstaand commando.

sudo firewall-cmd --reload
sudo firewall-cmd --list-port

Je zou moeten zien dat een aantal TCP en UDP poorten voor de Docker Swarm inzet is toegevoegd aan de firewalld.

firewalld opnieuw laden

Met de Docker engine geïnstalleerd op elke server en de Firewalld configuratie, kun je nu de Docker Swarm inzet opzetten door de eerste node te initialiseren als de “Swarm manager”.

Swarm Manager initialiseren

Swarm Manager is het brein van je Docker Swarm omgeving. Voor grote implementaties kun je meerdere servers toevoegen als de Swarm manager, wat de hoge beschikbaarheid en fouttolerantie van je Swarm Manager mogelijk maakt.

De Swarm Manager is de cluster manager voor je Docker Swarm, hij beheert de staat van je applicatie deployments en is ook geïntegreerd met Docker Engine. Swarm Manager biedt een declaratief servicemodel en service scaling, de gewenste staat van de dienst, en zorgt ook voor rolling updates.

In dit voorbeeld initialiseren we de server“swarm-manager1” met IP-adres“192.168.5.100” als de Swarm Manager.

Voer het volgende commando “docker swarm init” uit op de “swarm-manager1” server om te beginnen met het initialiseren van de Swarm Manager op je implementatie.

Voor dit voorbeeld draait de Swarm Manager op het IP adres“192.168.5.100” en het standaard netwerk voor diensten op de Docker Swarm zal“10.10.0.0/16” zijn.

docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16

Nu zou je uitvoer moeten zien die lijkt op de volgende schermafbeelding wanneer de Swarm Manager wordt geïnitialiseerd. Ook zie je de instructie dat je worker nodes moet toevoegen aan je Docker Swarm inzet, inclusief het gegenereerde token dat je moet gebruiken.

zwerm initialiseren

Voer vervolgens het volgende docker commando uit om te controleren of de Zwermmodus is geactiveerd en ingeschakeld.

docker info

Je ziet dat de Zwermmodus“actief” is met als netwerk IP adres voor diensten“10.10.0.0/16“, wat hetzelfde is als de configuratie tijdens het initialisatieproces. Ook zie je dat het huidige knooppunt dat beschikbaar is op de Docker Swarm slechts“1” is.

controleer zwerm info

Controleer de lijst met beschikbare nodes op je Docker Swarm via het onderstaande“docker node” commando. En je zult zien dat er maar één node is op je Docker Swarm deployment.

docker node ls

controleknooppunten

Worker Nodes toevoegen aan Swarm

In Docker Swarm heeft de worker node hetzelfde concept als in andere container orkestratie, namelijk waar containers worden uitgevoerd en draaien. Op elk worker node moet de Docker Engine worden geïnstalleerd, en ook kan de worker worden gepromoveerd tot de “Swarm Manager”.

Tegelijkertijd kan de Swarm Manager ook gebruikt worden als worker node, wat betekent dat je applicatie ook op de Swarm Manager kan draaien.

Voer het volgende“docker swarm join” commando uit om de“worker1” en“worker2” servers toe te voegen aan de Docker Swarm. Zorg er ook voor dat je het token vervangt door het gegenereerde token in je omgeving.

docker swarm join \
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377

Als je de uitvoerboodschap krijgt zoals“Deze node heeft zich als worker bij een zwerm gevoegd”, betekent dit dat de worker node is toegevoegd.

Je kunt de soortgelijke uitvoer zien wanneer“worker1” en“worker2” zich bij de Docker Swarm voegen.

sluit knooppunt2 aan

Ga vervolgens weer naar de Swarm Manager en voer onderstaand docker commando uit om de lijst met nodes op je Docker Swarm te verifiëren.

docker node ls

Je zou drie nodes moeten zien op je Docker Swarm omgeving. In dit voorbeeld wordt de“swarm-manager1” gebruikt als de Swarm Manager, en zowel de“worker1” als de“worker2” servers wordt gebruikt als de worker node.

controleknooppunten

Daarnaast kun je de lijst met knooppunten ook controleren met het onderstaande docker commando.

docker info

Op de Swarm Manager server zie je de uitvoer in de volgende schermafbeelding. Er zijn 1 manager en 3 knooppunten (de zwerm-manager wordt ook als worker gebruikt).

zwermstatus controleren

Maar, op de“worker1” en“worker2” servers zie je de uitvoer zoals hieronder. Je ziet het IP-adres van de Zwerm-manager met de standaard TCP-poort 2377.

knooppuntstatus controleren

Op dit punt heb je de Docker Swarm implementatie met Rocky Linux voltooid. Vervolgens ga je de applicatie/service inzetten op je Swarm omgeving.

Diensten beheren op Docker Swarm

Wanneer je een applicatie uitrolt naar de Docker Swarm omgeving, wordt die applicatie een “service” genoemd. Het is een image van je microservice applicatie, en het kan een HTTP server, database server, of andere applicaties zijn.

Om een dienst op Docker Swarm te implementeren, moet je het basisimage dat je gaat gebruiken, de poorten, de specifieke naam van je dienst, en ook het aantal replica’s voor je dienst opgeven.

Je leert nu de basisimplementatie van je diensten op Docker Swarm.

In dit voorbeeld maak je een nieuwe dienst“test-httpd” aan met 1 replica en stel je poort“8000” bloot op de Swarm node. De image die je gaat gebruiken is“httpd:alpine“.

Voer het volgende“docker service” commando uit om een nieuwe dienst aan te maken.

docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine

service maken

Controleer nu de diensten op je Docker Swarm via onderstaand docker commando. Je zou moeten zien dat de dienst “test-httpd” draait en ook de TCP poort 8000 heeft blootgesteld met slechts 1 replica.

docker service ls

lijstdienst

Controleer vervolgens de details van je “test-httpd” dienst via onderstaand commando.

docker service inspect test-httpd
docker service inspect --pretty test-httpd

Hieronder zie je de gedetailleerde service van “test-httpd”.

dienstgegevens

Ook kun je de container controleren die op de “test-httpd” dienst draait via het “docker service” commando zoals hieronder.

docker service ps test-httpd

Je kunt zien dat de“test-httpd.1” container draait op de“swarm-manager1” server.

controleer containers

Open nu de poort“8000” op alle servers met het volgende firewall-cmd commando.

sudo firewall-cmd --add-port=8000/tcp

Controleer daarna de“test-httpd” dienst met het curl commando zoals hieronder. In dit voorbeeld is het IP-adres van“zwerm-manager1“192.168.5.100“.

curl 192.168.5.30:8000
curl -I 192.168.5.30:8000

Je ziet de standaard index.html pagina van de“test-httpd” dienst.

toegangscontainers

Diensten schalen op Docker Swarm

Nadat je de dienst op Docker Swarm hebt ingezet, leer je nu hoe je je diensten en toepassingen kunt schalen.

Voer het volgende commando uit om de “test-httpd” dienst te schalen naar 3 replica’s. Dit commando zal nog twee diensten van “test-httpd” aanmaken op worker nodes.

docker service scale test-httpd=3

schaaldienst

Controleer nu de lijst met draaiende diensten met het volgende commando. Je zou moeten zien dat er nog een “test-httpd” dienst draait op beide “worker1” en “worker2” servers.

docker service ps test-httpd

controlediensten

Controleer tenslotte de dienst via het onderstaande curl commando op zowel “worker1” als “worker2” servers. Als de service draait, zou je de standaard index.html pagina op je scherm moeten zien.

Service controleren op worker1.

docker ps
curl worker1:8000

toegangsdienstmedewerker1

Service controleren op worker2.

docker ps
curl worker2:8000

toegangsdienst knooppunt2

Diensten verwijderen op Docker Swarm

Je hebt de basis van het inzetten en schalen van diensten op Docker Swarm geleerd. Vervolgens ga je je Docker Swarm omgeving opruimen door de “test-httpd” service te verwijderen.

Voer het volgende commando uit om de dienst“test-httpd” uit de Docker Swarm te verwijderen.

docker service rm test-httpd

Controleer daarna de“test-httpd” service via het onderstaande“docker service inspect” commando. Je zou moeten zien dat de service is verwijderd.

docker service inspect test-httpd

Daarnaast kun je ook verifiëren via het onderstaande docker commando om de lijst met draaiende containers en images op je Swarm te controleren.

Je zou moeten zien dat de container is verwijderd en dat de httpd:alpine image beschikbaar is op alle servers.

docker ps
docker images

Conclusie

In deze gids heb je de Docker Swarm ingezet met drie Rocky Linux servers. Je hebt ook de installatie van Docker Engine op een Linux server geleerd en de configuratie van Firewalld op het Rocky Linux systeem. En tot slot heb je ook de basisapplicatie deployment naar Docker Swarm geleerd via het “docker service” commando.

Vanaf hier kun je nu je gecontaineriseerde applicaties met alle afhankelijkheden inzetten op de Docker Swarm. Je kunt ook meer Swarm Manager toevoegen om de hoge beschikbaarheid van je Docker Swarm omgeving in te stellen.