cloud:2017:tp_swarm2

Ceci est une ancienne révision du document !


Ce TP est assez court. En effet, nous comptons faire un TP noté le 9/2 ce dernier portera sur votre capacité à configurer un petit cluster de calcul en utilisant docker. Une part importante de la note dépendra de votre état d'avancement à la fin du TP. Si vous terminez votre TP avant la fin d la séance, il vous ai donc conseillé de vérifier l'état de vos connaissance sur les opérations des TPs précédant.

Docker machine est un script qui permet de générer des machines virtuelles et d'installer docker automatiquement. Il est capable d'utiliser plusieurs hyperviseurs comme virtutalbox ou openstack mais aussi les fournisseurs de cloud publiques : AWS, Azure … Vous avez une documentation plus spécifique à openstack ici

Certaines requêtes de docker machine utilisent un port inhabituel qui est filtré sur le réseau wifi. Vous devez donc utiliser les machines de l'université et télécharger le script par la commande :

curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > docker-machine \
&& chmod +x ./docker-machine

La commande docker-machine est assez simple car elle signale la plupart des options qui lui manque. La commande de création est documentée ici, les options relatives à //openstack// là. Vous devez savoir que :

  1. le driver est openstack
  2. l'url d'authentification est http://cloud-info.univ-lyon1.fr:5000/v3/
  3. le nom d'utilisateur et le mot de passe sont ceux qui vous permettent de vous connecter (voir la remarque plus loin)
  4. le tenant est le projet openstack où créer les machines
  5. le nom de l'image à utiliser est celui d'une VM par défaut (car docker-machine s'occupera des configurations) : Ubuntu 16.04 LTS Xenial
  6. Attention il faut bien spécifier les options de proxy via l'option engine-env qui permet de spécifier une variable d'environnement1). Cela permettra de configurer le docker installé pour l'utilisation du proxy de l'université et s'utilise de cette manière :
docker-machine ... --engine-env HTTP_PROXY="http://adresse_de_votre_proxy:port" ... NOMDELAMACHINE

docker-machine sauvegarde ses informations dans le répertoire ~/.docker/machine/. Si à un moment docker-machine rm … ne fonctionne pas car openstack n'a pas créé la machine correspondante, il suffit d'effacer le répertoire ~/.docker/machine/machines/NOMDELAMACHINE.pour que docker-machine oublie cette denière.

<hi #ff7f27>Protection de votre mot de passe</hi>: attention, vous vous connectez au srveur openstack avec votre login et mots de passe de l'université. Pour éviter de laisser votre mot de passe en clair dans la ligne de commande, n'utilisez pas l'option openstack-password. Vous devez stocker votre mot de passe dans la variable d'environnement OS_PASSWORD. Pour cela copiez/coller la commande :

export OS_PASSWORD=`python3 -c "import getpass; import os; pa=getpass.getpass('Mot de passe : '); print (pa)"`
  • QI.1) En utilisant docker-machine, créez 2 machines qui serviront de nœuds de travail pour swarm. Appelez-les VOTRENOM-master, VOTRENOM-slave.

Vous pouvez ensuite voir les nœuds gérés par docker-machine via la commande docker-machine ls, en supprimer une par docker-machine rm

Pour exécuter des commandes docker sur ces machines il y a 3 méthodes :

  1. Vous pouvez utiliser les variables d'environnement docker fixées par la commande docker-machine env NOMMACHINE. Dans note TP c'est impossible car le logiciel

docker n'est pas installé sur les ordinateur de l'université.

  1. Vous pouvez vous connecter sur les machines via la commande docker-machine ssh NOMMACHINE
  2. Vous pouvez exécuter les commande à distance via la commande docker-machine ssh NOMMACHINE COMMANDE. Par exemple
docker-machine ssh NOMMACHINE sudo docker ps
  • QI.2) Initialiser un cluster swarm dont le manager est votre machine principale et le nœud de travail est la machine slave.

Vous avez vu lors du TP précédant que le cluster swarm pouvait facilement lancer des dockers basés sur des images publiques. Mais pour le moment vous ne pouvez pas le faire avec des images construites via un dockerfile. Pour éviter cette limite, il faut installer un dépôt docker privé dans lequel vous placerez et téléchargez les images que vous avez généré. Vous trouverez la documentation ici

Attention, les registry que vous pouvez facilement utiliser sont des registry locaux c'est à dire que leur adresse est localhost. En effet, pour autoriser un registry distant, il faut gérer des certificats d'authentification SSL ce qui est hors du cadre du cours. Vous allez donc créer un unique docker registry qui répond à l'adresse localhost:5000 sur plusieurs machines virtuelle. Cela n'est possible que grâce au cluster swarm qui va s'occuper pour vous de la redirection des paquets.

  • Dans le cluster swarm, créer un service registry qui partage le port 5000 avec toutes les machines du cluster.
  • Sur quel nœud ce dernier est-il instancié ?
  • testez sa réponse à l'adresse localhost sur les 2 machines virtuelles.

Vous pouvez construire une image personnelle, par exemple le docker/php via ce Doclerfile. Pour l'utiliser via un service swarm vous devez :

  • construire l'image normalement
  • la “tagguer” correctement comme expliqué ici (le nom du tag doit commencer par celui du registry c'est à dire localhost:5000/
  • l'envoyer dans le registry

Vous pouvez ensuite :

  • lancer un service swarm basé sur cette image avec 3 réplicats;
  • tester qu'il est bien instancié sur plusieurs machines différentes;
  • tester qu'il répond avec une répartition de charge.

1)
donnez une valeur pour HTTP_PROXY et HTTPS_PROXY
  • cloud/2017/tp_swarm2.1515758355.txt.gz
  • Dernière modification : 2018/01/12 12:59
  • de fabien.rico