cloud:2017:tp_swarm

Sujet de TP : Mise en oeuvre de Docker Swarm

  • M2 TI+DS, SRIV
  • 2016/2017
  • JP GELAS, F RICO, R CHANU

L'objectif de ce TP est de se familiariser avec la solution de clusterisation proposée par Docker et nommée Swarm. Comme vu en cours, il existe des solutions alternatives que nous n'explorerons pas dans le cadre de ce TP (ex: Kubernetes).

La plateforme que nous vous proposons de constituer est la suivante. En nous appuyant sur l'infrastructure OpenStack de Lyon 1 https://cloud-info.univ-lyon1.fr/horizon, pour obtenir des informations sur comment se connecter : https://documentation.univ-lyon1.fr/ . Dans le projet TIW ou SRIV-SCV nous déploierons au préalable 3 petites machines virtuelles (m1.xsmall est suffisant). L'une sera utilisée comme manager, et les deux autres comme worker. <hi #ffc90e>Attention</hi> Pour ce TP nous avons préparer une image avec docker installé et configuré qui fonctionne à l'université. Vous devez créer vos instance à partir d'un snapshot et choisir celui nomé snap-docker-ready

Si vous utilisez des machines en dehors de l'université, installer bien une version de docker récente (>=1.12) et le paquet docker-engine dont l'installation est décrite ici. Le paquet docker.io présent par exemple sur ubuntu est justement une version de docker sans swarm

NB: La commande ci-dessous vous permettra d'avoir un visualisateur de votre infrastructure déployée (http://IP:8080):

docker service create –name=viz –publish=8080:8080/tcp –constraint=node.role==manager –mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer

L'installation de base se fait à présent de manière très simple. Tout d'abord sur la VM qui hébegera le manager :

docker swarm init --advertise-addr 192.168.XXX.YYY
  • OOO Que fait cette commande ? Expliquez/Décrivez succinctement.

Puis sur chacun des workers

# docker swarm join --token letokenrenvoyeparleswarminit 192.168.XXX.YYY:2377
  • OOO Que fait cette commande ? Expliquez/Décrivez succinctement.

Remarque : Pour chacune des questions vous trouverez des éléments de réponse dans la documentation officiel de Docker Swarm.

  • OOO Quelle commande peut on utiliser pour lister et vérifier la liste des workers à disposition ?
  • OOO Imaginons que vous souhaitiez ajouter un nouveau nœud worker et que vous avez égaré le token de votre cluster swarm. Quelle commande vous permet de le récupérer ?
  • OOO Est il possible d'avoir plusieurs machines qui tiennent le rôle de manager (au même titre que plusieurs machines sont des workers). Comment fonctionnent t-ils ?
  • OOO Sortez un worker du cluster puis remettez le. Quelles commandes saisissez-vous ?

Exécutons trois instances de nginx dans notre cluster swarm.

(manager)# docker service create --name Web --publish 80:80 --replicas=3 nginx:latest
  • OOO Quelle commande utilise-t-on pour lister tous les services créés ?
  • OOO Quelle commande utilise-t-on pour lister toutes les instances du service ?
  • OOO Quelle commande utilise-t-on pour obtenir des informations détaillées sur un service ? (inspect)
Comment étendre un service ?

Afin d'avoir à présent cinq instances de notre service

(manager)# docker service scale Web=5

On peut également réduire le nombre de services (scale down)

(manager)# docker service scale Web=1

Supprimons à présent notre service

(manager)# docker service rm Web
Maintient automatique du service

Si nous avons défini un service avec un nombre donné de replicas, le Swarm manager est en charge de s'assurer de maintenir cet état. Pour vous en assurer :

  • instanciez trois réplicas d'un service (voir commande précédante);
  • Connectez vous sur l'une des machines de travail hébergeant l'un de ces réplicas et détruisez brutalement le docker (docker kill …).
  • Que se passe t-il au bout de quelques secondes ?
  • À présent stoppez directement la machine de travail. Que se passe t-il ?
  • On souhaite éteindre un nœud physique (de type worker) pour effectuer une opération de maintenance sur ce dernier. Quelle procédure aller vous suivre (ou Quelles commandes allez vous saisir ? ) pour faire cela proprement.
  • Expliquez brièvement la notion de promotion d'un nœud worker (promote/demote).

Supprimez tous les services utilisés précédemment, vous allez en relancer un seul avec un unique réplicas :

docker service create --name nginx -p 80:80 --replicas 1 nginx

Ensuite, retrouvez sur quel nœud de calcul se trouve le docker. Le nom du docker est un peu différent du nom du service, Grâce à la commande

docker logs -f nomdudocker

afficher les logs du docker nginx. Puis avec votre navigateur tentez de contacter le serveur web sur vos 3 machines.

  • Que constatez-vous ?
  • Quel réseau utilise le docker ? (utilisez la commande docker inspect …)
  • Afficher la liste des réseau, quel est le driver de ce réseau ?

Créer un réseau 172.21.21.0/24 avec le driver overlay. Ajoutez lors de sa création l'option attachable. Cette option vous permettra de créer des docker utilisant le réseau sans être géré par swarm.

  • Sur l'un des nœuds du cluster, lancez un docker mysql avec le mot de passe administrateur toto et l'adresse 172.21.21.3
  • Sur un autre noeud du cluster, lancer un docker phpmyadmin qui écoute sur le port 8080 et peut se connecter à cette base mysql.
  • cloud/2017/tp_swarm.txt
  • Dernière modification : 2018/03/09 15:44
  • de jean-patrick.gelas