Préparer et cloner ses VM Linux pour une solution DevOps

Installer une machine virtuelle Linux et la cloner n’a rien de sorcier. Tout du moins de premier abord.

La problématique du clonage

Si vous demandez à un administrateur Linux, il vous dira qu’il suffit de copier la VM et le tour est joué. Si en plus il a de grosses ouillères, il ajoutera que sous Linux il n’y a pas de notion de sysprep, car Linux n’en a pas besoin.

Mais c’est là que le bât blesse. En fonction de la solution DevOps à laquelle vous destinez votre VM Linux, il y aura besoin que ces VM soient différenciables. Le plus souvent, l’outil s’appuiera sur des id générés ou récupérés par Linux lors de la détection de ses matériels (Carte mère, Cartes réseau, Disque dur, ...).

Par exemple, Kubernetes s’appuie sur :
  • L’adresse MAC de la carte réseau.
  • Le product_uuid, déterminé par la carte mère.

Si vous clonez une VM par simple copier-coller, ces informations seront identiques. Votre hyperviseur changera peut-être les adresses MAC des cartes réseau, mais cela n’ira pas plus loin.

Comment s’en sortir pour le clonage ?

La solution la plus simple pour cloner une VM va consister à ne garder que l’essentiel : le disque dur sur lequel vous avez installé votre Linux.

Pour cloner votre Linux, il suffit donc de créer un script qui créera une nouvelle VM à partir d’une copie de votre disque dur virtuel d’origine.

La problématique de la préparation

Avant de cloner sa VM il faut malheureusement se confronter à un problème face auquel toutes les distributions ne sont pas logées à la même enseigne : le réseau.

Le plus souvent, votre carte réseau sera montée comme étant l’interface eth0.

Après clonage/copie, la carte réseau devrait changer d’adresse MAC. En fonction de votre distribution, les cas les plus courants sont :

  • La carte réseau est considérée comme nouvelle, et monte avec la référence eth1. L’interface eth0 n’est pas pour autant oubliée.
  • La carte réseau doit être reconfigurée, car votre distribution ne comprend pas que la carte puise changer de MAC. Pour elle, ce n’est pas normal. (et parfois, cela ne marche plus, il faut supprimer l’interface réseau et en créer une nouvelle).

Ajouter à cela que pour chaque distribution la logique de reconfiguration peut différer.

Dans une approche DevOps, on aime le simple et le 100% reproductible. Avoir à adapter ses scripts en fonction d’un nom d’interface qui peut changer ou d’une distribution rotors n’est pas trivial.

Comment s’en sortir pour la préparation ?

Après quelques années de joies et déboires sur diverses distributions Linux, j’en suis arrivé à appliquer une routine qui ne m’a jamais trahi :

  • Installer la distribution, mettre à jour et installer l’ensemble des packages dont on va avoir besoin.
  • Éteindre la VM.
  • Supprimer les cartes réseau.
  • Allumer la VM.
  • Supprimer toute trace de la carte réseau (chaque distribution peut avoir ça logique).
  • Rebooter la VM (certaines distributions font le ménage après un second boot sans carte réseau).
  • Éteindre la VM.

La VM est prête à être clonée. La nouvelle instance de la VM montera automatiquement sa nouvelle carte sur l’interface eth0.

Voilà ;)

Un "sysprep" natif, ce serait quand même plus sympathique. Pour le moment, certaines distributions ont leur solution propre... (qui a dit solution propriétaire ?). Mais il n'existe pas de commande universelle.

Jérémy Jeanson

Comments

Bernard Legrand 9/13/2024

Bonjour à tout le monde. Merci pour cet article très utile.
L'installation et le clonage de machine virtuelle Linux peuvent sembler simples au premier abord, mais comme le souligne cet article, il y a plusieurs problématiques à considérer, notamment en lien avec la configuration réseau et l'identification des vm dans un environnement devops. Le principal enjeu du clonage réside dans la différenciation des vm univirtual clonées. Contrairement à Windows, qui utilise des outils comme sysprep pour préparer les images système, Linux ne dispose pas de solutions intégrées similaires. Cela signifie que des informations importants telles que les adresses MAC et les identifiants matériels restent identiques après un clonage simple. Cette uniformité peut poser des problèmes dans un contexte devops où chaque machine doit être distincte et reconnaissable par les outils de gestion et d'orchestration. Pour contourner ces difficultés, l'article propose une approche pragmatique. La clé est de ne garder que l'essentiel lors du clonage, à savoir le disque dur virtuel contenant le système Linux. Un script automatisé peut ensuite être utilisé pour créer une nouvelle virtual machine univirtual en utilisant ce disque, garantissant ainsi une configuration propre et reproductible.

You have to be logged in to comment this post.