Aller au contenu

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 9000 est sur nfs-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

La fenêtre Clone avec Target node serveur 2, VM ID 711, Name aria-web et Mode 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.

Bash
ls /mnt/pve/nfs-aria/images

Cinq dossiers : 710, 711, 712, 720 et 9000

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

Le panneau Cloud-Init de aria-web avec l'adresse 10.70.8E.11/16 et la passerelle 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.

Les quatre VM en marche, réparties sous les trois nœuds

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!.

Bash
sudo docker version

Docker répond avec sa version pour le client et pour le serveur

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 :

Bash
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

Bash
sudo docker logs aria-db

La dernière ligne contient ready for connections et le port 3306

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.

Bash
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.

La page d'accueil d'Aria Airlines avec le formulaire de recherche et les quatre destinations

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.

Bash
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.

Le poste ARIA DCS avec le vol AR 118 et la file de passagers

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.

Bash
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

Bash
sudo docker logs -f aria-formation

Le journal se termine sur Contenu Aria créé : 3 cours, 9 personnes, puis ready to handle connections

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.

Le portail Aria Formation avec les cours PNC-101, PNC-201 et PNC-301

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.

La page Réservation confirmée avec la référence de réservation AR suivie de quatre caractères

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.

Le dossier du passager ouvert au comptoir, avec la référence et le siège choisis sur le site

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/images liste 710, 711, 712, 720 et 9000
  • http://10.70.8E.11 affiche les prix des destinations
  • http://10.70.8E.12 affiche la file de passagers du AR 118
  • http://10.70.8E.20 affiche 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 run aprè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éé