Installation de Swarmpit pour gérer facilement un cluster Docker Swarm

Swarmpit (à ne pas confondre avec Brad Pitt …) est une interface Web légère et relativement intuitive permettant de gérer un cluster Docker Swarm.

L’installation de Swarmpit est relativement simple: on va se connecter sur le manager de notre cluster Docker Swarm et nous allons exécuter la commande ci-dessous:

sudo docker run -it --rm \
--name swarmpit-installer \
--volume /var/run/docker.sock:/var/run/docker.sock \
swarmpit/install:1.9
Installation de Swarmpit

Nous pouvons maintenant nous connecter sur le tableau de bord Swarmpit via l’URL suivante:

http://managercentos8:888
Tableau de bord Swarmpit

Déploiement d’un service

Nous allons déployer un service tout simple qui va nous permettre de vérifier que notre Swarm fonctionne correctement.

Dans le menu « Services », nous allons donc cliquer sur « New service »:

Création d’un premier service

Ensuite, nous allons rechercher l’image « topmonks/docker-napp » dans le « repository » public:

Installation service docker-napp

Sur la page suivante, nous allons définir quelle version de l’image utiliser. La dernière version semble la plus indiquer. Nous allons donc choisir « latest ».

Pour le nom du service, vous avez la possibilité de ne pas le renseigner et un nom aléatoire sera attribué au service. Pour ma part, je préfère le renseigner avec un nom intelligible.

Nous allons ensuite choisir le mode de déploiement:
– « global »: un service va être mis en place sur chaque noeud du cluster
– « replicated » : permet d’obtenir plusieurs instances d’un même service sur un même noeud

Configuration du service docker-napp

L’étape suivante va consister à définir les paramètres réseau de notre service: nous allons exporter le port 8080 de notre container au travers du port 9001:

Configuration réseau pour le service docker-napp

On peut ensuite configurer divers éléments très importants mais qui ne sont d’aucun intérêt pour ce container:
– des variables d’environnement
– des points de montage
– des configurations
– des secrets

Configuration des variables et des points de montage pour le service docker-napp

Nous allons ensuite définir les ressources processeur et mémoire nécessaires à l’exécution du service. Dans notre cas, nous allons tout laisser par défaut:

Définition des ressources pour le service docker-napp

La page suivante va nous permettre d’ajouter des « labels » à notre service et surtout de définir la stratégie de déploiement.

Dans mon cas, j’ai choisir de déployer le service uniquement sur des noeuds de type « worker ». Cela se traduit donc par la contrainte : « node.role == worker ».

Définition de l’emplacement du service docker-napp

Enfin, nous allons définir la méthode de log du service en laissant les paramètres par défaut:

Définition de la log du service docker-napp

Le service va alors se déployer sur les 2 noeuds.

Nous allons maintenant tester la distribution des requêtes au sein de notre cluster en appelant plusieurs fois le service (192.168.0.105 est l’adresse IP du manager :

curl http://192.168.0.105:9001

On voit bien ci-dessous que les appels du service sont traités indifféremment par les 2 noeuds du cluster. Well done!

Test de l’équilibrage de charge

Création d’un Docker Swarm basé sur des noeuds CentOS 8 virtualisés sur ESXi

J’ai décidé de migrer mes 30 containers Docker hébergés sur mon NAS Synology sur une solution plus sécurisée et plus performante basée sur un Docker Swarm lui même hébergé sur ESXi.

Un Docker Swarm peut-être vu comme un essaim de machines exécutant Docker. Au sein d’un Swarm, on distingue 2 types de noeuds:
– le manager
– le ou les workers

Le manager a pour rôle d’intégrer de nouveaux noeuds au sein du Swarm et de piloter l’installation de containers.

Les workers servent uniquement à exécuter les précédents containers.

Mon architecture va donc se composer de:
– 1 manager CentOS 8
– 2 workers CentOS 8

Les 3 noeuds seront des machines virtuelles CentOS 8 hébergées sur ESXi. Nous allons donc voir maintenant comment installer les 3 noeuds.

Téléchargement de l’image ISO de CentOS 8

Nous allons donc aller télécharger l’image ISO la plus récente de CentOS (à ce jour, il s’agit de la version 8). Pour cela, il suffit de se rendre sur le site officiel CentOS et de cliquer sur la distribution CentOS Linuxhttps://sys64738.fr/wp-content/uploads/2020/10/0.-Site-Web-CentOS.png.

Site Web officiel du projet CentOS

Nous allons ensuite choisir de télécharger l’ISO de la version 8 pour l’architecture x86/x64:

Page de téléchargement des images ISO de CentOS 8

Il faut ensuite déterminer le miroir depuis lequel nous allons télécharger l’image ISO. Dans mon cas, j’ai choisi le premier miroir français:

Téléchargement de l’image ISO depuis le site miroir

Une fois arrivé sur le miroir français, il faudra choisir ISO DVD qui servira à l’installation sur ESXi:

Téléchargement de l’image ISO DVD

Téléchargement de l’image de CentOS 8 dans un DataStore de l’ESXi

Une fois l’image ISO CentOS 8 téléchargée, nous allons la mettre à disposition dans une des banques de données (DataStore) de notre ESXi. Pour cela, nous allons donc nous connecter à notre ESXi et ouvrir le navigateur de banque de données:

Exécution du navigateur de banque de données

Je vais donc télécharger l’ISO dans le répertoire ISO de mon DataStore SSD:

Choix du répertoire accueillant l’ISO CentOS 8 dans le DataStore

Le téléchargement va commencer et durera quelques minutes:

Téléchargement de l’ISO CentOS 8 dans le DataStore

Création des machines virtuelles CentOS 8 sur ESXi

Nous allons donc passer à la création des machines virtuelles CentOS 8 sur notre ESXi. Il suffit donc de se connecter à l’ESXi et de cliquer sur « Créer/Enregistrer une machine virtuelle »:

Création d’une machine virtuelle CentOS 8

Nous n’allons pas déployer de machine virtuelle à partir d’un fichier OVF mais la créer depuis le début:

Création d’une machine virtuelle « from scratch »

Il faut ensuite choisir un nom pour notre VM ainsi que:
– La compatibilité
– Le système d’exploitation utilisé par la VM
– La version du système d’exploitation utilisé par la VM

Définition des paramètres de la VM

Ensuite, il faut définir le DataStore sur lequel sera stocké la VM:

Choix du DataStore servant de support à la VM

La prochaine étape consiste à définir le matériel virtuel. Ici, rien d’exceptionnel: je vais juste augmenter la quantité de RAM à 4Go et la taille du disque dur à 40Go:

Définition des paramètres matériels de la VM

Il ne reste plus qu’à valider le récapitulatif des paramètres:

Récapitulatif des paramètres de la VM

La prochaine étape va consister à faire démarrer la machine virtuelle sur l’image ISO CentOS 8 téléchargée précédemment. Pour cela, nous allons revenir modifier les paramètres de la VM:

Modification des paramètres de la VM

Nous allons donc router le lecteur de CD/DVD virtuel vers un fichier ISO:

Modification du lecteur de CD/DVD virtuel

Et nous allons chercher l’image ISO CentOS 8 téléchargée précédemment dans un des DataStore de l’ESXi:

Choix de l’image ISO de démarrage

Pour finir, il faudra ne pas oublier de cocher « connecter lors de la mise sous tension »:

Connecter le lecteur virtuel dès la mise sous tension de la VM

Démarrage de la machine virtuelle et paramétrage de CentOS

Nous pouvons maintenant démarrer le premier noeud:

Mise sous tension de la VM

La VM va alors présenter un menu de démarrage dans lequel nous allons choisir la première option; à savoir, l’installation de CentOS Linux 8:

Menu de démarrage de la VM CentOS 8

Au bout de quelques minutes, le programme d’installation va nous proposer de définir la langue utilisée:

Définition de la langue

L’étape suivante consiste à définir la partition d’installation de CentOS 8:

Choix de la partition d’installation

On va simplement choisir le disque local et laisser la configuration du stockage en automatique:

Sélection du disque de destination et de la méthode de stockage

La prochaine étape consiste à choisir quelle version de CentOS nous allons installer:

Sélection de la version de l’OS

Nous allons donc choisir la version la plus légère de l’OS: à savoir une installation serveur sans interface graphique:

Choix de la version serveur sans interface graphique

La prochaine étape consiste à définir le nom de la VM sur le réseau et à configurer les paramètres réseau:

Configuration des paramètres réseau

La première étape consiste à définir le nom sur le réseau. Le nom de cette première VM sera donc « node1centos8 ». Nous créerons ensuite 2 autres VM identiques nommées « node2centos8 » et « managercentos8 ».

Définition du nom de la VM

En ce qui concerne les paramètres réseau, je laisse tout par défaut donc la gestion se fait via mon DHCP puis j’active le réseau:

Activation du réseau

L’étape suivante consiste à définir la date et l’heure:

Définition de la date et de l’heure

Je vais utiliser le serveur de temps français « fr.pool.ntp.org »:

Définition du serveur NTP français

Nous allons spécifier que le système doit utiliser uniquement ce serveur NTP:

Activation du serveur NTP français

Voilà, nous allons pouvoir commencer l’installation en cliquant sur « Commencer installation »:

Lancement de l’installation

Les 2 dernières étapes à effectuer avant l’installation proprement dite sont la définition d’un mot de passe administrateur:

Définition du mot de passe administrateur

Nous allons donc créer un mot de passe pour l’utilisateur « root »:

Création du mot de passe pour l’utilisateur « root »

Last but not least, nous allons créer un utilisateur doté des privilèges administrateur:

Création d’un utilisateur administrateur

Donc, on crée un nouvel utilisateur en n’oubliant pas de cocher « Faire de cet utilisateur un administrateur »:

Définition du nouvel utilisateur

On peut maintenant cliquer sur « Terminer la configuration »:

Fin de la configuration

Au bout de quelques minutes, le système va nous demander de redémarrer:

Premier redémarrage

A l’issue du redémarrage, nous allons obtenir un bel écran de connexion où nous allons nous identifier avec l’utilisateur précédemment créé:

Première authentification

Pour plus de confort, nous allons activer l’interface Web Cockpit en entrant la commande suivante: systemctl enable --now cockpit.socket

Activation de la console Cockpit

Nous pouvons désormais nous connecter à l’interface Web en utilisant l’URL https://node1centos:9090

Authentification sur la console Web

Personnalisation de l’installation

Nous allons commencer par désactiver « SELinux » en éditant le fichier « /etc/selinux/config ».

Désactivation de SELinux

Il suffit de modifier la ligne débutant par SELINUX et en l’initialisant à « DISABLED »:

Modification du fichier de configuration

Nous allons vérifier que la désactivation est bien effective:

Vérification de la désactivation de SELinux

La deuxième étape consiste à désactiver le firewall en utilisant la commande sudo systemctl disable firewalld

Désactivation du firewall

Nous allons vérifier que le firewall a bien été désactivé:

Vérification de la désactivation du firewall

Le paramétrage suivant consiste à installer « yum-utils » via la ligne de commande suivant : sudo yum install yum-utils

Installation de yum-utils

Nous allons ensuite ajouter le repository Docker-ce via la commande sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Ajout du repository Docker-ce

Nous allons maintenant supprimer PODMAN qui pourrait interférer avec Docker via la commande sudo yum -y remove podman

Suppression de PODMAN

Idem avec BUILDAH via la commande sudo yum -y remove buildah

Suppression de BUILDAH

Nous allons maintenant procéder à l’installation de Docker-ce via la commande sudo yum install -y --nobest docker-ce

Installation de Docker-ce

Une fois l’installation terminée, nous allons activer Docker via la commande sudo systemctl enable --now docker

Activation de Docker

Voilà, notre premier noeud est fin prêt. Il va maintenant falloir créer :
– un deuxième noeud que je baptiserai « node2centos8 »
– un manager dénommé « managercentos8 »

Une fois les 3 VM créées, nous allons pouvoir passer à l’initialisation du manager via la ligne de commande ci-dessous:

sudo docker swarm init --advertise-addr 192.168.0.105

Initialisation du manager Swarm

Lors de l’initialisation, le système nous dit que l’adjonction d’un noeud au Swarm est désormais possible via la commande ci-dessous:

docker swarm join --token SWMTKN-1-5rvbt329bmh2udntrzki6t3rjvnt86igqycao0mxxwz06pkjnf-dettpllz388e8buanzgcgs4sv 192.168.0.105:2377

Nous allons donc ajouter les 2 noeuds au Swarm:

Ajout des noeuds au Swarm

Voilà, c’est fini: notre swarm est désormais actif avec un manager et 2 noeuds. On peut vérifier la configuration via la ligne de commande ci-dessous:

sudo docker node list

Visualisation des noeuds du Swarm