
La virtualisation permet de gérer plusieurs machines d'architecture et de systèmes d'exploitation divers sur une seule machine physique.
L'interêt de la virtualisation réside dans l'économie tant en achat de machines qu'en électricité.
Parmi les diverses solutions de virtualisation, KVM est particulièrement intéressant en environnement Linux (car intégré au noyau) mais aussi sans interface graphique.
L'installation est simple (seulement quelques packages) et la configuration ne tient qu'en peu de lignes...
Pré-requis :
Tout d'abord, afin de pouvoir utiliser KVM, il faut savoir si la machine hôte est compatible. En effet, la virtualisation via KVM nécessite un processeur assez récent. Pour le savoir il suffit d'exécuter la commande suivante, si une sortie est produite, la machine est apte à l'utilisation de KVM.Installation :
Tout d'abord, il faut installer les packages nécessaires au bon fonctionnement de KVM. Ces packages correpondent au KVM proprement dît, qemu (une autre solution de virtualisation partenaire de KVM fonctionnant aussi sous windows) et des utilitaires afin de construire un pont sur les interfaces réseaux (optionnel).Les packages installés, il faut ajouter les modules nécessaires au noyau :
pour un processeur AMD,
pour un processeur Intel.
Si KVM est utilisé par un utilisateur autre que root, il faut ajouter celui-ci au groupe KVM (ici l'utilisateur courant) :
Configuration :
La configuration se fait sur plusieurs niveaux :- disque dur virtuel
- machine virtuelle
- réseau
Le disque virtuel :
Il existe plusieurs méthodes pour créer un disque virtuel et parmi celles-ci 2 sont très simple : utiliser la commande dd ou bien qemu-img (installé grâce au package qemu précédement installé). Pour faire son choix, il suffit de connaître ses besoins.
dd construira un fichier de taille finie et pré allouée tant dis que qemu-img construit un fichier dont la taille s'étend selon les besoins (jusqu'à une taille limite préalablement déterminée).
Avec dd :
Quelques explications :
Ici nous créons un fichier
- de 5Go ( 5000000 blocs (count) de 1024 octets (bs = block size);
- rempli de 0 (if = input file);
- qui se nomme disk.img (of = output file)
Avec qemu-img :
qemu-img est un utilitaire dédié à la création de de disques virtuels et par conséquent permet de gérer plusieurs "systèmes de fichiers". Parmi les systèmes de fichiers possible figurent qcow et qcow2. Que l'on choisisse l'un ou l'autre la ligne de commande permettant la création du disque virtuel reste la même :
Quelques explications :
Ici nous créons un disque
- de 5Go (dernier paramètre);
- de format qcow2 (-f qcow2);
- qui se nomme disk.img
Ce comparatif consiste en la création d'un fichier de 1 ou 2Go au sein d'une machine virtuelle ayant son disque créé avec dd ou qemu-img :
| 1Go | 2Go | |
| dd | 65s | 137s |
| qemu-img / qcow | 1465s | 3042s |
| qemu-img / qcow2 | 61s | 125s |
Par conséquent, que l'on choisisse de créer le disque par dd ou qemu-img (en qcow2), il n'y a guère de différence et le choix se portera certainement plus sur la gestion du disque de la machine hôte.
Il est toute fois à noter que qemu_img permet de spécifier différentes options telles que la compression automatique des données dans le disque virtuel, la possibilité de faire des snapshots ou encore de faire des disques pour VirtualBox.
La machine virtuelle :
La configuration d'une machine virtuelle sous KVM se au lancement de celle-ci suivant les options fournies.
KVM permet de gérer beaucoup d'options mais nous ne verrons ici que les principales.
Le processeur :
Il est possible d'allouer un ou plusieurs processeurs physiques à la machines virtuelle, ceci permettant d'ajuster les performances de celle-ci.
Il faut bien faire attention de ne pas allouer plus de processeurs (toutes machines virtuelles confondues) qu'il n'y en a réellement si l'on ne veut pas avoir de perte de performance.
Le nombre de processeur est défini par l'option -smp (par exemple pour un pocesseur -smp 1).
La mémoire :
De même que pour le processeur, il est possible d'allouer la taille de la mémoire vive selon les besoins de la machines virtuelles (une base de données n'a pas les mêmes exigences qu'un serveur httpd par exemple).
Afin d'éviter le phénomène de swap de la machine hôte, il faut faire attention de lui laisser suffisamment de mémoire vive.
La taille de la mémoire vive est définie par l'option -m (par exemple pour 512Mo -m 512).
Le disque dur :
Il est possible d'affecter jusqu'à 2 disques durs via les options hda et hdb.
Pour affecter un disque dur, il suffit d'ajouer l'option -hda /data/vm/kvm/server/disk.img.
Le clavier :
Par défaut, c'est le clavier américain (qwerty) qui est configuré sous KVM. Il est toute fois possible de forcer un clavier particulier avec l'option -k (par exemple -k fr pour un clavier français azerty).
Le cdrom :
Pour utiliser une image de cdrom dans une machine virtuelle, il faut définir un lecteur grâce à l'option -cdrom, ceci permettant d'installer un système d'exploitation par exemple (-cdrom /data/iso/ubuntu-i86.iso).
Pour démarrer sur le cdrom, il faut ajouter l'option -boot d.
L'interface réseau :
Il n'est pas nécessaire de configurer le réseau pour qu'il soit fonctionnel. Par défaut, KVM crée un réseau privé entre sa machine hôte et la machine virtuelle permettant ainsi celle-ci d'accéder à internet.
Cette configuration par défaut ne permet cependant pas d'accéder au réseau local ni d'accéder à la machine virtuelle de manière distante.
Pour que ceci fonctionne, il faut configuré un pont entre une interface physique et la machine virtuelle.
Parce que le package bridge a été installé, il suffit de configurer le fichier /etc/network/inteface :
Quelques explications :
- Ici, l'interface physique eth0 sera l'interface sur laquelle le pont sera construit. Pour cela, elle est montée automatiquement en manual;
- Le pont se nomme br0 et dispose d'une adresse statique (typiquement, l'adresse qu'aurait dûe avoir eth0)
- bridge_ports définie l'interface physique utilisée comme support;
- bridge_fd définie le temps (en seconde) entre les étapes d'écoute et d'apprentissage (lors de la connexion à un réseau fréquenté);
- bridge_hello définit le temps entre 2 messages hello utilisés pour connaitre la topologie du pont (utile seulement si il y a plusieurs ponts définis dans le Spanning Tree);
- bridge_maxage définit le temps maximum d'attente entre 2 messages hello. Passé ce délai, l'interface est désactivée (utile seulement si il y a plusieurs ponts définis dans le Spanning Tree);
- bridge_maxwait définie le délai d'attente avant le lancement du pont;
- bridge_stp_off désactive le Spanning Tree
Après un redémarrage des interfaces réseau, le pont est opérationnel :
Pour que plusieurs machines virtuelles partagent le même pont sans conflit, il faut générer pour chacune une adresse MAC différente. Pour créer une adresse MAC aléatoire, la ligne de commande suivante est suffisante :
La création des interfaces virtuelles se faisant par script, il est nécessaire de configurer les interfaces TUN/TAP afin qu'un utilisateur autre que root puisse lancer les créer.
Pour ce faire, il faut changer les droits de l'interface /etc/net/tun en créant le fichier /etc/udev/rules.d/80-persistent-tun.rules :
et en ajoutant les droit sudo à brctl, kvm et tunctl (via sudo sudoedit /etc/sudoers ) :
Enfin, il faut créer les scripts de montage / démontage de l'interface virtuelle.
Pour le montage /data/vm/kvm/bin/kvm.if-up :
Pour le démontage /data/vm/kvm/bin/kvm.if-down (optionel) :
La configuration de la machine finie, il est maintenant possible d'utiliser le pont dans une machine virtuelle grâce aux options suivantes (à utiliser conjointement) :
- -net nic,vlan=0,macaddr=$MAC où $MAC est une adresse MAC générée. Cette option permet de définir une adresse MAC à l'interface virtuelle connectée au VLAN 0
- -net tap,vlan=0,script=/data/vm/kvm/bin/kvm.if-up,downscript=/data/vm/kvm/bin/kvm.if-down Cette option crée une interface TAP sur la machine hôte et définie les scripts à exécuter lors du montage et démontage de l'interface (par exemple la création des routes locales, des règles iptables, etc...)
Si on exécute KVM dans un environnement sans interface graphique, il est possible d'indiquer à celui-ci d'ouvrir un port d'écoute VNC grâce à l'option -vnc port.
Ceci est particulièrement utile pour l'installation de la machine virtuelle par exemple...
Exemples d'utilisation :
Démarrage simple d'une machine avec un disque dur, un processeur et 512Mo de RAM :Ajout d'un cdrom :
Démarrage sur le cdrom :
Ajout d'une interface réseau (avec $MAC une adresse MAC générée) :
Démarrage avec prise en charge réseau (installation réseau via PXE) :
Prise en charge de VNC sur le port 5901 :
Un script de lancement :
Bien que l'utilisation de KVM soit simple, elle peut devenir laborieuse a cause su grand nombre d'options possible.Par conséquent, voici un exemple de script et d'arborescence pour la gestion de plusieurs machines virtuelles.
Chaque machine est définie par un répertoire content son disque virtuel et son fichier de configuration contenant le processeur, la mémoire, l'adresse MAC de l'interface virtuelle et le port VNC :
Quelques explications :
- Les entrées obligatoires sont disk, cpu et ram
Le script de lancement :
Quelques explications :
- Le script prends en paramètre le nom de la machine virtuelle à lancer, nom qui correspond au répertoire où elle est stockée.
- Le fichier config.ini est parsé afin de récupérer les différents paramètres de la machine virtuelle.
- La machine est configurée et lancée
Articles similaires
| Commentaires |
|













