coinDéployer Dockercoins sur Swarm

Dockercoins est une application conçue pour démontrer l'utilisation de services interconnectés dans un cluster Docker Swarm. Chaque service collabore pour simuler la génération de "Dockercoins". Suivez ces étapes pour configurer et exploiter cette application efficacement.


🌐 Créer un Réseau

Pour permettre la communication entre les services Dockercoins, nous devons créer un réseau overlay.

1

Réinitialisez l’environnement Docker local :

eval $(docker-machine env host1)
2

Créez le réseau overlay :

docker network create --driver overlay dockercoins
3

Vérifiez la création du réseau :

docker network ls

Exemple de sortie :

NETWORK ID     NAME              DRIVER    SCOPE
7525d41e5c7d   bridge            bridge    local
abd253a47efb   docker_gwbridge   bridge    local
qqmlaabbqfsf   dockercoins       overlay   swarm
d939e61b94ce   host              host      local
qqvrzl7qm5bj   ingress           overlay   swarm
0fbd7326ecdf   none              null      local

🛠️ Déployer les Services

🗄️ Déploiement de Redis

Redis est utilisé comme base de données pour stocker les informations nécessaires à l’application.

1

Créez le service Redis :

docker service create --network dockercoins --name redis redis:5
2

Vérifiez que Redis est en état Running :

docker service ps redis

Exemple de sortie :

ID             NAME      IMAGE     NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
offw8coloofw   redis.1   redis:5   host2     Running         Running 9 seconds ago

⚙️ Déploiement des Services rng, hasher et worker

Ces services fonctionnent ensemble pour générer des Dockercoins.

1

Déployez les services :

docker service create --network dockercoins --name rng humboldtux/dockercoins_rng:0.1
docker service create --network dockercoins --name hasher humboldtux/dockercoins_hasher:0.1
docker service create --network dockercoins --name worker humboldtux/dockercoins_worker:0.1
2

Surveillez l’état des services :

docker service ps rng
docker service ps hasher
docker service ps worker

Exemple de sortie :

ID             NAME      IMAGE                            NODE      DESIRED STATE   CURRENT STATE                ERROR     PORTS
6bcmhoyszwce   rng.1     humboldtux/dockercoins_rng:0.1   host3     Running         Running about a minute ago

ID             NAME       IMAGE                               NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
hihafyns7zuf   hasher.1   humboldtux/dockercoins_hasher:0.1   host1     Running         Running 34 seconds ago

ID             NAME       IMAGE                               NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
snzn423gl8wy   worker.1   humboldtux/dockercoins_worker:0.1   host3     Running         Running 14 seconds ago

🌐 Déploiement de l’Interface Web

1

Créez le service webui :

2

Vérifiez que le service est en état Running :

3

Accédez à l’interface WebUI :

Ouvrez un navigateur et accédez à l’URL :

192.168.253.150 étant l'adresse IP du host1.


📈 Augmenter la Performance du Service Worker

Pour augmenter les performances, passez le service worker à l’échelle en augmentant le nombre de réplicas.

1

Passez à 8 réplicas :

2

Surveillez les réplicas :

Exemple de sortie :

3

Vérifiez le taux de génération dans la WebUI.


🌍 Déployer rng avec Global Scheduling

Pour garantir qu’un conteneur rng soit exécuté sur chaque nœud du cluster, utilisez le mode global scheduling.

1

Supprimez le service existant rng :

2

Recréez rng en mode global :

3

Vérifiez que chaque nœud exécute une instance rng :

Exemple de sortie :

4

Accédez à la WebUI pour observer l’impact sur le taux de génération.


🔄 Mise à Jour Progressive d’un Service (Rolling Update)

Un rolling update met à jour progressivement les instances du service pour éviter les interruptions.

  • Surveillez les mises à jour dans une fenêtre :

  • Dans une autre fenêtre mettez à jour l’image du service worker :


⚙️ Ajuster les Paramètres des Rolling Updates

Pour ajuster la vitesse des mises à jour, configurez les paramètres update-parallelism et update-delay.

1

Configurez 2 mises à jour en parallèle avec un délai de 5 secondes :

2

Testez un downgrade en revenant à la version précédente :

3

Surveillez la mise à jour :

Exemple de sortie :


🔩 Ajuster la Configuration des Rolling Updates

Pour améliorer la rapidité et l’efficacité des mises à jour, configurez le service worker avec des paramètres spécifiques :

1

Configurer pour 3 mises à jour en parallèle avec un délai de 2 secondes :

2

Repassez à la dernière version mise à jour :


🔧 Astuces pour Dépannage

⚠️ Service qui échoue à démarrer (Exemple : Redis, rng, worker ou webui)

  • Problème : Le service ne passe pas en état Running.

  • Solution :

    1. Vérifiez l’état des services :

    2. Analysez les logs des conteneurs en échec :

    3. Vérifiez les ressources des nœuds :

      • Redis et Elasticsearch nécessitent une mémoire suffisante.

      • Assurez-vous que chaque nœud dispose d’au moins 2 Go de mémoire.

🌐 Problème de réseau entre les services

  • Problème : Les services ne communiquent pas correctement.

  • Solution :

    1. Vérifiez que le réseau overlay existe :

    2. Inspectez le réseau pour confirmer que les services y sont connectés :

🔄 Mauvais équilibrage des conteneurs

  • Problème : Les services comme worker ou rng ne sont pas répartis correctement sur les nœuds.

  • Solution :

    1. Assurez-vous que les nœuds sont actifs et prêts :

    2. Utilisez le mode global pour rng pour forcer une instance sur chaque nœud :

🛑 Erreur pendant un Rolling Update

  • Problème : Certaines instances échouent après une mise à jour.

  • Solution :

    1. Réduisez la parallélisation des mises à jour :

    2. Surveillez les mises à jour avec :


📝 Résumé des Commandes

Commande

Description

docker network create

Crée un réseau overlay pour la communication.

docker service create

Déploie un service dans le cluster Swarm.

docker service update --replicas

Met à l’échelle le nombre de réplicas d’un service.

docker service rm

Supprime un service existant.

docker service ps <nom_service>

Affiche l’état des tâches d’un service.

docker service update --mode global

Force un service à s’exécuter sur chaque nœud.

docker service update --update-delay

Configure le délai entre les mises à jour des tasks.

docker logs <container_id>

Affiche les logs des conteneurs déployés.

docker network inspect <nom_reseau>

Inspecte un réseau pour voir les connexions actives.


🎯 Conclusion

L’application Dockercoins est un exemple idéal pour explorer l’orchestration de services interconnectés dans un cluster Docker Swarm. Vous avez commencé par créer un réseau overlay avec docker network create pour assurer la communication entre les services. Ensuite, vous avez déployé des services critiques comme Redis (base de données), rng (générateur aléatoire), hasher (calculateur de hash) et worker (simulateur de travail distribué). Enfin, vous avez exposé l’interface Web avec webui pour suivre en temps réel la génération des Dockercoins.

En augmentant le nombre de réplicas du service worker via docker service update --replicas, vous avez optimisé les performances de l’application et observé une augmentation notable du taux de génération de hashes. Grâce au Global Scheduling, vous avez assuré l’exécution uniforme de rng sur tous les nœuds du cluster, améliorant ainsi la résilience du déploiement. De plus, l’implémentation des Rolling Updates a permis de mettre à jour progressivement les services sans interruption, tout en ajustant les paramètres de mise à jour pour un contrôle plus précis.

Last updated