Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE

Guide d'installation de Cloud-Init qui va vous permettre d'automatiser vos déploiements

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
pve proxmox proxmoxve cloudinit

Au sommaire :

  • 1-Qu'est-ce que Cloud-init ?
  • 2-Création d'un template
  • 3-Déployer une machine virtuelle

1-Qu'est-ce que Cloud-init ?

Cloud-init est un outil conçu par Canonical permettant de gérer l'initialisation d'une machine virtuelle dans le cloud. Au premier démarrage, cloud-init va :

  • Définir le nom d'utilisateur et son mot de passe,
  • Injecter la clé SSH,
  • Paramétrer la configuration réseau de la machine (adresse IP, passerelle, DNS),

C'est alléchant tout ça n'est-ce pas ? Ne plus se tracasser à créer manuellement une machine virtuelle. Comme dirait un célèbre humoriste : "beyond, it's a sun".

2-Création d'un template

Je vous invite à exporter la variable d'environnement "VM_ID" et à mettre un identifiant disponible sur votre serveur.

export VM_ID="900"

Puis, téléchargez une image cloud pré-configuré sur les serveurs d'Ubuntu. Renommez cette image "ubuntu.img" pour éviter les noms à rallonge.

wget -O ubuntu.img \
https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

Avec la commande "qm create", créez une machine virtuelle et ajoutez les caractéristiques suivantes :

qm create ${ID_VM} \
--name ubuntus2004 \
--agent=1,fstrim_cloned_disks=1 \
--machine pc-i440fx-5.2 \
--scsihw virtio-scsi-pci \
--core 4 \
--cpu kvm64 \
--memory 2048 \
--net0 virtio,bridge=vmbr0,firewall=1 \
--tablet 0
  • name: nommez la machine (ubuntu-server-2204 pour l'exemple),
  • agent/fstrim : activer l'agent QEMU qui permet d’arrêter, démarrer ou redémarrer la machine virtuelle. Quant à FSTRIM, il permet d'optimiser l'espace disque en éliminant les blocs inutilisés. Cette option s'activera lors d'une migration de la machine virtuelle ou d'un déplacement du disque virtuel,
  • machine : Seabios est le profil machine par défaut (équivalent du BIOS Legacy),
  • scsihw : choisissez virtio-scsi comme contrôleur SCSI du disque virtuel,
  • core : allouer 1 core,
  • cpu : kvm64 pour une portabilité et une abstraction optimale sur tout type de serveurs,
  • memory : allouez de la mémoire vive (1 Go dans l'exemple),
  • net0/bridge/firewall : ajoutez une carte réseau virtio sur le pont vmbr0 (pont par défaut de PVE) et activez le pare-feu,
  • tablet : désactivez le car il consomme des ressources inutilement.

Pour en savoir plus sur Virtio-SCSI et QEMU guest agent.

Virtio-SCSI
oVirt is a free open-source virtualization solution for your entire enterprise
Qemu-guest-agent - Proxmox VE

Importez le fichier "ubuntu.img" dans le volume "local-lvm" pour l'adjoindre à la machine virtuelle.

qm importdisk ${ID_VM} ubuntu.img local-lvm

Nommez le nouveau disque "vm-${ID_VM}-disk-0" sans oublier les options discard et ssd. Pour information :

  • SSD Emulation : indique au système virtualisé qu'il tourne sur un SSD,
  • Discard : active FSTRIM,
qm set ${ID_VM} \
--scsi0 local-lvm:vm-${ID_VM}-disk-0,discard=on,ssd=1

Montez le lecteur cloud-init. Cet outil permet de grandement faciliter la configuration des machines virtuelles lors de leur premier démarrage.

qm set ${ID_VM} --ide2 local-lvm:cloudinit

Faites que la machine virtuelle démarre sur le disque scsi0.

qm set ${ID_VM} --boot c --bootdisk scsi0

Enfin, transformer le tout en template réutilisable à volonté.

qm template ${ID_VM}

Félicitation ! Vous avez un template prêt à l'emploi.

Nous avons vu comment créer un template à partir d'une image cloud d'Ubuntu et Debian.

Maintenant, nous allons voir comment déployer une machine virtuelle à partir d'un template et profiter des avantages qu'offre Cloud-init.

3-Déployer une machine virtuelle

Allez dans les paramètres du template, cliquez sur le lecteur cloud-init et ajoutez les informations suivantes.

  • User : votre nom d'utilisateur,
  • Password : votre mot de passe,
  • DNS Domain : optionnel (je met 1.1.1.1),
  • DNS Server : optionnel (je met 8.8.8.8),
  • SSH public key : votre clé SSH publique (id_rsa.pub). Sur une distribution bureautique Linux, taper la commande suivante et copier le contenu :
cat /home/user/.ssh/id_rsa.pub

Après avoir copier votre clé publique, vous pourrez vous connecté sans mot de passe avec la commande "ssh user@ipaddress" en ajoutant votre nom d'utilisateur et l'adresse IP.

  • IP Config : configurez votre adresse IPv4 ainsi que votre passerelle (celle de votre box internet).

Faites un clique-droit sur le template, cliquez sur "clone" et donnez lui un nom. Vous aurez deux choix :

  • Full clone : copie 1:1 indépendante du template et prendra donc autant de place sur le disque,
  • Linked clone : clone lié au template. SI le template est supprimé, le clone lié ne fonctionnera plus. Pratique pour du test car consomme moins d'espace disque,

Cliquez sur "start" pour exécuter la machine virtuelle et.....

Félicitation!!!! Vous avez réussi le baptême du feu!!!!!

Vous allez pouvoir économiser un temps fou en expérimentant toutes sortes de choses dans votre homelab. Au démarrage, cloud-init va automatiquement créer l'identifiant et le mot de passe, injecter votre clé SSH, ajouter les paramètres réseaux ainsi que mettre à jour le système. Beau gosse ou pas beau gosse ?