======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//. Attention 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 [[https://docs.docker.com/engine/installation/|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'' =====Partie I : Installation de Docker Swarm===== 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. - [[https://docs.docker.com/engine/reference/commandline/swarm_init/]] - [[https://docs.docker.com/engine/reference/commandline/swarm_join/]] * 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 ? ===== Partie II : Usage d'un cluster swarm===== 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 ? ===== Partie III : Gestion des nœuds composant le cluster ===== * 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). =====Partie IV : Réseau overlay ===== 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éez votre réseau overlay==== 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.