IMA4 2016/2017 ECV1 : Différence entre versions
(→Étapes) |
|||
(2 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 14 : | Ligne 14 : | ||
# Il est d'abord demandé de mettre en oeuvre le WIki de type mediawiki sur le PC : recopier le sujet et préparer la structure pour rendre compte du travail, la sécurisation HTTPS n'est pas nécessaire vu que le wiki ne sera accédé qu'en local. | # Il est d'abord demandé de mettre en oeuvre le WIki de type mediawiki sur le PC : recopier le sujet et préparer la structure pour rendre compte du travail, la sécurisation HTTPS n'est pas nécessaire vu que le wiki ne sera accédé qu'en local. | ||
# La gestion des conteneurs se fera en utilisant la technologie runC. IL faut donc commencer par créer un système de fichier racine pour les conteneurs. L'utilitaire <code>umoci</code> sera utilisé (option <code>new</code>). | # La gestion des conteneurs se fera en utilisant la technologie runC. IL faut donc commencer par créer un système de fichier racine pour les conteneurs. L'utilitaire <code>umoci</code> sera utilisé (option <code>new</code>). | ||
− | # Les conteneurs doivent être accessibles en réseau. | + | # Les conteneurs doivent être accessibles en réseau. Il faudra utiliser <code>ip nets</code> pour créer des interfaces virtuelles dans les conteneurs dont les pairs se trouveront dans un commutateur virtuel (utilitaire <code>brctl</code>) de l'OS principal. |
# Il faudra explorer des solutions pour ajouter aux systèmes de fichier racines créés précédement le nécessaire pour faire tourner le serveur Web <code>apache2</code>. | # Il faudra explorer des solutions pour ajouter aux systèmes de fichier racines créés précédement le nécessaire pour faire tourner le serveur Web <code>apache2</code>. | ||
# il ne reste plus qu'à configurer le serveur DNS local à l'OS principal pour donner un nom aux différents sites Web (partons sur 3 serveurs Web distincts redondés d'un facteur 2). Il est alors possible de configurer l'<code>apache2</code> de l'OS principal pour agir comme mandataire inverse et équilibreur de charge. | # il ne reste plus qu'à configurer le serveur DNS local à l'OS principal pour donner un nom aux différents sites Web (partons sur 3 serveurs Web distincts redondés d'un facteur 2). Il est alors possible de configurer l'<code>apache2</code> de l'OS principal pour agir comme mandataire inverse et équilibreur de charge. | ||
Ligne 52 : | Ligne 52 : | ||
* Lors de la création de l'image, un fichier de configuration est fabriqué, ce n'est donc pas la peine d'en générer un autre par la commande <code>runc spec</code>. Par contre il faut préciser le chemin du répertoire de l'image au lancement du conteneur : <code>runc create -b newbundle nomduconteneur</code>. | * Lors de la création de l'image, un fichier de configuration est fabriqué, ce n'est donc pas la peine d'en générer un autre par la commande <code>runc spec</code>. Par contre il faut préciser le chemin du répertoire de l'image au lancement du conteneur : <code>runc create -b newbundle nomduconteneur</code>. | ||
− | == Réseau pour le conteneur | + | == Réseau pour le conteneur == |
Pour la configuration du réseau dans le conteneur. Il faut d'abord créer une interface virtuelle : | Pour la configuration du réseau dans le conteneur. Il faut d'abord créer une interface virtuelle : | ||
Ligne 169 : | Ligne 169 : | ||
ping 127.0.0.1 | ping 127.0.0.1 | ||
− | <i>Note de l'encadrant : vous avez écrit une grosse bétise, l'adresse IP <code>127.0.0.1</code> est l'adresse de bouclage de <code>panga</code> | + | <i>Note de l'encadrant : vous avez écrit une grosse bétise, l'adresse IP <code>127.0.0.1</code> est l'adresse de bouclage de <code>panga</code>. |
− | Pour ne pas frustrer les lecteurs | + | Pour ne pas frustrer les lecteurs, voici les commandes à exécuter pour réaliser la fin de la configuration réseau. |
+ | Pour configurer une adresse IPv4 sur l'interface <code>eth0</code> d'un conteneur, il faut utiliser, par exemple, la commande | ||
+ | ip address add dev eth0 172.26.79.120/20 | ||
+ | Pour des raisons de sécurité, la modification d'une interface réseau est interdite par défaut dans un conteneur lancé par <code>runc</code>. Taper la commande directement dans le conteneur va donc échouer. De même la commande lancée comme suit échouera : | ||
+ | |||
+ | runc exec mycontainerid ip address add dev eth0 172.26.79.120/20 | ||
+ | |||
+ | Il est facile de contourner ce blocage avec la commande <code>nsenter</code> : | ||
+ | |||
+ | nsenter -t 3537 -n ip address add dev eth0 172.26.79.120/20 | ||
+ | nsenter -t 3537 -n ip route add default gw 172.26.79.254 | ||
+ | |||
+ | Dans cet exemple <code>3537</code> est le PID du conteneur. | ||
+ | </i> | ||
== Création des conteneurs de la maquette == | == Création des conteneurs de la maquette == | ||
− | + | Il est demandé de créer 6 conteneurs avec des adresses IP distinctes dans le même réseau et un serveur Web fonctionnel. Il faut aussi créer 3 pages Web facilement identifiables à installer sur les 3 paires de serveurs Web. Enfin, il faut vérifier avec le navigateur du PC portable que les 6 pages Web sont accessibles. | |
− | |||
Je n'ai malheureusement pas pu arriver jusqu'à cette étape car ces dernières semaines étaient remplies de partiels et de projets à rendre. J'ai fait du mieux quue je pouvais afin de pouvoir réussir cette épreuve. Je pars en stage à partir du 8 mai et ne peut donc pas continuer à travailler dessus. J'espère vous avoir convaincu. | Je n'ai malheureusement pas pu arriver jusqu'à cette étape car ces dernières semaines étaient remplies de partiels et de projets à rendre. J'ai fait du mieux quue je pouvais afin de pouvoir réussir cette épreuve. Je pars en stage à partir du 8 mai et ne peut donc pas continuer à travailler dessus. J'espère vous avoir convaincu. | ||
Ligne 192 : | Ligne 204 : | ||
| Configuration et installation du Wiki | | Configuration et installation du Wiki | ||
| Effectué | | Effectué | ||
− | | | + | | Sarah Zoubir |
|- | |- | ||
| Alimentation du Wiki | | Alimentation du Wiki | ||
− | | | + | | Effectué |
− | | Sarah Zoubir nombreuses corrections de Xavier Redon | + | | Sarah Zoubir très nombreuses corrections de Xavier Redon (fautes d'orthographe et de formatage) |
|- | |- | ||
| Création de l'image OCI d'un conteneur | | Création de l'image OCI d'un conteneur | ||
− | | | + | | Finalisé |
− | | Sarah Zoubir | + | | Sarah Zoubir après plusieurs demandes |
|- | |- | ||
| Création du système de fichier du conteneur | | Création du système de fichier du conteneur | ||
− | | | + | | Finalisé |
− | | Aide de | + | | Aide massive de l'encadrant |
|- | |- | ||
| Lancement du conteneur en mode détaché | | Lancement du conteneur en mode détaché | ||
− | | | + | | Finalisé |
− | | | + | | Aide massive de l'encadrant |
|- | |- | ||
| Mise en réseau du conteneur | | Mise en réseau du conteneur | ||
− | | | + | | Non terminé |
− | | | + | | Malgré de nombreuses indications de l'encadrant |
|- | |- | ||
| Création des conteneurs de la maquette | | Création des conteneurs de la maquette | ||
− | | | + | | Non réalisé |
− | | | + | | Pas suffisament de travail sur le projet pour arriver à cette étape |
|} | |} |
Version actuelle datée du 17 juin 2017 à 18:11
Cahier des charges
Cette section défini les modalités de l'épreuve complémentaire de virtualisation
Méthode
Le module étant principalement un TP de 20 heures, l'épreuve complémentaire repose donc sur la capacité de configurer un système sur une machine. Un PC portable a été fourni avec les paquetages nécessaires pour mener à bien le travail. Ce PC portable comporte également un Wiki permettant de faire rapport de l'avancée du travail.
Objectif
L'objectif est de réaliser un système de ferme de serveur Web accessible via un mandataire inverse réalisant de plus un équilibre de charge. Ce travail correspond à ce qui était demandé dans le premier tier du TP "virtualisation". Comme il est difficile de transformer un PC portable d'entrée de gamme en serveur de virtualisation, les serveurs Web seront implantés dans des conteneurs. Le mandataire inverse sera implanté dans l'OS du PC portable.
Étapes
- Il est d'abord demandé de mettre en oeuvre le WIki de type mediawiki sur le PC : recopier le sujet et préparer la structure pour rendre compte du travail, la sécurisation HTTPS n'est pas nécessaire vu que le wiki ne sera accédé qu'en local.
- La gestion des conteneurs se fera en utilisant la technologie runC. IL faut donc commencer par créer un système de fichier racine pour les conteneurs. L'utilitaire
umoci
sera utilisé (optionnew
). - Les conteneurs doivent être accessibles en réseau. Il faudra utiliser
ip nets
pour créer des interfaces virtuelles dans les conteneurs dont les pairs se trouveront dans un commutateur virtuel (utilitairebrctl
) de l'OS principal. - Il faudra explorer des solutions pour ajouter aux systèmes de fichier racines créés précédement le nécessaire pour faire tourner le serveur Web
apache2
. - il ne reste plus qu'à configurer le serveur DNS local à l'OS principal pour donner un nom aux différents sites Web (partons sur 3 serveurs Web distincts redondés d'un facteur 2). Il est alors possible de configurer l'
apache2
de l'OS principal pour agir comme mandataire inverse et équilibreur de charge.
Indications
Au cours du projet des indications supplémentaires ont été données à l'élève pour que le travail puisse avancer. Ces indications sont décrites ci-dessous.
Installation de mediawiki
Il faudra certainement modifier les droits sur la base de données. Pour cela, lancer les commandes suivantes en tant qu'administrateur :
# service mysql stop # mysqld_safe --skip-grant-tables & # mysql -u root > GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY 'glopglop'; > FLUSH PRIVILEGES; > QUIT ; # fg ^C # service mysql start
Création d'un système de fichiers
Les commandes umoci init
et umoci new
ne font que créer un conteneur avec un système de fichier vide. Il faut trouver une méthode pour obtenir un système de fichiers fonctionnel.
Une solution consiste à utiliser l'utilitaire debootstrap
qui permet d'installer une distribution Debian à partir d'une distribution déjà installée. Les étapes sont les suivantes :
- Installer le paquetage par
apt-get install debootstrap
(déjà effectué sur le PC portable). - Lancer l'utilitaire pour créer un système de fichier racine :
debootstrap stretch newbundle/rootfs/ http://debian.polytech-lille.fr/debian/
Cette solution fonctionne mais le système de fichier créé pèse 250Mo. Comparer par rapport à un autre système de fichier racine d'une image docker de base. Voir s'il est possible de réduire la taille de ce système de fichiers.
A noter :
- La distribution Debian du PC ne comportait pas le paquetage
systemd
, dans ce cas le paquetagecgroupfs-mount
doit être installé. - Le chemin
PATH
n'était pas défini dans le fichier de configuration du conteneurconfig.json
, le shell ne pouvait donc pas être lancé au démarrage du conteneur. - Lors de la création de l'image, un fichier de configuration est fabriqué, ce n'est donc pas la peine d'en générer un autre par la commande
runc spec
. Par contre il faut préciser le chemin du répertoire de l'image au lancement du conteneur :runc create -b newbundle nomduconteneur
.
Réseau pour le conteneur
Pour la configuration du réseau dans le conteneur. Il faut d'abord créer une interface virtuelle :
panga# ip link add vifc1 type veth peer name eth0@c1 panga# ip link set eth0@c1 netns /proc/<PID c1>/ns/net name eth0
Le PID du conteneur se trouve avec runc list
.
Il reste ensuite à mettre vifc1
dans le bridge des conteneurs. Ne pas oublier de configurer une adresse IP sur le bridge pour que panga
accède à ses conteneurs.
Compte-rendu du travail réalisé
Création de la structure du conteneur
Détailler les étapes de la création de l'image OCI avec la commande umoci
.
root@Panga:~/mycontainer# umoci init --layout newimage root@Panga:~/mycontainer# umoci new --image newimage:newtag
umoci init
permet de créer une image OCI sans tag ou blobs à l'intérieur. Ensuite, unmoci new
permet de créer une image OCI avec un tag que l'on pourra modifier comme on le souhaite par la suite.
On utilisant la commande suivante, on génère un dossier newbundle
, qui contient le bon fichier config.json
de l'image OCI de nom newimage
.
root@Panga:~/mycontainer# umoci unpack --image newimage:newtag newbundle
Création du système de fichier racine pour les conteneurs
Dans mon répertoire mycontainer
, je lance l'utilitaire debootstrap
pour créer un système de fichier racine :
root@Panga:~/mycontainer# debootstrap stretch newbundle/rootfs/
Il a été demandé de comparer les 250Mo de ce système de fichiers avec un autre système de fichier racine d'une image docker de base.
On utilise docker pour créer des systèmes de fichiers racine de taille minimale. Docker n'a pas besoin de tous les packages dont a besoin debootstrap
, ou du moins il les supprime après avoir fini avec. Un système de fichiers racine d'une image docker de base est donc plus petit qu'un fichier créé à partir de notre commande. Voir le script utilisé par docker : [1].
Note de l'encadrant : vous n'avez pas répondu à la question.
Il a été demandé si tous les paquetages Debian installés durant le debootstrap
étaient utiles et d'établir une liste des paquetages inutiles.
Pour afficher les paquets installés, je lance dans mon conteneur la commande :
# dpkg --get-selections
Note de l'encadrant : vous n'avez pas répondu à la question même si la réponse précédente apporte des éléments.
Lancement du conteneur
Pour lancer le conteneur en tâche de fond, je rajoute l'option -d
lors du lancement et je modifie l'état de "terminal" dans le fichier
config.json
pour le mettre à false.
root@Panga:~# runc start -d -b newbundle/ mycontainerid
Pour lancer plusieurs conteneurs, il suffit d'exécuter les commandes suivantes (exemple pour 6 conteneurs) :
root@Panga:~# runc start -d -b newbundle/ mycontainerid1 root@Panga:~# runc start -d -b newbundle/ mycontainerid2 root@Panga:~# runc start -d -b newbundle/ mycontainerid3 root@Panga:~# runc start -d -b newbundle/ mycontainerid4 root@Panga:~# runc start -d -b newbundle/ mycontainerid5 root@Panga:~# runc start -d -b newbundle/ mycontainerid6
Note de l'encadrant : sauf configuration particulière ce n'est pas vraiment conseillé de démarrer 6 conteneurs avec le même système de fichiers.
Pour une attente de quelques minutes par exemple, on peut rajouter dans config.json
la directive args:["sleep","300"]
le conteneur attendra donc 5 minutes.
Mise en réseau du conteneur
root@Panga:~# runc list ID PID STATUS BUNDLE CREATED mycontainerid 3537 running /root/mycontainer/newbundle 2017-04-06T07:03:09.150496187Z
Je récupère le PID de mon conteneur : 3537
.
root@Panga:~# ip link add vifc1 type veth peer name eth0@c1 root@Panga:~# ip link set eth0@c1 netns /proc/3537/ns/net name eth0
Je crée mon bridge br0.
root@Panga:~# brctl addbr br0
J'ajoute vifc1
et eth0
dans le bridge.
root@Panga:~# brctl addif br0 eth0 root@Panga:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.5cb90180a7a6 no eth0
Note de l'encadrant : il faut activer vifc1
et l'ajouter au commutateur virtuel.
Pour mettre une adresse IP sur br0, on modifie le fichier /etc/network/interfaces
de la manière suivante :
# The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet manual up ip link set dev eth0 up
auto br0 iface br0 inet static bridge ports eth0 address 172.26.79.105 netmask 255.255.240.0 gateway 172.26.79.254
Note de l'encadrant : le fichier ci-dessus a été corrigé vous n'aviez pas tapé la bonne configuration pour l'interface Ethernet alors que sur le portable la configuration était correcte.
On lance 6 conteneurs, puis on exécute la commande suivante pour récuperer leur adresse IP.
runc exec mycontainerid ip a
On peut alors pinguer le conteneur à partir de panga
avec la commande :
ping 127.0.0.1
Note de l'encadrant : vous avez écrit une grosse bétise, l'adresse IP 127.0.0.1
est l'adresse de bouclage de panga
.
Pour ne pas frustrer les lecteurs, voici les commandes à exécuter pour réaliser la fin de la configuration réseau.
Pour configurer une adresse IPv4 sur l'interface eth0
d'un conteneur, il faut utiliser, par exemple, la commande
ip address add dev eth0 172.26.79.120/20
Pour des raisons de sécurité, la modification d'une interface réseau est interdite par défaut dans un conteneur lancé par runc
. Taper la commande directement dans le conteneur va donc échouer. De même la commande lancée comme suit échouera :
runc exec mycontainerid ip address add dev eth0 172.26.79.120/20
Il est facile de contourner ce blocage avec la commande nsenter
:
nsenter -t 3537 -n ip address add dev eth0 172.26.79.120/20 nsenter -t 3537 -n ip route add default gw 172.26.79.254
Dans cet exemple 3537
est le PID du conteneur.
Création des conteneurs de la maquette
Il est demandé de créer 6 conteneurs avec des adresses IP distinctes dans le même réseau et un serveur Web fonctionnel. Il faut aussi créer 3 pages Web facilement identifiables à installer sur les 3 paires de serveurs Web. Enfin, il faut vérifier avec le navigateur du PC portable que les 6 pages Web sont accessibles.
Je n'ai malheureusement pas pu arriver jusqu'à cette étape car ces dernières semaines étaient remplies de partiels et de projets à rendre. J'ai fait du mieux quue je pouvais afin de pouvoir réussir cette épreuve. Je pars en stage à partir du 8 mai et ne peut donc pas continuer à travailler dessus. J'espère vous avoir convaincu.
Bilan du projet
Le tableau ci-dessous résume le travail effectué par l'élève sur le projet.
Tâche | Etat | Commentaire |
---|---|---|
Configuration et installation du Wiki | Effectué | Sarah Zoubir |
Alimentation du Wiki | Effectué | Sarah Zoubir très nombreuses corrections de Xavier Redon (fautes d'orthographe et de formatage) |
Création de l'image OCI d'un conteneur | Finalisé | Sarah Zoubir après plusieurs demandes |
Création du système de fichier du conteneur | Finalisé | Aide massive de l'encadrant |
Lancement du conteneur en mode détaché | Finalisé | Aide massive de l'encadrant |
Mise en réseau du conteneur | Non terminé | Malgré de nombreuses indications de l'encadrant |
Création des conteneurs de la maquette | Non réalisé | Pas suffisament de travail sur le projet pour arriver à cette étape |