Aller au contenu

Templates, cloud-init, clones liés et complets

Day 1 · DéployerNiveau 2 · OpérerProcédureRédigé · à valider en lab

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

  1. Clic droit sur le template 9000 → Clone.
  2. VM ID 101, nom srv-web01, Mode Full Clone, stockage cible ceph-vm.
  3. VM 101 → Cloud-Init : User exploit, SSH public key, IP Config (net0) 10.0.20.101/24, passerelle 10.0.20.1, DNS domain et DNS servers.
  4. Cliquer Regenerate Image, puis Hardware → Hard Disk → Disk Action → Resize (ex. +30 Go).
  5. 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

qm config 9000 | grep template
# template: 1
qm cloudinit dump 101 network
# ... address: 10.0.20.101 ... gateway: 10.0.20.1
qm agent 101 ping && echo agent OK
ssh exploit@10.0.20.101 'cloud-init status'
# status: done

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.
  • --cipassword utilisé à la place des clés SSH : déconseillé par la documentation officielle.
  • Snippets --cicustom sur local sans copie sur les autres nœuds : la VM ne démarre plus après migration.
  • Templates Windows : passer par sysprep avant qm 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.

Ouvrir un ticket iTop

Pour aller plus loin