Exercice 4 — Déployer Aria Airlines¶
Durée : ~60 min · En équipe · Théorie associée : Le cluster Proxmox et le stockage partagé
Objectif¶
Les quatre services d'Aria Airlines tournent dans quatre VM réparties sur les trois nœuds : la base de données, le site de vente de billets, le poste d'enregistrement et le portail de formation. Une réservation faite sur le site apparaît au comptoir de l'aéroport.
Prérequis¶
- L'exercice 3 terminé : le template
9000est surnfs-aria. - Le numéro de votre équipe, noté
E, de 1 à 9.
Ce que vous construisez¶
| VM | ID | Nœud | Adresse | Service | Critique |
|---|---|---|---|---|---|
aria-db |
710 | serveur 1 | 10.70.8E.10/16 |
base de données MySQL | oui |
aria-web |
711 | serveur 2 | 10.70.8E.11/16 |
vente de billets en ligne | oui |
aria-staff |
712 | serveur 3 | 10.70.8E.12/16 |
enregistrement à l'aéroport | oui |
aria-formation |
720 | serveur 2 | 10.70.8E.20/16 |
formation des agents de bord | non |
Remplacez E par le numéro de votre équipe : l'équipe 3 utilise 10.70.83.10, 10.70.83.11, et ainsi de suite. La passerelle est la même pour tous : 10.70.0.1, celle des nœuds.
flowchart LR
C["Client<br/>navigateur"] --> W["aria-web<br/>.11"]
A["Commis<br/>à l'aéroport"] --> S["aria-staff<br/>.12"]
F["Agent de bord<br/>en formation"] --> M["aria-formation<br/>.20"]
W -- "3306" --> D[("aria-db<br/>.10")]
S -- "3306" --> D
M -- "3306" --> D
Les trois applications gardent toutes leurs données dans aria-db. Le site et le comptoir lisent et écrivent les mêmes réservations : c'est ce qui permet à un passager qui achète son billet en ligne d'être reconnu au comptoir.
Étape 1 — Cloner les quatre VM¶
Faites un clic droit sur le template 9000, puis Clone. Remplissez la fenêtre avec la première ligne du tableau, cliquez sur Clone, et recommencez pour chaque ligne.
| Target node | VM ID | Name | Mode |
|---|---|---|---|
| serveur 1 | 710 |
aria-db |
Linked Clone |
| serveur 2 | 711 |
aria-web |
Linked Clone |
| serveur 3 | 712 |
aria-staff |
Linked Clone |
| serveur 2 | 720 |
aria-formation |
Linked Clone |
Le champ Target node est la nouveauté. Le template est rangé sous le serveur 1, mais son disque est sur nfs-aria : n'importe quel nœud peut donc en sortir un clone. Sans stockage partagé, ce champ n'accepterait que le serveur 1.
Étape 2 — Voir où sont les disques¶
Ouvrez le Shell de n'importe quel nœud.
Un dossier par VM, tous au même endroit. Les VM tournent sur trois serveurs différents, mais aucune n'a son disque dans le serveur qui la fait tourner.
Étape 3 — Donner une adresse à chaque VM¶
Sélectionnez la VM 710, ouvrez son panneau Cloud-Init, puis double-cliquez sur IP Config (net0). Recommencez pour chaque ligne.
| VM | IPv4/CIDR | Gateway (IPv4) |
|---|---|---|
710 |
10.70.8E.10/16 |
10.70.0.1 |
711 |
10.70.8E.11/16 |
10.70.0.1 |
712 |
10.70.8E.12/16 |
10.70.0.1 |
720 |
10.70.8E.20/16 |
10.70.0.1 |
Ces adresses sont fixes, et c'est voulu. Une VM qui redémarre sur un autre nœud garde exactement la même adresse : les clients continuent de la trouver au même endroit.
Étape 4 — Démarrer les quatre VM¶
Sélectionnez chaque VM et cliquez sur Start.
Le premier démarrage prend deux ou trois minutes : cloud-init télécharge et installe Docker dans chaque VM.
Étape 5 — Vérifier Docker dans aria-db¶
Ouvrez la console de aria-db et connectez-vous avec etudiant / Motdepasse123!.
Si la partie Server manque, cloud-init n'a pas fini. Attendez une minute et relancez la commande.
Étape 6 — Lancer la base de données¶
Toujours dans la console de aria-db :
sudo docker run -d --name aria-db --restart unless-stopped \
-p 3306:3306 \
-e 'MYSQL_ROOT_PASSWORD=Motdepasse123!' \
-e 'MYSQL_PASSWORD=Motdepasse123!' \
-v aria-db:/var/lib/mysql \
migrc/aria-db:1.0
L'image contient MySQL et les données fictives d'Aria : quatre routes au départ de Montréal, trois semaines de vols, et plusieurs milliers de passagers.
Retenez l'option --restart unless-stopped. Elle demande à Docker de relancer le conteneur chaque fois que Docker démarre, donc chaque fois que la VM démarre. À l'exercice 6, la VM redémarrera sur un autre nœud sans que personne ne soit là pour taper docker start.
Étape 7 — Attendre que la base soit prête¶
La dernière ligne doit contenir ready for connections et port: 3306. Au premier démarrage, MySQL crée la base et charge les données : comptez une trentaine de secondes. Relancez la commande tant que la ligne n'apparaît pas.
Étape 8 — Lancer le site de vente¶
Ouvrez la console de aria-web et connectez-vous.
sudo docker run -d --name aria-web --restart unless-stopped \
-p 80:80 \
-e DB_HOST=10.70.8E.10 \
-e 'DB_PASSWORD=Motdepasse123!' \
migrc/aria-web:1.0
DB_HOST dit au site où trouver sa base de données : dans une autre VM, sur un autre nœud.
Étape 9 — Ouvrir le site de vente¶
Depuis votre poste, ouvrez http://10.70.8E.11.
Les prix des quatre destinations viennent de la base. S'ils s'affichent, le site parle à aria-db. En bas de la page, la mention servi par donne le nom du conteneur qui a répondu ; notez-le, il servira à l'exercice 5.
Étape 10 — Lancer le poste d'enregistrement¶
Ouvrez la console de aria-staff et connectez-vous.
sudo docker run -d --name aria-staff --restart unless-stopped \
-p 80:80 \
-e DB_HOST=10.70.8E.10 \
-e 'DB_PASSWORD=Motdepasse123!' \
migrc/aria-staff:1.0
Étape 11 — Ouvrir le poste d'enregistrement¶
Depuis votre poste, ouvrez http://10.70.8E.12.
C'est l'écran des commis au comptoir 12 de l'aéroport. Le vol AR 118 vers Paris part aujourd'hui à 18 h 40, et une partie des passagers est déjà enregistrée.
Étape 12 — Lancer le portail de formation¶
Ouvrez la console de aria-formation et connectez-vous.
sudo docker run -d --name aria-formation --restart unless-stopped \
-p 80:80 \
-e DB_HOST=10.70.8E.10 \
-e 'DB_PASSWORD=Motdepasse123!' \
-e 'MOODLE_ADMIN_PASSWORD=Motdepasse123!' \
-v moodledata:/var/moodledata \
migrc/aria-formation:1.0
C'est un Moodle, comme celui du collège, préparé pour Aria : trois cours et une cohorte de nouveaux agents de bord.
Étape 13 — Suivre l'installation de Moodle¶
Au premier démarrage, Moodle crée ses tables dans aria-db, puis ses cours. Le journal défile pendant une minute et demie environ. Attendez la ligne Contenu Aria créé, puis quittez l'affichage avec Ctrl+C. Le conteneur continue de tourner.
Étape 14 — Ouvrir le portail de formation¶
Depuis votre poste, ouvrez http://10.70.8E.20.
Connectez-vous avec kbenali / Motdepasse123! : c'est Karim Benali, un agent de bord en formation, inscrit aux trois cours.
Étape 15 — Acheter un billet¶
Sur le site de vente, choisissez la destination Paris et la date de demain, puis cliquez sur Rechercher des vols. Choisissez un siège libre, inscrivez votre prénom et votre nom, et payez avec n'importe quel numéro de carte.
Notez la référence de réservation, qui commence par AR.
Étape 16 — Retrouver le passager au comptoir¶
Sur le poste d'enregistrement, ouvrez la liste déroulante du bandeau et choisissez le vol AR 118 à la date de demain. Tapez votre nom dans la case Scanner carte / nom / PNR, puis cliquez sur votre dossier.
Votre dossier est là, avec le siège choisi sur le site. Les deux applications tournent dans deux VM, sur deux nœuds différents, et partagent la même base de données dans une troisième.
Vérification finale¶
- Les quatre VM tournent, sur les nœuds prévus
-
ls /mnt/pve/nfs-aria/imagesliste 710, 711, 712, 720 et 9000 -
http://10.70.8E.11affiche les prix des destinations -
http://10.70.8E.12affiche la file de passagers du AR 118 -
http://10.70.8E.20affiche les trois cours de formation - Une réservation faite sur le site s'ouvre au comptoir
Question 1¶
La VM aria-web redémarre. Docker démarre avec elle. Que devient le conteneur aria-web ?
- a) Il redémarre, grâce à l'option
--restart unless-stopped. - b) Il reste arrêté : il faut toujours relancer
docker runaprès un redémarrage. - c) Il est supprimé, et l'image doit être téléchargée de nouveau.
Voir la réponse
**a) Il redémarre, grâce à l'option `--restart unless-stopped`.** Cette option dit à Docker de relancer le conteneur à chaque démarrage du service Docker, sauf si quelqu'un l'a arrêté volontairement avec `docker stop`. Le service Docker démarre avec la VM, et le conteneur suit. Le choix b) décrit le comportement **sans** cette option. C'est le piège de l'exercice 6 : la HA redémarre parfaitement la VM sur un autre nœud, et le site reste quand même hors ligne, parce que le conteneur attend quelqu'un.En cas de problème¶
| Symptôme | Cause probable | Correction |
|---|---|---|
| Target node ne propose que le serveur 1 | Le disque du template n'est pas sur un stockage partagé | Exercice 3, étape 3 |
La VM ne démarre pas : volume 'local:snippets/...' does not exist |
Le snippet est sur local |
Exercice 3, étapes 7 et 8 |
sudo docker version ne montre pas de partie Server |
cloud-init n'a pas fini, ou la VM n'a pas accès à Internet | Attendre, puis ping -c 2 10.70.0.1 et ping -c 2 9.9.9.9 dans la VM |
docker run répond port is already allocated |
Un conteneur occupe déjà ce port | sudo docker ps -a, puis sudo docker rm -f du conteneur en trop |
| Le site affiche « la base de données ne répond pas » | aria-db pas encore prêt, DB_HOST erroné, ou port 3306 non publié |
Étape 7, puis vérifier l'option -e DB_HOST et -p 3306:3306 |
| La page de Moodle tourne en boucle ou affiche une erreur de base | L'installation n'est pas terminée | Étape 13 : attendre la ligne Contenu Aria créé |











