Préparation de docker swarm
Pré-requis à l’installation
Pré-requis techniques
Avoir défini une architecture technique adaptée au déploiement. Plus d’informations ici.
Configuration des machines
-
Les machines peuvent être physiques, virtuelles ou sur le cloud
-
Les machines doivent communiquer entre elles via le réseau, utiliser un adressage IP fixes
-
L’adresse IP doit être attribuée à une interface réseau disponible pour le système d’exploitation hôte
-
Ouvrir les ports suivants entre les machines (pour docker):
-
TCP port 2377 pour les communications managériales (cluster management)
-
TCP and UDP port 7946 pour les communications entre les nœuds
-
UDP port 4789 pour le trafic du réseau docker overlay
-
-
Autoriser le protocole IP 50 (ESP) pour le cryptage du réseau overlay
Pré-requis système et logiciels
Le système d’exploitation utilisé dans le cadre de ce document est Ubuntu 22 LTS. L’application est validée sur des environnements Debian/ubuntu, et est fonctionnelle sur tout système Linux récent, avec les pré-requis installés.
Nous conseillons, en tant que bonne pratique Linux, de distinguer les volumes de données systèmes, docker (le répertoire /var/lib/docker peut devenir très gros), et répertoires de datachain.
Pré-requis | Version | Commentaire et Installation |
---|---|---|
Docker |
20 minimum (Version actuelle 27.0.0) |
Cluster Swarm
Cette partie décrit succinctement la procédure de mise en œuvre d’un cluster Swarm multi nœud.
À noter que cette procédure est aussi valable pour une mise en place d’un cluster avec un seul nœud.
Création du cluster
Initialisation du cluster
Cette commande permet d’initier le cluster et de créer le premier nœud manager.
À exécuter une seule fois uniquement sur le host manager
$ docker swarm init [--advertise-addr <MANAGER-IP>]
Exemple :
$ docker swarm init --advertise-addr 192.168.99.100
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a
manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager'
and follow the instructions.
Vous pouvez tester la bonne instanciation du cluster :
$ docker info
Containers: 2
Running: 0
Paused: 0
Stopped: 2
...snip...
Swarm: active
NodeID: dxn1zf6l61qsb1josjja83ngz
Is Manager: *true*
Managers: 1
Nodes: 1
...snip...
On constate ici que le mode Swarm est bien activé sur le host manager et que le cluster est prêt à être utilisé.
Pour le mode seul nœud la procédure s’arrête ici. Pour procéder à l’ajout des nœuds supplémentaires cf § suivant
Ajouter des nœuds au cluster Swarm
À exécuter sur chacune des machines qu’on souhaite ajouter comme nœud
$ docker swarm join --token <MANAGER-TOKEN> <MANAGER-IP>:2377
Exemple :
$ docker swarm join \
--token
SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
This node joined a swarm as a worker.
Pour récupérer le token à nouveau depuis le manager :
$ docker swarm join-token worker
Vous pouvez tester l’ajout du nœud en exécutant la commande suivante sur le manager - plusieurs nœuds sont désormais référencés :
$ docker node ls
Configuration des nœuds pour le déploiement
Dans le cas d’un cluster swarm multi-nœuds, plusieurs méthodes peuvent être utilisées pour déployer les services sur les nœuds choisis. Le déploiement peut être effectué en fonction du nom de host auquel cas il n’y a pas de configuration complémentaire à faire.
Les services peuvent aussi être déployés selon un tag, en indiquant qu’un service donné sera déployé sur un ou plusieurs des nœuds contenant le tag "mon_tag".
L’affectation des tags des faits avec la commande suivante, en parant du principe qu’un nœud du cluster a pour nom "mon_worker".
docker node update --label-add deploy=mon_tag mon_worker
Préparation aditionnelles sur les machines
Comptes utilisateurs
Les services Datachain utilisent des comptes sans privilèges pour s’exécuter. Actuellement, nous avons des utilisateurs d’id 38330, 38331, qui appartiennent à un groupe d’id 38330. Ceci est notamment important pour les volumes dockers utilisés par les services. Dans le cas de volumes docker bindés (plus d’informations), le volume doit initialement être créé, et les droits doivent être affectés à l’utilisateur.
Pour éviter de travailler avec des ids, nous proposons de créer ces utilisateurs sur les machines. (Commande Debian/Ubuntu)
groupadd -g 38330 datachain
useradd -g datachain -ms /bin/bash -u 38330 dc && usermod -aG datachain dc
useradd -g maestro -ms /bin/bash -u 38331 dc && usermod -aG datachain maestro
sudo chown -R dc:datachain /opt/adobis
sudo chmod -r 770 /opt/adobis
Afin de maintenir les bons droits sur les répertoires, nous conseillons d’affecter à l’utilisateur qui permet de faire l’installation le groupe par défaut "datachain", avec le masque adapté, pour faire appartenir les nouveaux répertoires à ce groupe. Cependant, il est aussi possible de créer les répertoires avec un autre utilisateur, puis d’affecter la propriété au groupe a posteriori.
Répertoires
Les répertoires utilisés par l’application, notamment dans le cas de volumes bindés (plus d’informations), doivent être créés avant démarrage de l’application. Plus d’informations sur ces volumes ici.
Installation de Datachain
Prérequis
Des ressources suffisantes comme indiqué au chapitre pré-requis pour faire exécuter les services.
Une clé de déploiement valide pour se logger au registre docker Adobis, afin de récupérer les images docker DataChain ©.
Déploiement
Le déploiement de l’application se fait au moyen d’un fichier docker-compose, qui va permettre de configurer les modules à déployer, ainsi que leur paramétrage.
Nous fournissons dans les chapitres suivants des exemples de déploiement, permettant ainsi de déployer la solution dans la configuration la mieux adaptée à vos besoins.