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

You have to be logged in to comment this post.