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.