LightcodeSysadmin Open Source

L'hyperviseur Xen

Xen est un hyperviseur, c’est un programme qui permet de virtualiser des systèmes d’exploitation de différentes manières. Dans cet article, nous verrons comment installer Xen et créer des machines virtuelles sous Debian.

Xen est un hyperviseur, c’est un programme qui permet de virtualiser des systèmes d’exploitation de différentes manières. Dans cet article, nous verrons comment installer Xen et créer des machines virtuelles sous Debian.

Installation

La version de Debian utilisée, dans cet article, pour cette installation de Xen est Wheezy. Commençons par installer le paquet principal de Xen :

# apt-get install xen-linux-system

Nous allons modifier la configuration réseau, elle ne sera prise en compte qu’au prochain redémarrage :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet static
  address 192.168.1.20
  netmask 255.255.255.0
  gateway 192.168.1.254
  bridge_ports eth0
  bridge_stp off       # disable Spanning Tree Protocol
  bridge_waitport 0    # no delay before a port becomes available
  bridge_fd 0          # no forwarding delay

Xen ajoute un noyau différent à votre configuration. Pour démarrer automatiquement dessus, il faut modifier les priorités dans le boot de votre distribution Linux.

# mv /etc/grub.d/10_linux /etc/grub.d/50_linux
# update-grub2

J’ai choisi de travailler avec la toolstack xl, c’est-à-dire que les commandes d’administration commenceront par xl. La commande xm est utilisée par défaut, celle-ci est déconseillée. D’autres toolstacks sont disponibles comme XAPI ou libvirt, mais je ne les utiliserai pas ici. Pour sélectionner une toolstack, il faut éditer le fichier /etc/default/xen en mettant la valeur TOOLSTACK à xl.

TOOLSTACK=xl

Après avoir modifié cette valeur, vous devez redémarrer votre machine.

Création de VMs

Installation et configuration des xen-tools

Nous allons utiliser les xen-tools pour créer les machines virtuelles. D’abord, installons-le :

# apt-get install xen-tools

xen-tools, utilise le fichier de configuration /etc/xen-tools/xen-tools.conf qui contient les différents paramètres par défaut qui seront appliqué lors de la création de machines virtuelles.

Il est conseillé de dé-commenter les options suivantes :

dir = /home/xen/
passwd = 1

Si vous utilisez la configuration réseau par adresse IP statique, vous devrez modifier ces paramètres pour ajouter une adresse de passerelle et un masque de sous-réseau.

gateway    = 192.168.1.254
netmask    = 255.255.255.0
broadcast  = 192.168.1.255

Création de VMs avec bootstrap

La création de VMs se fait à l’aide de la commande xen-create-image, la création se base sur le fichier de configuration présenté précédemment. Il est possible de forcer les paramètres comme ici :

# xen-create-image --hostname foo.example --ip 192.168.1.30 --vcpus 2 --pygrub --dist wheezy
  • Le paramètre --hostname est obligatoire lors de la création de VMs, ce nom est utilisé pour désigner la VM
  • --vcpus 2 pour changer le nombre de CPU
  • --ip 192.168.1.30 permet de fixer une adresse IP (obligatoire dans le cas où l’on configure les machines avec une IP statique
  • --dist wheezy spécifie la version de Debian qui est installé

Si vous utilisez cette commande, à chaque création de nouvelles VMs, vous allez télécharger Debian. Ceci n’est pas très efficace lorsque l’on veut déployer plusieurs VMs, car le téléchargement peut être assez long et ça utilise inutilement la bande passante. Cette méthode est appelée “bootstrap” car cela utilise la commande debootstrap pour installer Debian.

Déploiement avec la méthode de copie

La copie va permettre d’installer une VM en copiant les fichiers récursivement depuis un répertoire. Les fichiers seront ensuite modifiés grâce aux hooks pour paramétrer la VM grâce aux commandes que nous avons vues précédemment. Dans mon cas, j’ai choisi de n’installer que des VM sous Debian. Je vais donc utiliser le bootstrap Debian pour récupérer les fichiers, on utilise la commande debootstrap :

$ debootstrap --include=openssh-server,htop,screen,vim,bash-completion wheezy debian-wheezy

La commande va télécharger les fichiers Debian Wheezy pour la mettre dans le dossier debian-wheezy. Il est possible d’indiquer des paquets à télécharger avec --include (comme dans l’exemple) ou exclure des paquets avec la commande --exclude. Pour connaître les paquets installés, vous pouvez faire :

$ debootstrap --print-debs wheezy /tmp/wheezy-pkg

Maintenant que nous avons téléchargé les fichiers, on va pouvoir créer notre première VM :

# xen-create-image --hostname foo.example --dist wheezy \
                   --install-method copy --install-source debian-wheezy --dhcp

L’option --install-method copy sélectionne le mode d’installation à la copie d’un répertoire. --install-source permet de sélectionner le répertoire d’installation. Il est tout à fait possible d’ajouter ces paramètres dans le fichier /etc/xen-tools/xen-tools.conf. J’ai utilisé l’option --dhcp pour raccourcir un peu la commande, elle indique que la VM utilisera le protocole DHCP pour récupérer une adresse IP.

Avec ce mode d’installation, nous n’aurons besoin de télécharger qu’une seule fois les fichiers de Debian ainsi que les paquets que nous voudrons installer. Nous allons ainsi gagner en temps ainsi qu’en bande passante.

Le réseau

La configuration du réseau sur l’hôte est présentée ci-dessus. xenbr0 est le bridge principal, il est connecté directement sur eth0. Vous devrez modifier la configuration présentée pour correspondre à vos besoins.

Vous pouvez ajouter d’autres bridges virtuels pour créer autres réseaux isolés sur reste. Voici un exemple pour ajouter le bridge xenbr1 :

# brctl addbr xenbr1
# ip link set xenbr1 up

Pour qu’il soit automatiquement installé au démarrage de l’OS, vous devrez ajouter ceci dans votre fichier /etc/network/interfaces :

auto xenbr1
iface xenbr1 inet manual
  pre-up brctl addbr $IFACE
  up ip link set $IFACE up
  post-down brctl delbr $IFACE
  down ip link set $IFACE down

Pour mettre une machine virtuelle dans ce nouveau réseau, il va falloir soit utiliser le paramètre --bridge lors de la création de la VM soit modifier le fichier de configuration d’une machine virtuelle. Ce fichier se situe dans le dossier /etc/xen/ et porte le nom de votre VM (hostname) avec l’extension .cfg.

La variable qui nous intéresse se nomme vif, nous pouvons la modifier dans ce fichier pour ajouter par exemple une nouvelle interface ou modifier le bridge auquel une interface est attaché :

vif = [ 'bridge=xenbr0,ip=192.168.1.1,mac=00:16:3E:AA:AA:AA',
        'bridge=xenbr1,ip=10.0.0.1,mac=00:16:3E:BB:BB:BB' ]

La modification de ce fichier n’affectera pas les fichiers sur la VM. En effet, nous avons vu précédemment que lors de la création il était possible de spécifier une adresse IP. Grâce aux hooks, cette adresse IP est ajouté à la configuration de la VM dans le fichier /etc/network/interfaces. En modifiant directement le fichier de la VM, nous n’affecterons pas la configuration du réseau à l’intérieur de la VM, il faudra alors faire les modifications à la main.

Utilisation des VMs

Pour démarrer la VM, il faut utiliser la commande :

# xl create /etc/xen/foo.example.cfg

Voici quelques commandes pour manipuler vos VMs :

Description Commande
Eteindre une VM xl shutdown foo.example
Accéder à la console d’une VM xl console foo.example
Pause d’une VM xl pause foo.example
Lister les VMs xl list
Statistiques sur les VMs xl top

La commande xl console permet d’accéder à la VM directement depuis l’hôte sans passer par SSH. Pour quitter la console faire la combinaison Ctrl + (.

Enfin, pour supprimer une VM :

# xen-delete-image foo.example

Conclusion

Nous avons vu dans cet article comment créer des machines virtuelles sous Debian de manière assez simplifié. Voici quelques pistes pour automatiser la création :

  • Les hooks : j’en ai parlé plusieurs fois, ils permettent d’installer des paquets ou de modifier les fichiers de configuration Linux de la VM. Les hooks sont exécutés lors de la création de chaque VM.
  • Les roles sont des hooks qui s’exécuteront à la demande. Ils permettent de spécialiser une VM en installant des paquets spécifiques.

Nous verrons probablement d’autres astuces de configuration de Xen dans un prochain article.