Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
cloud:2017:tp_swarm2 [2018/01/12 12:59] – fabien.rico | cloud:2017:tp_swarm2 [2018/03/13 09:19] (Version actuelle) – jean-patrick.gelas |
---|
=====0. Introduction===== | |
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. | |
| |
=====I. Docker Machine ===== | =====I. Docker Machine ===== |
[[https://docs.docker.com/machine/overview/|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 à [[https://docs.docker.com/machine/drivers/openstack/|openstack ici]] | [[https://docs.docker.com/machine/overview/|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 sur [[https://docs.docker.com/machine/drivers/openstack/|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 : | 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 : |
La commande docker-machine est assez simple car elle signale la plupart des options qui lui manque. La commande de création est [[https://docs.docker.com/machine/reference/create/|documentée ici]], les [[https://docs.docker.com/machine/drivers/openstack/|options relatives à //openstack// là]]. Vous devez savoir que : | La commande docker-machine est assez simple car elle signale la plupart des options qui lui manque. La commande de création est [[https://docs.docker.com/machine/reference/create/|documentée ici]], les [[https://docs.docker.com/machine/drivers/openstack/|options relatives à //openstack// là]]. Vous devez savoir que : |
- le driver est ''openstack'' | - le driver est ''openstack'' |
- l'url d'authentification est ''http://cloud-info.univ-lyon1.fr:5000/v3/'' | - l'url d'authentification est ''https://cloud-info.univ-lyon1.fr:5000/v3/'' |
- le nom d'utilisateur et le mot de passe sont ceux qui vous permettent de vous connecter (voir la remarque plus loin) | - le nom d'utilisateur et le mot de passe sont ceux qui vous permettent de vous connecter (voir la remarque plus loin) |
- le //tenant// est le projet //openstack// où créer les machines | - le //tenant// est le projet //openstack// où créer les machines Il faut donner son identifiant avec l'option ''openstack-tenant-id'' t lui donner la valeur ''fd8c7337154b4c8ea246c1bca973f9f0'' |
- 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'' | - le nom de l'image à utiliser est celui d'une VM par défaut (car docker-machine s'occupera des configurations) : ''Ubuntu 16.04.3 LTS Xenial'' |
- **Attention** il faut bien spécifier les options de proxy via l'option //engine-env// qui permet de spécifier une variable d'environnement((donnez une valeur pour ''HTTP_PROXY'' et ''HTTPS_PROXY'')). Cela permettra de configurer le docker installé pour l'utilisation du proxy de l'université et s'utilise de cette manière : | - **Attention** il faut bien spécifier les options de proxy via l'option //engine-env// qui permet de spécifier une variable d'environnement((donnez une valeur pour ''HTTP_PROXY'' et ''HTTPS_PROXY'')). Cela permettra de configurer le docker installé pour l'utilisation du proxy de l'université et s'utilise de cette manière : |
| |
//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. | //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 : | <hi #ff7f27>Protection de votre mot de passe</hi>: attention, vous vous connectez au serveur openstack avec votre //login// et mot 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 copier/coller la commande : |
| |
export OS_PASSWORD=`python3 -c "import getpass; import os; pa=getpass.getpass('Mot de passe : '); print (pa)"` | export OS_PASSWORD=$(python3 -c "import getpass; 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. | * 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. |
| |
Pour exécuter des commandes docker sur ces machines il y a 3 méthodes : | Pour exécuter des commandes docker sur ces machines il y a 3 méthodes : |
- 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 | - 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é. |
//docker// n'est pas installé sur les ordinateur de l'université. | |
- Vous pouvez vous connecter sur les machines via la commande ''docker-machine ssh NOMMACHINE'' | - Vous pouvez vous connecter sur les machines via la commande ''docker-machine ssh NOMMACHINE'' |
- Vous pouvez exécuter les commande à distance via la commande ''docker-machine ssh NOMMACHINE COMMANDE''. Par exemple | - Vous pouvez exécuter les commande à distance via la commande ''docker-machine ssh NOMMACHINE COMMANDE''. Par exemple |
=====Utilisation d'une image configurée===== | =====Utilisation d'une image configurée===== |
| |
Vous pouvez construire une image personnelle, par exemple le docker/php via ce {{ :cloud:2017:dockerphp.zip |Doclerfile}}. Pour l'utiliser via un service swarm vous devez : | Vous pouvez construire une image personnelle, par exemple le docker/php via ce {{ :cloud:2017:dockerphp.zip |Dockerfile}}. Pour l'utiliser via un service swarm vous devez : |
* construire l'image //normalement// | * construire l'image //normalement// |
* la "tagguer" correctement comme expliqué [[https://docs.docker.com/registry/#basic-commands|ici]] (le nom du tag doit commencer par celui du registry c'est à dire ''localhost:5000/'' | * la "tagguer" correctement comme expliqué [[https://docs.docker.com/registry/#basic-commands|ici]] (le nom du tag doit commencer par celui du registry c'est à dire ''localhost:5000/'' |
* tester qu'il répond avec une répartition de charge. | * tester qu'il répond avec une répartition de charge. |
| |
| ===== Création d'un fichier de déploiement ===== |
| |
| Pour automatiser vos déploiement, il est plus pratique d'utiliser un fichier yaml pour décrire votre application. Comme pour le premier TP avec docker-compose, vous allez maintenant utiliser docker stack. |
| |
| Vous devez supprimer votre précédent service avec ''docker service rm''. |
| |
| Ecrivez votre fichier yaml pour lancer votre image ''localhost:5000/VOTRETAG'' avec 2 replicas. |
| |
| Lancez le stack avec la commande docker stack up -c //votre fichier// |
| |
| |
| Lors de la mise en place d'application, il y a de nombreuses données sensibles comme les certificats ou les mots de passe. Pour ne pas les mettre en clair dans vos fichiers, docker propose la fonction //secret//. |
| |
| Maintenant, vous allez créer un secret avec la commande ''docker secret''. Puis modifier votre fichier yaml afin de lui indiquer qu'il peut accéder à ce secret //externe//. |
| |
| Quand vous avez fini vous pouvez modifier le fichier afin d'afficher votre secret : |
| |
| echo "mon secret :" . file_get_contents("/var/run/secrets/''nom de votre secret''","r"); |
| |
| Ne pas oublier de rebuild votre image et de recréer votre stack. |
| |