Comment installer et configurer un cluster Docker Swarm sur CentOS 8
Docker est un outil open-source qui peut être utilisé pour créer, déployer et exécuter des applications à l’aide d’un conteneur. Le conteneur te permet d’emballer une application avec toutes les dépendances requises et de l’expédier en un seul paquet.
Docker Swarm est un outil de mise en grappe utilisé pour gérer l’hôte Docker. Il te permet de transformer un groupe d’hôtes Docker en un seul serveur virtuel logique. De cette façon, tu peux faire évoluer ton application horizontalement et augmenter le nombre d’instances de conteneurs. L’essaim de Docker offre des fonctionnalités très utiles, notamment l’autoguérison des conteneurs, l’équilibrage des charges, la mise à l’échelle et la réduction des conteneurs, la découverte de services et les mises à jour continues.
Dans ce billet, nous allons te montrer comment configurer un cluster Docker Swarm sur CentOS 8.
Conditions préalables
- Deux serveurs exécutant CentOS 8.
- Un mot de passe root est configuré sur chaque serveur.
Installe Docker sur les deux nœuds
Tout d’abord, tu dois installer Docker sur les deux nœuds. Par défaut, la dernière version de Docker n’est pas incluse dans le référentiel par défaut de CentOS 8. Tu devras donc ajouter un repo Docker dans ton système.
Tu peux l’ajouter avec la commande suivante :
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Une fois le repo Docker créé, installe Docker avec la commande suivante :
dnf install docker-ce --nobest
Après avoir installé Docker, démarre le service Docker et active-le pour qu’il démarre au redémarrage du système avec la commande suivante :
systemctl start docker
systemctl enable docker
Tu peux aussi vérifier le statut de Docker avec la commande suivante :
systemctl status docker
Tu devrais obtenir la sortie suivante :
? 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"
Maintenant, vérifie la version installée de Docker à l’aide de la commande suivante :
docker --version
Tu devrais voir la sortie suivante :
Docker version 20.10.5, build 55c4c88
Configurer le pare-feu
Ensuite, tu devras autoriser les ports 2376, 2377, 7946 et 80 à travers le pare-feu sur les deux nœuds. Tu peux les autoriser avec la commande suivante :
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
Ensuite, recharge le firewalld pour appliquer les changements :
firewall-cmd --reload
Initialise le cluster Docker Swarm
Ensuite, tu devras initialiser le cluster Docker Swarm sur le nœud gestionnaire. Tu peux le faire avec la commande suivante :
docker swarm init --advertise-addr 45.58.32.185
Tu devrais obtenir la sortie suivante :
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.
Tu peux utiliser la commande indiquée dans la sortie ci-dessus dans le nœud Docker worker pour joindre le nœud au cluster.
Tu peux vérifier les informations du cluster Docker Swarm avec la commande suivante :
docker info
Tu devrais obtenir la sortie suivante :
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
Tu peux maintenant vérifier le nœud Docker Swarm avec la commande suivante :
docker node ls
Tu devrais obtenir le résultat suivant :
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5
Ajouter le nœud ouvrier au cluster Docker Swarm
Ensuite, tu devras ajouter le nœud ouvrier au nœud gestionnaire Docker Swarm. Tu peux le faire avec la commande suivante sur le nœud ouvrier :
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377
Tu devrais obtenir la sortie suivante :
This node joined a swarm as a worker.
Sur le nœud Docker Manager, vérifie le nœud ouvrier avec la commande suivante :
docker node ls
Tu devrais voir que le nœud ouvrier est ajouté à l’essaim Docker :
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5 bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5
Lancer un service dans Docker Swarm
Ici, nous allons créer un nouveau webservice Nginx et le mettre à l’échelle avec deux conteneurs. Tu peux le créer en exécutant la commande suivante sur le nœud Manager :
docker service create -p 80:80 --name webservice --replicas 2 nginx
Tu devrais obtenir la sortie suivante :
agyxlaswxakrbboakkyydsh0k overall progress: 2 out of 2 tasks 1/2: running [==================================================>] 2/2: running [==================================================>] verify: Service converged
Tu peux maintenant vérifier le webservice avec la commande suivante :
docker service ls
Tu devrais voir le résultat suivant :
ID NAME MODE REPLICAS IMAGE PORTS agyxlaswxakr webservice replicated 2/2 nginx:latest *:80->80/tcp
Tu peux aussi vérifier le conteneur en cours d’exécution avec la commande suivante :
docker ps
Tu devrais voir le résultat suivant :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c887cad1df2e nginx:latest "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 80/tcp webservice.2.jelyj9gmeb7ikl2scg7mz8yg8
Pour obtenir les informations détaillées du webservice, exécute la commande suivante :
docker service ps webservice
Tu devrais voir le résultat suivant :
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
Vérifier l’essaim de Docker
À ce stade, nous avons déployé un conteneur Nginx sur tous les nœuds du cluster, y compris le nœud de gestion. Tu peux maintenant accéder à ton serveur Web Nginx en utilisant l’une des adresses IP du nœud Worker ou du nœud Manager :
Conclusion
Dans le guide ci-dessus, tu as appris à configurer le cluster Docker Swarm sur CentOS 8. Tu peux maintenant ajouter un nombre quelconque de nœuds de travail au cluster Docker Swarm et faire évoluer ton application.