Accueil > docker > Docker ! Swarm ! Arrimage !

Docker ! Swarm ! Arrimage !


Désolé, nouvelle remontée de « Goldorak ».

Il est grand temps de reprendre cette petite série d’articles sur Docker, et de relier mes trois nœuds Docker indépendants en un cluster Docker, en utilisant le mode Swarm.

Pour rappel :

Avertissement

Cette série d’article ne vise rien d’autre qu’à formaliser ma découverte de la conteneurisation d’applications sous Docker.

L’utilisation de Docker en production demande de mettre en place une politique de sécurité, des sauvegardes, une redondance du stockage, etc

Activation du mode swarm

Pour le moment, j’ai trois nœuds Docker totalement indépendants. Un container (grosso modo une application)  lancée sur un nœud y reste, et si le nœud en question est éteint, l’application devient inaccessible.

Pour simplifier, le mode swarm permet d’éviter ce problème, en considérant l’ensemble des nœuds Docker comme une seule machine Docker, un swarm (essaim en français).

D’autres produits logiciels permettent d’atteindre le même but, mais pour le moment au moins, Swarm fera l’affaire.

Le principe de base

  1. Désigner un nœud comme manager
  2. Activer le mode swarm de Docker sur le manager
  3. Relier des nœud « workers » au manager
  4. Lancer des services, applications, etc en passant par le manager

nota: un manager n’est qu’un worker un peu particulier, et des applications et services conteneurisés pourront s’y exécuter.

Initialisation du swarm

J’ai choisi d’utiliser le nœuds island1 (adresse IP 192.168.0.11) comme manager.

Une fois connecté sur island1 avec le compte user1, il suffit d’une ligne de commande : docker swarm init –advertise-addr 192.168.0.11 .

L’option « –advertise-addr 192.168.0.11 » spécifie que des nœuds docker peuvent rejoindre le swarm via l’adresse ip 192.168.0.11 .

$ docker swarm init --advertise-addr 192.168.0.11
Swarm initialized: current node (ictdgwdx9x3o52a5lzgudxrxe) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join \
 --token SWMTKN-1-092t7vsiejgmz1i60gro2ww90m8qpiz2jb51k3pxrxuxvnzyih-c04351o9o94cj2jln1gsejni0 \
 192.168.0.11:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

$

La ligne « warm initialized: current node (ictdgwdx9x3o52a5lzgudxrxe) is now a manager. » affichée confirme que le nœuds island1 est le nœuds manager (ou leader)  du swarm.

Ajouter un autre manager

Et oui, une nouvelle commande à apprendre ! Je suis certain qu’il existe des interfaces graphiques ou des applications web pour faire la même chose, mais ce sera pour plus tard.

Le résultat de l’initialisation du swarm (docker swarm init …) donne la marche à suivre :

To add a manager to this swarm, run 'docker swarm join-token manager' 
and follow the instructions.

Mon cluster est très réduit, et un seul manager devrait suffire.

Ajouter un nœud au swarm

Dans son immense bonté, la commande « docker swarm init » nous a indiqué comment procéder :

To add a worker to this swarm, run the following command:

docker swarm join \
 --token SWMTKN-1-092t7vsiejgmz1i60gro2ww90m8qpiz2jb51k3pxrxuxvnzyih-c04351o9o94cj2jln1gsejni0 \
 192.168.0.11:2377

Un copier coller plus tard dans une session ssh sur island2 avec le compte user2, le swarm possède deux nœuds.

nota : si cette commande ne fonctionne pas et retourne une erreur, il suffira de la retaper sur une seule ligne (sans les caractères \ )

Lister les noeuds du swarm

La commande « docker node ls »  sur le nœud manager (ou leader) affiche une liste des nœuds du swarm.

$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
99wkpu0uvdmyrz79yexrhyhj1 * island1 Ready Active Leader
v5bmwkqshl1qexv9nhj7a3na1 island2 Ready Active 
$

Pour le moment, seuls le nœud principal island1 et le nœud island2 apparaissent.

Le troisième nœud peut maintenant être ajouté

Retirer un nœud du swarm

Cette commande pourra être utile, pour retirer temporairement ou non un nœud du swarm : docker swarm leave

$ docker swarm leave
Node left the swarm
$

Un petit test

Tentons le classique des classiques, j’ai nommé « Hello World! », sur le nœud island1

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
$

 

« Et ça marche ! » comme dirait Garcimore.

Évidemment, il faudra tester le swarm docker avec de vraies services et de vraies applications.

Une petite question, en passant…

« Et ça marche ! », oui, mais où ? Sur quel nœud ?

On peut supposer que Docker lancera le container d’une application ou d’un service sur le nœud le moins chargé en charge CPU, en charge mémoire, en charge réseau… mais à moins de s’y intéresser de près, et bien, à priori, on ne sait pas, et c’est ce qu’on demande à Docker Swarm.

Point d’étape

Je dispose maintenant d’une (tout) petit cluster Linux, sur lequel tourne un swarm Docker. Les tests de base  montrent que  des images Docker simples fonctionnent sans problème.

Plus haut, j’écrivais « Mon cluster est très réduit, et un seul manager devrait suffire » . En effet, avec trois workers seulement, créer plusieurs managers n’aurait que peu d’intérêt.

Pourtant, j’ai eu tort : mon manager attend toujours son autopsie. Heureusement, en détachant du swarm mes deux workers restant, et en recréant un swarm, j’ai encore de quoi expérimenter. En cas de nouvelle défaillance d’un nœud, je devrai avoir recours à des VM (machines virtuelles) hébergées sur mon PC de bureau.

Et maintenant ?

On va maintenant pouvoir commencer à utiliser le swarm pour des choses un peu plus sérieuses, par exemple des services de type NAS ou de type auto-hébergement pourrait être intéressante.

Autres billets sur le sujet

 

Creative Commons License

Publicités
Catégories :docker Étiquettes :
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :