cloud:2017:tp_swarm2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 14:22] jean-patrick.gelascloud:2017:tp_swarm2 [2018/03/13 09:19] (Version actuelle) jean-patrick.gelas
Ligne 1: Ligne 1:
-=====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 de la séance, il vous est donc conseillé de vérifier l'état de vos connaissances sur les opérations des TPs précédents.+
  
 =====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 :
Ligne 12: Ligne 11:
 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 :
  
Ligne 22: Ligne 21:
 //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 serveur 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.
Ligne 51: Ligne 50:
 =====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/''
Ligne 61: Ligne 60:
   * 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.
  
  • cloud/2017/tp_swarm2.1515763339.txt.gz
  • Dernière modification : 2018/01/12 14:22
  • de jean-patrick.gelas