Linux KVM : virtualisation windows 2003 server

réf : https://wiki.ubuntu.com/kvm
        http://doc.ubuntu-fr.org/kvm



Pour déployer plusieurs serveurs Windows Server 2003 sur un même serveur physique, on installe la solution d'hypervision intégrée de linux KVM.

Notre serveur hôte est une Ubuntu server 9.10 sur intel x86.
En effet, depuis la 8.10, des méta-paquets sont livrés afin de simplifier et d'administrer tout ce qui concerne KVM : ubuntu-virt-server et ubuntu-virt-mgmt.
On commence d'abord par activer la virtualisation matérielle dans le BIOS (une des options du CPU).

Installation de libvirt :

Puis on installe les paquets de gestion et administration de KVM :

apt-get install ubuntu-virt-server  ubuntu-virt-mgmt

Il installe un postfix au passage qu'on ne configure pas.
On obtient à la fin de l'installation un paquet d'outils utilisant libvirt :
virsh virt-convert  virt-install  virt-clone   virt-image   virt-manager  virt-viewer

On ajoute l'utilisateur au groupe libvirt :
adduser `id -un` libvirtd

Afin d'éviter toutes les manipulations de CD, on crée une image iso de l'OS à virtualiser :

dd if=/dev/cdrom of=WindowsServer2003R2-disc1.iso


Création et déploiement d'un serveur virtuel :

réf : http://www.linuxcertif.com/man/1/virt-install/

virt-install --connect qemu:///system -n win2003-1 -r 1024 --vcpus=2 -f ~/win2003-1.qcow2 -s 12 -c ~/WindowsServer2003R2-disc1.iso --vnc --noautoconsole --os-type=windows --os-variant=win2k3 --accelerate --network=bridge:virbr0 --keymap=fr --hvm

ce qui signifie :

--connect : connecte l'hyperviseur en tant que root
- n : le serveur virtuel aura le nom win2003-1
- r : avec 1024 Ko de RAM
--vcpus=2 : et deux processeurs virtuels
-f : dans le fichier win2003-1.qcow2    (en fait, je range les VM dans /home/vm/)
-s : fichier qui aura une taille de 12 Go
-c : pour donner le fichier source, l'image ISO de l'OS à installer
--vnc : active une console vnc pour contacter le guest (port 5900)
--noautoconsole : pour empêcher la tentative de connexion à la console immédiatement à partir de l'hôte
--os-type : windows pour spécifier un windows
--os-variant : pour optimiser le fonctionnement pour windows 2003
--accelerate : pour utiliser l'accélération matérielle KVM
--network=bridge : pour fonctionner en mode bridge (voir conf en bas de page)
--keymap : pour avoir clavier français dans la console
--hvm : pour forcer la virtualisation complète

A partir d'un poste client sur lequel on a installé virt-viewer, on peut alors suivre la procédure d'installation à distance pour faire les choix de configuration de l'assistant d'installation. Attention, il faudra un mot de passe root.

sudo virt-viewer --connect qemu+ssh://root@192.168.100.8/system win2003-1

A la fin de l'installation, on obtient sur l'hôte ce message :
Installation de l'invité terminée... Redémarrage de l'invité.
Il suffit de relancer le client virt-viewer pour continuer.

Ensuite pour la gestion graphique au quotidien :
sudo virt-manager --connect qemu+ssh://root@192.168.100.8/system win2003-1

VirtIO

les drivers : http://www.linux-kvm.org/page/VirtioWindowsDrivers
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers


Pour passer de la simple virtualisation à l'hypervision, il faut que le système invité sache qu'il est virtualisé et adresse ses appels systèmes directement à l'hyperviseur, en particulier pour les entrées/sorties lentes : réseau et disque.

Pour ceci, on réalise deux choses :
  1. on installe des drivers virtIO de disque et de réseau
  2. on configure l'hyperviseur pour qu'il écoute sur la couche virtIO
Let's go, baby !

Le réseau

Sur l'hyperviseur, guest stoppé, on édite la conf du domaine :
virsh edit win2003-1
Et on modifie le bloc concernant l'interface réseau en ajoutant le type du modèle à la valeur virtio

    <interface type='bridge'>
      <mac address='54:52:00:20:e5:51'/>
      <source bridge='virbr0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
    </interface>
ATTENTION : le premier octet de la MAC address doit être une valeur paire
Note: Make sure the first octet in your MAC address is EVEN (eg. 00:) as MAC addresses with ODD first-bytes (eg. 01:) are reserved for multicast communication and can cause confusing problems for you. For instance, the guest will be able to receive ARP packets and reply to them, but the reply will confuse other machines. This is not a KVM issue, but just the way Ethernet works.

On démarre le guest :
virsh start win2003-1
Windows détecte alors un nouveau matériel, on suit l'assistant et on lui indique les drivers décompressés de NetKVM (fichier joints). A la fin de la procédure, on a le réseau de l'invité qui passe par la couche virtIO, ce qu'on peut vérifier dans le gestionnaire de périphérique par la présence d'un "Red Hat VirtIO Network adapter".

Le disque

La procédure est un peu plus délicate. En effet, on ne peut pas modifier dans l'hyperviseur le driver du disque sur lequel est monté l'OS invité, sans quoi celui-ci ne va pas se lancer.
On stoppe l'invité :
virsh shutdown win2003-1

On crée  d'abord sur l'hyperviseur une deuxième image disque qui va ne servir qu'à installer les drivers virtIO sur l'invité.
kvm-img create /home/jerome/tmpHD.qcow2 100M
On édite  la configuration de l'hyperviseur :
virsh edit win2003-1
On ajoute un bloc représentant une nouveau disque pointant sur le nouveau fichier image et utilisant le driver virtio, mais on laisse surtout l'ancien disque contenant l'OS  en "ide" :
    <disk type='file' device='disk'>
      <source file='/home/jerome/win2003-1.qcow2'/>
      <target dev='hda' bus='ide'/>
    </disk>
   
    <disk type='file' device='disk'>

      <source file='/home/jerome/tmpHD.qcow2'/>
      <target dev='hda' bus='virtio'/>
    </disk>
On redémarre l'invité :
virsh start win2003-1
Celui-ci va détecter un nouveau matériel et proposer d'installer les drivers qu'on va chercher dans l'archive décompressée de viostor (fichier joint). On suit l'assistant en acceptant l'installation de drivers non signés ("continue anyway"). A la fin, on doit voir dans le gestionnaire de périphérique des devices SCSI/RAID de type : Red HAT VirtIO SCSI controller.

Il suffit alors d'éteindre l'invité :
virsh shutdown win2003-1
Et dans sa configuration sur l'hyperviseur :
virsh edit win2003-1
de supprimer le bloc du disque temporaire et d'utiliser désormais le driver virtio pour le disque image de l'OS :

    <disk type='file' device='disk'>
      <source file='/home/jerome/win2003-1.qcow2'/>
      <target dev='hda' bus='virtio'/>
    </disk>

 
On obtient à la fin dans le gestionnaire de périphériques ceci :

Le réseau en mode bridge

réf : https://help.ubuntu.com/community/KVM/Networking
et conseils d'Anthony Hinsinger du projet vi4rt : https://redmine.univ-pau.fr/projects/show/vi4rt

L'idée est de placer la ou les machine(s) virtuelle(s) sur le même réseau que l'hyperviseur. Pour cela, il faut créer un pont (bridge) virtuel auquel nous allons connecter la, ou les, interface(s) virtuelle(s) ainsi que l'interface physique de l'hyperviseur. On donne l'IP initiale de l'hyperviseur au bridge virbr0

dans /etc/network/interfaces
pour une conf du bridge en DHCP :
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto virbr0
iface virbr0 inet dhcp
bridge_ports eth0
bridge_fd 0
pour une conf du bridge avec adresse fixe :
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto virbr0
iface virbr0 inet static
address 192.168.100.8
network 192.168.100.0
netmask 255.255.255.0
broadcast 192.168.100.255
gateway 192.168.100.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Et on n'oublie pas de relancer le réseau sur l'hyperviseur :
sudo /etc/init.d/networking restart
ċ
NetKVM.zip
(767k)
Jérôme Bousquié,
5 mars 2010 à 22:43
ċ
viostor.zip
(312k)
Jérôme Bousquié,
5 mars 2010 à 22:43
Comments