Skip to content

Cluster Swarm avec Docker 1.12

swarm2

La version 1.12 de Docker est sortie en release candidate depuis quelques jours. Parmi les nouveautés, l’intégration de Docker-Swarm directement dans l’Engine ce qui permet entre autre le déploiement d’un cluster Swarm beaucoup plus simplement qu’avant. Je vais donc vous montrer cela dans cet article.

Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual Docker host.

Auparavant, il était relativement lourd de déployer un cluster de serveurs Dockers avec Swarm, il fallait générer des certificats, utiliser un services discovery, configurer chacun des nodes… Cette époque est révolue, aujourd’hui cela se fait en DEUX commandes.

Dans ce post, nous allons créer un petit cluster entre deux machines virtuelles.
Vous pouvez cependant répéter les opérations autant de fois que vous le souhaitez pour construire un plus gros cluster.

Nous allons utiliser deux VMs Ubuntu 16.04 et installer Docker 1.12 sur chacune d’elles :

(Si vous utilisez Ubuntu 14.04, remplacez « xenial » par « trusty« ).

Maintenant que vos deux machines virtuelles possèdent Docker 1.12, on va pouvoir créer notre cluster Swarm. Lancez cette commande sur la VM que vous souhaitez utiliser comme Master :

docker swarm init

Cette commande va initialiser votre cluster, il vous donnera à la fin la commande à lancer sur vos différents nodes, faites le sur différents nodes :

docker swarm join --secret b4imgvm35f5g3ecz4zb8onaac \
--ca-hash sha256:0477ebe823aec35703073c6j6529e62d3cb3g2c28d6d9e2bdfddcc69ebcad5c6 \
IP_Master_Swarm:2377

Avec cette seconde commande, votre node va rejoindre directement le cluster Swarm (en deux commandes, comme promis). Vous avez désormais un cluster Swarm !

tooeasy

C’est bien beau un cluster, mais qu’est-ce qu’on va en faire me diriez-vous ?

Pour aller un peu plus loin, on va déployer un service qui sera exposé sur nos nodes (port 8001) et qui sera load-balancé dans notre cluster. Dans notre exemple, on utilisera Nginx, mais cela peut-être n’importe quelle image. On lance donc ces commandes sur notre Master Swarm :

docker network create -d overlay nginx-network
docker service create --name nginx --network nginx-network --replicas 5 -p 8001:80/tcp nginx

Grâce à cette commande, on créer un réseau dédié à Nginx puis on créer notre service (nouveau concept de Docker) qui va exposer le port 8001 de notre serveur vers 5 containers dans notre cluster en load-balancing.
Sympa non ?

On peut voir nos containers avec cette commande :

docker service tasks nginx

nginx-replicas

On peut facilement scaler notre service selon nos besoins, par exemple :

docker service scale nginx=40

nginxscale40

Si vous voulez en savoir plus, voici la documentation de Docker Swarm.

Pour ma part, je trouve que cette mise à jour de Docker simplifie grandement l’utilisation de Swarm ce qui boost l’entreprise Docker Inc dans la guerre féroce des orchestrateurs de containers (Kubernetes, Mesos, Rancher…).

Published inCLI ToolsCloudDevOpsDockerLinuxTutoriel

7 Comments

  1. Florian Florian

    Sympa le post. En plus il y a la construction d’un container et ensuite un exemple. Parfait 😉

  2. Hello, très intéressant. J’ai déroulé tout ton article et ça marche par contre je vois qu’il crée un réseau interne dans mon cas 172.18.0.0/16 chaque contener prend une ip sur ce réseau mais si j’essaie de pinguer un conteneur sur le node1 et un autre sur le node2 ça passe pas. As-tu une idée ou faut mettre en place un réseau overlay entre les noeuds ?

    Slts

    • valentin valentin

      Salut,

      Pour permettre la création d’un réseau entre les deux nodes, il faut le préciser lors de la création du service, je l’ai rajouté lors de la création de Nginx dans l’article.

      Merci !

      • Par contre j’ai du le créer avant :
        $ docker network create -d overlay nginx-network

        Sinon j’au une erreur comme quoi le réseau n’existe pas :
        Error response from daemon: network nginx-network not found

        • valentin valentin

          Merci, je l’ai ajouté à l’article 😉

  3. Emil Emil

    Merci pour ce super article !

  4. Arthur Arthur

    Bonjour,

    Pour commencer merci pour l’article. Du coup si j’ai bien compris le manager s’occupe automatiquement de faire le load balancing entre les différentes instances ?! Sinon est-il possible de programmer le manager pour qu’il scale automatiquement le service en fonction du nombre de requêtes ?

    Merci d’avance.
    Arthur

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.