Templates, cloud-init, clones liés et complets¶
Construire un template Linux à partir d'une image cloud officielle, le personnaliser au déploiement par cloud-init (utilisateur, clé SSH, IP), puis cloner des VM en clone complet (production) ou lié (lab, éphémère).
Clone lié ou complet ?¶
| Critère | Clone complet (Full Clone) | Clone lié (Linked Clone) |
|---|---|---|
| Disques | Copie indépendante | Différentiel au-dessus du disque du template |
| Création | Lente (copie des données) | Quasi instantanée |
| Dépendance | Aucune | Le template ne peut plus être supprimé tant que des clones existent |
| Stockage cible | Tous | Même stockage que le template, avec snapshots/clones (Ceph RBD, ZFS, LVM-thin, qcow2) |
| Usage MSP | Production | Lab, tests, VM jetables |
flowchart LR
I[Image cloud .qcow2] --> T[VM 9000<br/>disque + lecteur cloud-init]
T -->|qm template| TPL[Template 9000]
TPL -->|qm clone --full 1| P[VM 101 production]
TPL -->|qm clone| L[VM 201 lab<br/>clone lié]
Avant de toucher la prod
- Image cloud téléchargée depuis le site officiel de la distribution et somme de contrôle vérifiée.
- VMID réservé pour les templates (convention MSP : 9000 à 9099).
- Stockage acceptant les images disque (
ceph-vm,local-zfs) ; pour--cicustom, stockage avec le contenu Snippets disponible sur tous les nœuds. - Clé SSH publique de l'équipe d'exploitation disponible.
Étapes¶
1. Créer le template (CLI uniquement pour l'import)¶
cd /var/lib/vz/template
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
qm create 9000 --name tpl-debian13 --ostype l26 \
--memory 2048 --cores 2 --cpu x86-64-v2-AES \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-single \
--agent enabled=1
qm set 9000 --scsi0 ceph-vm:0,import-from=/var/lib/vz/template/debian-13-genericcloud-amd64.qcow2,iothread=1,discard=on
qm set 9000 --ide2 ceph-vm:cloudinit
qm set 9000 --boot order=scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --ciuser exploit --sshkeys /root/exploit.pub --ipconfig0 ip=dhcp
qm template 9000
L'image doit contenir cloud-init (c'est le cas des images genericcloud). Installer qemu-guest-agent dans l'image, ou via un fichier --cicustom, pour que l'agent réponde.
2. Cloner et personnaliser¶
- Clic droit sur le template 9000 → Clone.
- VM ID
101, nomsrv-web01, ModeFull Clone, stockage cibleceph-vm. - VM 101 → Cloud-Init : User
exploit, SSH public key, IP Config (net0)10.0.20.101/24, passerelle10.0.20.1, DNS domain et DNS servers. - Cliquer Regenerate Image, puis Hardware → Hard Disk → Disk Action → Resize (ex. +30 Go).
- Start.
qm clone 9000 101 --name srv-web01 --full 1 --storage ceph-vm
qm set 101 --ipconfig0 ip=10.0.20.101/24,gw=10.0.20.1 \
--nameserver 10.0.0.53 --searchdomain client.local
qm set 101 --net0 virtio,bridge=vmbr0,tag=20
qm disk resize 101 scsi0 +30G
qm cloudinit update 101
qm start 101
Clone lié pour un lab : qm clone 9000 201 --name lab-web01 (sans --full, depuis un template le clone est lié par défaut).
3. Configuration avancée (optionnel)¶
qm cloudinit dump 101 user > /var/lib/vz/snippets/user-web.yaml # partir de la config générée
# éditer : paquets (qemu-guest-agent), fuseau, commandes runcmd
qm set 101 --cicustom "user=local:snippets/user-web.yaml"
Vérifications
Rollback
Un clone se supprime sans impact : qm destroy 101 --purge. Un template ne se reconvertit pas en VM : pour le modifier, le cloner en complet, modifier la copie, la convertir en nouveau template (tpl-debian13-v2), puis supprimer l'ancien quand plus aucun clone lié n'en dépend.
Pièges vus en support
- Modification cloud-init sans Regenerate Image (ou
qm cloudinit update) sur une VM arrêtée de longue date : l'ancienne configuration est appliquée. - Disque de l'image cloud de 2 à 3 Go non agrandi : système plein au premier
apt upgrade. - Clone lié en production : impossible de supprimer ou de déplacer le template, et une corruption du disque de base touche tous les clones.
--cipasswordutilisé à la place des clés SSH : déconseillé par la documentation officielle.- Snippets
--cicustomsurlocalsans copie sur les autres nœuds : la VM ne démarre plus après migration. - Templates Windows : passer par
sysprepavantqm template, sinon SID dupliqués.
Quand ouvrir un ticket iTop
Demande de catalogue de templates maintenu par le MSP (contrat N3) : P4. Clone qui échoue sur un stockage partagé, cloud-init ignoré par l'invité : P3. Joindre qm config <vmid>, qm cloudinit dump <vmid> user et le journal de tâche.