gemDéploiement et Orchestration avec Docker Swarm

Déploiement avec Docker Machine et Docker Swarm

🚀 Créer et Configurer les Machines Virtuelles

🛠️ Créer les Machines Virtuelles

docker-machine create --driver vmware host1
docker-machine create --driver vmware host2
docker-machine create --driver vmware host3

Chaque commande configure une machine virtuelle minimale avec Docker préinstallé.

🔍 Vérifier la Création

Listez les machines pour vérifier leur état :

docker-machine ls

Exemple de sortie :

NAME    ACTIVE   DRIVER   STATE     URL                          SWARM   DOCKER      ERRORS
host1   *        vmware   Running   tcp://192.168.253.150:2376           v19.03.12
host2   -        vmware   Running   tcp://192.168.253.151:2376           v19.03.12
host3   -        vmware   Running   tcp://192.168.253.152:2376           v19.03.12

🐳 Initialiser Docker Swarm

🔄 Réinitialiser l’Environnement Docker Local

Avant d’initialiser Docker Swarm, configurez votre environnement Docker pour pointer vers host1, car c'est cette machine qui sera utilisée comme manager.

1

Configurer l'environnement Docker pour host1 :

2

Trouver l’adresse IP de host1 :

Obtenez l’adresse IP de host1 avec la commande suivante :

Exemple de sortie :

Utilisez cette adresse IP pour l’initialisation du cluster.

🐳 Initialiser le Cluster Swarm

Initialisez le cluster Swarm sur host1 en utilisant son adresse IP :

Exemple de sortie :

Notez le token, vous en aurez besoin pour ajouter des nœuds.


🔗 Ajouter des Machines au Cluster

🖥️ Ajouter host2 comme Nœud

1

Configurer l'environnement Docker pour host2 :

2

Ajouter host2 comme nœud au cluster :

Utilisez le token généré lors de l'initialisation du cluster :

3

Vérifier l'ajout :

Revenez sur host1 (le manager) pour vérifier :

Exemple de sortie :

🌟 Ajouter host3 comme Manager

1

Générer un token pour ajouter un manager :

Sur host1, exécutez :

Exemple de sortie :

2

Configurer l'environnement Docker pour host3 :

3

Ajouter host3 comme manager :

4

Vérifier l'ajout :

Revenez sur host1 et exécutez :

Exemple de sortie :


💼 Promouvoir un Nœud du Cluster

1

Promouvoir host2 en Manager :

Depuis un manager, exécutez :

2

Vérifiez la promotion :

Exemple de sortie :


🎯 Exécuter un Service dans le Cluster

🚀 Créer un service avec docker service create

Pour lancer un service à partir de l'image alpine qui effectue un ping :

Exemple de sortie :

Le code affiché est l'identifiant unique du service (dans cet exemple, rn8iua29i44zwjl45v8dx6g2e).

🔍 Vérifier où le conteneur est déployé

Utilisez la commande suivante pour afficher les informations sur le service :

Exemple de sortie :

Cela montre que le service ping-test est déployé sur le nœud host1.

📜 Afficher les logs du conteneur

1

Connectez-vous au nœud exécutant le conteneur :

2

Identifiez l'ID du conteneur :

Exemple de sortie :

3

Affichez les logs :

Cela montre les pings exécutés par le conteneur.


🚀 Passer à l’échelle un service du cluster

Pour augmenter le nombre d'instances de votre service ping-test, utilisez la commande suivante :

🔍 Vérifiez les réplicas

Utilisez la commande suivante pour vérifier que les réplicas sont bien déployés :

Exemple de sortie :


📊 Passer à l’Échelle un Service avec 3 Copies par Hôte

🔄 Augmenter le Nombre de Réplicas pour Correspondre à 3 Copies par Hôte

Si vous avez trois nœuds dans votre cluster (par exemple : host1, host2, et host3), pour obtenir trois copies par hôte, vous devez ajuster le nombre total de réplicas en fonction du nombre de nœuds. Dans ce cas, cela signifie : 3 réplicas x 3 nœuds = 9 réplicas au total.

1

Mettre à l’échelle le service ping-test à 9 réplicas :

2

Vérifier que les réplicas sont bien répartis sur les trois nœuds :

Exemple de sortie attendue :

3

Vérifier l'équilibrage des réplicas : Chaque nœud (host1, host2, host3) doit exécuter exactement 3 copies du service ping-test.


🌐 Exposer un Service

🔑 Concepts Clés : Pourquoi exposer un service ?

  • Portabilité des services : Docker Swarm permet de rendre un service accessible via un port public sur tous les nœuds du cluster.

  • Équilibrage de charge : Les requêtes entrantes sont automatiquement réparties sur toutes les instances du service, quelle que soit leur localisation dans le cluster.

  • Accessibilité uniforme : Le service reste accessible via n'importe quel nœud, sans que le client sache exactement où se trouvent les conteneurs.

⚙️ Déploiement d'un Service Elasticsearch

🚀 Créer le Service Elasticsearch

Elasticsearcharrow-up-right est un moteur de recherche basé sur Lucene, utilisé pour indexer et rechercher des données. Il fournit une API REST simple pour interagir avec les données.

1

Créer un service nommé search avec 4 réplicas :

  • --name search : Nomme le service.

  • --publish 9200:9200 : Expose le port interne 9200 sur le port public 9200 de chaque nœud.

  • --replicas 4 : Crée 4 instances du service Elasticsearch.

  • elasticsearch:8.16.1 : Utilise l’image officielle Elasticsearch version 8.16.1.

⚠️ Remarque :

  • Elasticsearch nécessite au moins 2 Go de mémoire pour fonctionner correctement. Assurez-vous que vos nœuds ont suffisamment de ressources.

  • Vous pourriez rencontrer des erreurs de configuration liées à la mémoire ou à l’environnement réseau d’Elasticsearch.

🔍 Vérifier le Déploiement du Service

1

Lister les services actifs :

Exemple de sortie :

  • MODE : replicated indique que le service est répliqué.

  • REPLICAS : Montre combien d'instances fonctionnent (par exemple, 0/4 signifie qu'aucune instance n’est encore prête).

  • PORTS : Indique que le port 9200 est exposé sur tous les nœuds.

2

Observer le statut des réplicas :

Exemple de sortie :


🗑️ Supprimer un Service

Une fois les tests terminés, vous pouvez supprimer les services déployés sur votre cluster, comme ping et search.

🛠️ Supprimer les services actifs

Utilisez la commande suivante pour supprimer tous les services en cours d'exécution :

  • docker service ls -q : Liste uniquement les identifiants (ID) des services actifs.

  • docker service rm : Supprime les services spécifiés.

🔍 Vérification de la suppression

Pour confirmer que tous les services ont été supprimés, exécutez :

Exemple de sortie attendue (vide) :

Aucun service n'apparaît dans la liste, indiquant qu'ils ont bien été supprimés.


🔧 Astuces pour Dépannage

⚠️ Erreur lors de l’ajout d’un nœud Si un nœud ne parvient pas à rejoindre le cluster, voici les actions à entreprendre :

  • Vérifiez que la machine virtuelle est active dans VMware :

  • Assurez-vous que le démon Docker est actif sur la machine :

  • Vérifiez la connectivité réseau entre le manager et le nœud :

🌐 Problème d’adresse IP incorrecte

Si l'adresse IP spécifiée dans --advertise-addr est incorrecte, corrigez-la :

1

Obtenez l’adresse IP correcte :

2

Assurez-vous que cette IP est accessible depuis les autres nœuds :

🔄 Réinitialisation du Cluster Swarm

Si le cluster ne fonctionne plus correctement, réinitialisez-le proprement :

1

Quittez le cluster sur les nœuds défectueux :

2

Réinitialisez le cluster sur le manager :

🛑 Problèmes de ressources (Mémoire/CPU)

Si certains services échouent (ex. : non-zero exit (1) ou 137) :

1

Augmentez les ressources des machines virtuelles dans VMware.

2

Identifiez les problèmes spécifiques via les logs :


📝 Résumé des Commandes

Commande

Description

docker-machine create

Crée une nouvelle machine virtuelle.

docker-machine ls

Liste toutes les machines Docker.

docker-machine ip <nom_machine>

Affiche l’adresse IP d’une machine.

docker swarm init

Initialise un cluster Docker Swarm.

docker swarm join

Ajoute un nœud au cluster Swarm.

docker swarm join-token manager

Génère un token pour ajouter un manager.

docker node ls

Liste les nœuds du cluster.

docker node promote <nom_nœud>

Promeut un nœud en manager.

docker node demote <nom_nœud>

Rétrograde un manager en nœud worker.

docker service create

Crée un service dans le cluster.

docker service ls

Liste tous les services actifs.

docker service ps <nom_service>

Affiche les tâches associées à un service.

docker service update

Met à jour un service existant (scaling, etc).

docker service rm <nom_service>

Supprime un service du cluster.

docker logs <id_conteneur>

Affiche les logs d’un conteneur.


🎯 Conclusion

Cette documentation vous a guidé à travers toutes les étapes nécessaires pour déployer et gérer un cluster Docker Swarm. En créant plusieurs machines virtuelles avec docker-machine, vous avez appris à configurer un environnement Swarm robuste avec un manager et des nœuds workers. L’initiation du cluster avec docker swarm init et l’ajout de nœuds via docker swarm join vous ont permis de bâtir une infrastructure distribuée efficace.

L’exécution des services à l’aide de docker service create et leur mise à l’échelle dynamique avec docker service update --replicas démontrent la puissance de Swarm pour l’orchestration de conteneurs. Grâce au réseau overlay, les services comme Dockercoins peuvent communiquer de manière transparente sur l’ensemble du cluster. L’intégration du Global Scheduling a mis en lumière la capacité de Swarm à exécuter des services uniformément sur tous les nœuds, tandis que les Rolling Updates ont illustré la mise à jour progressive des services sans interruption.

L’application Dockercoins a servi d’exemple concret pour orchestrer plusieurs services interdépendants et suivre leurs performances en temps réel via une interface Web. En cas de problèmes, les astuces de dépannage vous ont fourni les outils pour résoudre des erreurs courantes, telles que les défaillances réseau, les adresses IP incorrectes et les limites de ressources.

Last updated