Exercice 2 — Fabriquer un template Debian cloud-init¶
Durée : ~45 min · Théorie associée : Templates et cloud-init
Objectif¶
Construire une VM modèle Debian 13 à partir d'une image cloud, la personnaliser avec cloud-init, la tester, puis la figer en template. Toutes les VM de l'exercice 3 en sortiront.
Prérequis¶
- L'exercice 1 terminé :
bridge-vidscontient les VLAN internes. - Le nœud a accès à Internet depuis son Shell.
- L'accès à l'interface web de votre nœud et à son Shell.
Étape 1 — Autoriser les snippets sur le stockage local¶
Un snippet est un fichier de configuration cloud-init déposé sur le nœud. Le stockage local ne les accepte pas par défaut.
Allez dans Datacenter > Storage, sélectionnez local et cliquez sur Edit. Dans la liste Content, ajoutez Snippets sans retirer les autres types.
Étape 2 — Télécharger l'image cloud¶
Ouvrez le Shell du nœud.
Moins de 400 Mo pour un système complet. Comparez avec l'ISO d'installation de Debian, et surtout avec celui de Windows Server de la semaine 2. Il n'y a ici ni programme d'installation, ni interface graphique, ni paquet superflu.
Étape 3 — Créer la VM vide¶
qm create 9000 --name tmpl-debian13 --memory 2048 --cores 2 --cpu x86-64-v2-AES --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --ostype l26
La VM apparaît dans l'arborescence, sans disque. L'ID 9000 n'a rien de spécial pour Proxmox : c'est une convention pour ranger les templates loin des VM de travail.
Étape 4 — Importer l'image comme disque¶
qm set 9000 --scsi0 local-lvm:0,import-from=/var/lib/vz/template/iso/debian-13-genericcloud-amd64.qcow2
Le 0 de local-lvm:0 veut dire « la taille du fichier importé ». Proxmox crée un volume à la bonne taille et y recopie l'image. Aucune installation, aucun assistant : le système est déjà dedans.
Étape 5 — Agrandir le disque¶
L'image fait environ 3 Go, ce qui est trop juste dès qu'on installe quelques paquets.
Le système de fichiers, lui, fait toujours 3 Go. Il s'agrandira de lui-même au premier démarrage de chaque copie : cloud-init s'en charge.
Étape 6 — Ajouter le lecteur Cloud-Init¶
C'est le lecteur de CD-ROM dans lequel Proxmox déposera la configuration de chaque VM. Sans lui, les copies démarreront sans compte et sans réseau.
Étape 7 — Régler le démarrage et la console¶
La VM démarre sur son disque, et non sur le lecteur cloud-init. Le port série et l'agent invité sont les deux réglages qu'attendent la plupart des outils d'automatisation.
Étape 8 — Écrire le snippet cloud-init¶
Les champs de l'interface web savent créer un compte et poser une adresse IP, mais pas installer un paquet. Pour ça, il faut fournir du user-data.
Écrivez exactement ceci :
Rattachez le fichier à la VM :
La forme vendor= ajoute ce fichier à ce que Proxmox génère. Avec user=, il l'aurait remplacé, et les champs User et Password de l'interface web n'auraient plus eu aucun effet.
Étape 9 — Remplir les champs cloud-init¶
Sélectionnez la VM 9000 dans l'arborescence et ouvrez son panneau Cloud-Init. Trois lignes sont à remplir, chacune avec le bouton Edit.
| Ligne | Valeur |
|---|---|
| User | etudiant |
| Password | Motdepasse123! |
| DNS servers | 9.9.9.9 |
Ces valeurs sont recopiées dans chaque copie du template au premier démarrage. La ligne SSH public key reste vide pour l'instant.
Important
Ce mot de passe finira dans chaque VM clonée. Il est acceptable sur un réseau interne de laboratoire ; il ne l'est plus dès qu'une VM porte une adresse publique. En production, on ne met qu'une clé SSH dans le champ SSH public key et aucun mot de passe.
Étape 10 — Figer le template¶
Faites un clic droit sur la VM 9000 et choisissez Convert to template.
C'est définitif : la VM 9000 ne démarrera plus jamais, elle ne sert qu'à être copiée. C'est aussi ce qui débloque le clone lié, qui n'existe que pour un template : une copie ne peut s'appuyer sur un disque d'origine que si ce disque ne peut plus changer.
Si le test des étapes suivantes révèle une erreur, tout n'est pas perdu : clonez le template, corrigez le clone, et convertissez-le en template à son tour.
Étape 11 — Cloner le template pour le tester¶
Faites un clic droit sur la VM 9000 et choisissez Clone.
| Champ | Valeur |
|---|---|
| VM ID | 999 |
| Name | test-cloudinit |
| Mode | Linked Clone |
La copie apparaît en une ou deux secondes. Elle ne recopie rien : son disque ne contient que les différences avec celui du template, et il est vide au départ. Un Full Clone aurait recopié les 20 Go, ce qui prend plusieurs minutes sur un disque mécanique.
Étape 12 — Vérifier la carte réseau de la copie¶
Sélectionnez la VM 999, ouvrez son panneau Hardware et double-cliquez sur Network Device (net0).
Le champ VLAN Tag doit rester vide. Le réseau de gestion du collège est le VLAN natif de votre câble : ses trames arrivent sans étiquette, donc une carte sans tag tombe dedans. Mettre 700 dans ce champ enverrait au contraire des trames étiquetées, que le switch ne comprendrait pas.
Fermez la fenêtre sans rien changer.
Étape 13 — Demander une adresse en DHCP¶
Ouvrez le panneau Cloud-Init de la VM 999 et double-cliquez sur la ligne IP Config (net0).
Choisissez DHCP dans la liste IPv4.
C'est le réglage le plus courant sur une VM de test : le serveur DHCP du réseau de gestion lui prêtera une adresse, et vous n'avez rien à choisir.
Étape 14 — Démarrer et ouvrir la console¶
Cliquez sur Start, puis sur Console.
Connectez-vous avec etudiant et Motdepasse123!.
Il n'y a pas d'autre compte. Le compte root existe, mais il n'a aucun mot de passe : essayez su -, et la réponse sera su: Authentication failure. Aucun mot de passe ne marchera, parce qu'il n'y en a pas à trouver.
C'est le fonctionnement normal d'une image cloud. Le seul compte est celui que cloud-init a créé, et il a le droit d'emprunter les pouvoirs de root avec sudo. Toute commande qui touche au système en a donc besoin :
Les commandes qui se contentent de lire, comme ip, df ou systemctl is-active, fonctionnent sans sudo.
Astuce
Un compte sans mot de passe ne peut pas être deviné. C'est pour ça que les images cloud ne verrouillent pas seulement root par SSH : elles ne lui donnent jamais de mot de passe du tout.
Étape 15 — Vérifier ce que cloud-init a fait¶
Deux choses à regarder. L'adresse est arrivée sans intervention : c'est cloud-init qui a écrit la configuration DHCP avant le démarrage du réseau. Et le disque occupe les 20 Go demandés à l'étape 5, alors que l'image d'origine en faisait 3 : cloud-init a étendu la partition et le système de fichiers.
Vérifiez que la VM sort bien sur Internet :
Étape 16 — Vérifier le travail du snippet¶
Ce paquet n'est pas dans l'image d'origine. Il a été installé par les quatre lignes du fichier agent.yaml, sans que vous ouvriez de session.
Retournez au panneau Summary de la VM dans l'interface web : l'adresse IP de la machine y est maintenant affichée. C'est l'agent qui la remonte à Proxmox.
Étape 17 — Détruire la VM de test¶
Sélectionnez la VM 999, cliquez sur Shutdown, puis sur More > Remove. Proxmox demande de retaper l'ID 999 pour confirmer.
Attention
La suppression efface la VM et son disque immédiatement, sans corbeille. Relisez le numéro dans la fenêtre de confirmation avant de valider.
Vérification finale¶
- La VM
9000porte l'icône de template et son bouton Start est inactif - Son panneau Hardware contient un disque
scsi0de 20 Go et unCloudInit Drive - Son panneau Cloud-Init affiche l'utilisateur
etudiant - La VM de test
999n'existe plus - Le fichier
/var/lib/vz/snippets/agent.yamlexiste sur le nœud
Question 1¶
Pourquoi le mode Linked Clone n'est-il proposé qu'après la conversion en template ?
- a) Parce qu'un clone lié a besoin d'un disque d'origine qui ne peut plus changer.
- b) Parce que Proxmox interdit de cloner une VM qui n'a jamais démarré.
- c) Parce que le clone lié copie la configuration, et seule celle d'un template est figée.
Voir la réponse
**a) Parce qu'un clone lié a besoin d'un disque d'origine qui ne peut plus changer.** Le disque du clone ne contient que ses propres différences : tout le reste est lu dans le disque du template. Si celui-ci pouvait être modifié, ou simplement démarrer, les copies verraient leur système changer sous leurs pieds. Le choix c) confond les deux moitiés de la VM. La configuration est toujours recopiée intégralement, dans les deux modes de clonage. Ce qui est partagé, et seulement en clone lié, c'est le disque.Question 2¶
La carte réseau de la VM de test n'a aucun VLAN Tag, et pourtant elle obtient une adresse du réseau de gestion. Pourquoi ?
- a) Parce que Proxmox ajoute automatiquement le tag 700 aux VM sans étiquette.
- b) Parce que le VLAN 700 est le VLAN natif du câble : ses trames arrivent et repartent sans étiquette.
- c) Parce que le serveur DHCP répond à toutes les VM, quel que soit leur VLAN.
Voir la réponse
**b) Parce que le VLAN 700 est le VLAN natif du câble : ses trames arrivent et repartent sans étiquette.** Une carte sans tag envoie des trames nues, que le bridge range dans son PVID. Le switch les traite comme du trafic du VLAN natif, c'est-à-dire le 700. C'est exactement le mécanisme qui a permis à Proxmox de s'installer sans que vous configuriez le moindre VLAN. Le choix a) inverse la logique : Proxmox n'ajoute jamais de tag de lui-même. C'est le switch physique, au bout du câble, qui décide de ce que devient une trame sans étiquette.Astuce
Dans une commande, le caractère # ouvre un commentaire : tout ce qui suit est ignoré par le shell. Si un document vous demande de remplacer # par le numéro de votre serveur, faites-le avant d'appuyer sur Entrée, sinon la commande part tronquée.











