Virtualisation avancée de stations de travail Windows sous Linux KVM

Transcription

Virtualisation avancée de stations de travail Windows sous Linux KVM
Virtualisation avancée de stations de travail
Windows sous Linux KVM
Jean-Marc Liger
Faculté de Médecine Paris-Descartes
Service Informatique et Multimédia
15 rue de l'école de Médecine
75006 PARIS
Julien Joubin
Faculté de Médecine Paris-Descartes
Service Informatique et Multimédia
15 rue de l'école de Médecine
75006 PARIS
Résumé
Cet article présente un retour d'expérience sur la virtualisation de serveurs Windows 2008/2012 et de
stations de travail Windows Seven, en environnement professionnel.
Après une rapide présentation des motivations ayant conduit au choix de la solution hôte Linux KVM,
nous aborderons les différentes étapes permettant d'arriver à une solution fonctionnelle pour l'invité
Windows, en particulier les optimisations de performance que nous pouvons apporter à cet
environnement, notamment grâce aux drivers de paravirtualisation fournis avec le protocole SPICE.
Nous verrons ensuite comment tirer partie de cette solution pour mettre en œuvre un système de partage
de données entre l'hôte et l'invité, réaliser des sauvegardes de l'invité, en ligne de commande depuis
l'hôte, et gérer ainsi facilement les mises à jour de Windows sans avoir à se soucier de l'écran bleu. A ce
stade nous disposerons de tous les éléments permettant de mettre en œuvre rapidement un Plan de
Reprise d'Activité, simple et robuste.
Pour aller plus loin, nous examinerons le format de stockage QCOW2, qui permet à la fois la
compression des données et le support du mode Copy on Write. Nous aborderons alors la mise en oeuvre
conjointe de PXE, d'une racine cliente sur NFSROOT pour la distribution diskless des VMs dans des
salles de cours de la faculté.
Enfin nous verrons les avantages qu'offre l'architecture de fichiers distribuée RDB/Ceph pour mettre en
œuvre un Plan de Continuité d'Activité.
Nous aurons ainsi abordé une solution simple et robuste, présentant de très nombreuses possibilités, mais
surtout des évolutions régulières et pérennes, le tout pour un faible de coût de possession.
Mots-clefs
Windows, Linux, KVM, LibVirt, SPICE, VirtIO, QCOW2, RDB, Copy On Write, PXE, NFSROOT, PRA,
PCA
1 Introduction
Comme de nombreux administrateurs système ou développeurs, nous avons souhaité depuis longtemps
pouvoir utiliser plusieurs OS sur une même plateforme. L'augmentation des ressources matérielles et des
performances logicielles a permis d'écarter les solutions de « multiboot » au profit des solutions de
virtualisation, plus simples à mettre en oeuvre et qui permettent de lancer plusieurs OS en même temps.
JRES 2015 – Montpellier
1/7
Ces solutions, un temps réservées aux environnements de test ou de développement, se sont avérées
suffisamment stables et agiles pour désormais peupler de nombreux environnements de production.
J'ai démarré sous VMware Fusion qui m'a rendu de grands services jusqu'au moment où j'ai perdu
plusieurs VM (Virtual Machine). J'ai évolué vers VirtualBox alors libérée par InnoTek, avant d'être
rachetée ultérieurement par Sun puis Oracle. Multiplateforme, cette solution performante bénéficie
d'outils d'administration en ligne de commande. Elle nécessite cependant, à chaque nouvelle mise à jour,
la réinstallation d'« addons » propriétaires pour être complète.
Ayant précédemment virtualisé avec succès des serveurs Windows 2008/2012 dans des environnements
de production sous Linux KVM (Kernel-based Virtual Machine), j'ai souhaité transposer cette solution
sur mon poste de travail en Windows Seven.
J'ai bénéficié dans cette démarche des conseils précieux de mon collègue Julien JOUBIN qui avait déjà
mis en oeuvre une solution de gestion de salles de cours avec des VM Windows Seven bootant en mode
PXE sur une racine NFSROOT en tirant pleinement partie du protocole SPICE et du mode Copy on
Write.
Ainsi cet article se veut une approche synthétique de nos expériences conjointes de bonnes pratiques en
matière de virtualisation. Vous trouverez en bibliographie plusieurs documents très complets, vous
permettant d'approfondir les points que nous n'avons pas souhaité réécrire.
2 Mise en oeuvre d'une solution fonctionnelle
2.1
Installation de l'environnement de virtualisation sur l'hôte Linux
KVM est un hyperviseur libre pour Linux qui tire partie des instructions de virtualisation des processeurs
en s'appuyant sur l'API (Application Programming Interface) Libvirt.
Directement intégré dans le noyau Linux, c'est un hyperviseur de Type 1 (on parle alors de mode natif ou
« bare metal ») qui ne nécessite pas l'installation d'un logiciel supplémentaire comme VirtualBox (qui est
un hyperviseur de Type 2). Enfin contrairement à son prédécesseur Xen, il fonctionne sans modification
du noyau Linux et sans paravirtualisation préalable du système invité. Développé à l'origine pour les
processeurs x86 Intel VT ou AMD-V, il a été ensuite porté sur les architectures Power PC, IA-64 et
récemment ARM.
KVM supporte le protocole de communication SPICE (Simple Protocol for Independent Computing
Environments) qui permet entre-autre la redirection de l'USB et la prise en charge des pilotes d'émulation
vidéo QXL.
KVM supporte enfin les pilotes de paravirtualisation VirtIO, notamment pour la gestion des cartes
réseaux, des disques et de la mémoire.
Après avoir vérifié qu'il est supporté par notre processeur et qu'il n'est pas désactivé au niveau du BIOS,
nous installons KVM et le gestionnaire graphique Virtual Machine Manager sur notre distribution Linux
habituelle, ici sur CentOS 7 :
$ lsmod | grep kvm
kvm_intel
kvm
148290
462854
8
1 kvm_intel
$ yum install qemu qemu-kvm virt-manager
JRES 2015 – Montpellier
2/7
2.2
Installation de l'invité Windows en ajoutant les pilotes QXL et VirtIO
Contrairement à Linux qui les incorpore dans son noyau, il est nécessaire d'installer sur Windows des
pilotes supplémentaires QXL pour bénéficier du redimensionnement de l'affichage et VirtIO pour
l'optimisation des entrées sorties.
Ces pilotes améliorent grandement les performances de notre VM Windows et nous allons utiliser les
instructions en ligne de commande pour les incorporer dès le processus de création.
On télécharge pour cela les derniers pilotes stables fournis par Redhat sur le site de Fedora. On procède
alors à la création de la VM en précisant ses paramètres d'installation :
$ wget -c -N https://fedorapeople.org/groups/virt/virtiowin/direct-downloads/stable-virtio/virtio-win.iso
$ virt-install \
--name Windows7_JRES \
--os-variant win7 \
--ram=4096 \
--vcpus=2 \
--disk path=/var/lib/distributions/Windows7.iso,device=cdrom \
--disk path=/var/lib/distributions/virtio-win.iso,device=cdrom \
--disk path=/var/lib/libvirt/images/Windows7_JRES.qcow2,
size=40,format=qcow2,bus=scsi \
--network bridge=br0,model=virtio \
--sound ac97 \
--graphics spice
On sélectionne et on installe successivement les pilotes complémentaires QXL et VirtIO Network, Serial,
Memory Balloon et SCSI. Une fois ce dernier pilote installé, le disque dur est désormais reconnu et il est
alors possible de poursuivre l'installation classique de Windows Seven.
2.3
Optimisation de l'espace disque de l'invité Windows
Lors des mises à jour, la conservation par le système des versions antérieures des drivers entraînera une
augmentation mécanique de l’espace disque utilisé. Il est donc préférable de forcer la mémoire virtuelle à
zéro Mo, de réduire l'image mémoire partielle à 128 Ko et de supprimer les points de restauration du
système, ces aspects de restauration pouvant être pris en charge de façon optimale depuis l'hôte.
2.4
Installation d'un partage des données avec Samba
La mise en place sur les invités d’une interface réseau de type NAT permet une communication entre les
systèmes invités et le système hôte qui partage un même sous-réseau.
L’installation d’un serveur SAMBA sur le système hôte Linux permet alors aux systèmes invités
Windows de partager des données via NetBIOS.
Ceci s'avère très utile pour effectuer quelques sauvegardes de fichiers depuis l'invité ou mieux encore
partager des données de messagerie entre l'hôte et plusieurs invités.
2.5
Réaliser simplement des sauvegardes de l'invité Windows
Pour KVM le stockage d’un système invité se résume à deux fichiers : le fichier de données dans un
format image, le fichier de configuration dans un format XML.
JRES 2015 – Montpellier
3/7
La sauvegarde du système invité se résume donc à l’arrêt de celui-ci et à la copie de ces deux fichiers
dans un espace de stockage différent. La restauration du système invité se résume donc à la réinjection de
ces deux fichiers dans l’espace d’exécution initial.
2.6
La mise en place d'un PRA (Plan de Reprise d'Activité)
L’utilisation de l’outil virsh permet de réaliser de très nombreuses opérations en ligne de commande, tel le
démarrage, l’arrêt ou la mise en pause des systèmes invités.
Ainsi la mise en place d’un PRA s’opère grâce à des scripts lancés depuis l’hôte, lors d’une période de
non utilisation. Il suffit d’arrêter ou de mettre en pause le système invité, effectuer la sauvegarde des
données et de la configuration, puis relancer le système invité.
La reprise en cas d’incident est réduite au temps de réinjection des fichiers sauvegardés, sur le système
hôte ou sur un système hôte équivalent.
#!/bin/bash
if [ -z "$1" -o -z "$2" -o -z "$3" ]
then
echo "utilisation de la commande : $0 Repertoire_Source
Machine_Virtuelle Repertoire_Sauvegarde [Extension]"
else
Repertoire_Source=$1
Machine_Virtuelle=$2
Repertoire_Sauvegarde=$3
/bin/date "+%Y-%m-%d %H:%M:%S"
/usr/bin/virsh suspend $Machine_Virtuelle
/bin/date "+%Y-%m-%d %H:%M:%S"
/bin/echo "Domaine $Machine_Virtuelle en cours de synchronisation"
if [ -z "$4" ]
then
/usr/bin/virsh dumpxml $Machine_Virtuelle >
$Repertoire_Sauvegarde/$Machine_Virtuelle.xml
/bin/cp -p $Repertoire_Source/$Machine_Virtuelle.qcow2
$Repertoire_Sauvegarde
else
Extension=$4
/usr/bin/virsh dumpxml $Machine_Virtuelle >
$Repertoire_Sauvegarde/$Machine_Virtuelle.xml.$Extension
/bin/cp -p $Repertoire_Source/$Machine_Virtuelle.qcow2
$Repertoire_Sauvegarde/$Machine_Virtuelle.qcow2.$Extension
f
/bin/date "+%Y-%m-%d %H:%M:%S"
/usr/bin/virsh resume $Machine_Virtuelle
f
2.7
La mise en œuvre du Copy on Write
Le format d’image QCOW2 (QEMU Copy On Write) permet une utilisation avancée du stockage. Il
supporte nativement la compression des images disques.
Il supporte également le mode copie sur écriture des images qui permet de créer une nouvelle image à
JRES 2015 – Montpellier
4/7
partir d’une image de référence qui restera inchangée. Seules les modifications effectuées seront copiées
dans la nouvelle instance.
L’utilisation du Copy On Write vient ainsi renforcer notre PRA, en réduisant fortement le volume des
données à sauvegarder, il permet de raccourcir à nouveau les temps de reprise.
3 La gestion des salles de cours de la faculté de Médecine
Dans le cadre d'une gestion plus efficace des salles d'enseignement de la Faculté de médecine Paris
Descartes, représentant près de 150 postes, nous avons mis en œuvre un système de distribution des
images QEMU en mode diskless.
Pour ce faire, nous nous sommes appuyés sur des technologies à la fois simples et robustes.
3.1
Le client d'accès
Le client d'accès aux VM est centralisé et distribué grâce au couple PXE/NFSROOT.
Un aiguillage basé sur l'adresse IP reçue par les stations physiques permet de cloisonner le menu de boot
de chaque salle.
Le noyau distribué est le plus exhaustif possible au niveau des pilotes, afin de supporter un maximum de
types de machines physiques « out of the box ».
La racine distribuée, sur une base Debian, est remontée en aufs (advanced multi layered unification
filesystem) en mémoire au démarrage.
Chaque station physique ainsi distinguée peut donc démarrer et lancer l'interface d'accès aux VM.
Développée en Python et Clutter -une librairie graphique OpenGL- l'interface, épurée et simple, propose
également un navigateur Firefox directement exécuté en local, ce qui nous épargne quelques connexions
lourdes au serveur KVM et permet aux utilisateurs de disposer si besoin d'un client web natif.
Le client intégré de virtualisation, lui aussi développé en Python, utilise SPICE. Il est directement
connecté au serveur de virtualisation grâce à Libvirt. Il peut ainsi arrêter, mettre en pause, et démarrer les
VM à distance.
Ceci est totalement transparent et se fait directement lors de l'accès à la VM. Celle-ci est alors affichée en
plein écran et permet une connexion directe aux ports USB et son de la machine physique, via la
redirection des canaux SPICE.
3.2
La gestion serveur
Le serveur contient et exécute toutes les VM.
Il est connecté par un lien 10Gb à chaque commutateur de salle. Chaque station physique est connectée
sur un port 1Gb des commutateurs.
Les images des VM sont créées par salle, puis chaque soir, les images individuelles des postes sont
détruites et recréées à partir des masters en Copy on Write.
3.3
Le futur
Le serveur sera bientôt géré par une interface web simplifiée à destination des techniciens. Celle-ci
permettra de gérer les VM en live, et surtout de pouvoir mettre à jour facilement les masters.
Actuellement, on utilise une connexion VNC, ou directement un client SPICE.
4 Tirer partie de la solution pour aller plus loin
4.1
La gestion native des fichiers distribués avec Ceph
« If you think or discuss about Ceph, the most common question strike to your mind is "What Hardware
Should I Select For My Ceph Storage Cluster ?" and yes if you really thought of this question in your
JRES 2015 – Montpellier
5/7
mind, congratulations you seems to be serious about Ceph technology and You should be because CEPH
IS THE FUTURE OF STORAGE.
The sole of Ceph Storage Cluster is RADOS (Reliable Autonomic Distributed Object Store). Ceph uses
powerful CRUSH (Controlled Replication Under Scalable Hashing) algorithm for optimize data
placement, self managing and self healing. The RESTful interface is provided by Ceph Object Gateway
(RGW) aks Rados GateWay and virtual disks are provisioned by Ceph Block Device (RBD). »
Karanbir SINGH, CentOS Project Leader, Thurday, January 2, 2014.
L’utilisation de Ceph permet de mettre en œuvre une plateforme de stockage distribué sans point de
défaillance, ce qui permet au couple KVM/Ceph d'être largement utilisé dans les Clouds de type
OpenStack.
4.2
La mise en place d'un PCA (Plan de Continuité d'Activité)
Le format RBD (Rados Block Device) utilisé par Ceph a été porté dans QEMU/KVM pour la création des
VM. Contrairement à GlusterFS, il supporte en plus le mode Copy on Write.
Ainsi, en mettant en œuvre un serveur Ceph, nous pouvons migrer nos VM au format RDB pour mettre
en œuvre un PCA, sans perte de fonctionnalités.
4.3
En guise de conclusion
Les technologies que nous vous avons évoquées présentent bien quelques imperfections, cependant des
mises à jour régulières viennent non seulement corriger les défauts constatés mais surtout enrichir les
fonctionnalités déjà offertes.
Ainsi, nous disposons d'une solution pérenne, simple et robuste, le tout pour un faible coût de possession.
Annexe
Des mises à jour récentes d'outils de virtualisation pour CentOS 7 sont disponibles ici :
https://copr.fedoraproject.org/coprs/jmliger/virt7-upstream/.
Bibiographie
[1] Jean-Marc Liger. Virtualisation avancée de stations de travail Windows en environnement libre avec
Linux
KVM.
Dans Actes
du
congrès
RMLL2015,
Beauvais
Juillet
2015.
https://2015.rmll.info/IMG/pdf/virtualisation_avancee_de_stations_de_travail_windows_en_environ
nement_libre_avec_linux_kvm-v2.pdf
[2] Francis Hulin-Hubard. QEMU/KVM : Utilisation du mode Copy-On-Write, Juin 2015
http://www.admin-linux.fr/?p=8785
[3] Yann Dupont. Stockage distribué : retour d'expérience avec CEPH. Dans Actes du congrès
JRES2013, Montpellier, Décembre 2013. https://2013.jres.org/archives/48/paper48_article.pdf
[4] Martin Loschwitz. Migrating virtual machines from block-based storage to RADOS/CEPH. Octobre
2012. https://www.hastexo.com/resources/hints-and-kinks/migrating-virtual-machines-block-basedstorage-radosceph
[5] Jacquelin Charbonnel. KVM Retours d'expériences. Dans Actes du congrès JOSY2011
Virtualisation, Strasbourg, Juin 2011. http://perso.math.univ-angers.fr/IMG/pdf/kvm-josy.pdf
[6] Franck Villaume. Virtualisation as Information System Consolidation Tool. Dans Actes du congrès
RMLL2009, Nantes Juillet 2009. http://2009.rmll.info/IMG/pdf/RMLL-Virtualization-as-IS-Tool20090707-v1.0.pdf
[7] Jacques Landru, Tovoherizo Rakotonavalona, Martine Sion. A S T E R O I D E : Architecture
Système des stations de travail de Telecom lille 1 pour l'Enseignement Réseau, l'Observation,
l'Innovation, le Développement et l'Expérimentation. Dans Actes du congrès JRES2011, Toulouse,
JRES 2015 – Montpellier
6/7
Novembre 2011. https://2011.jres.org/archives/44/paper44_article.pdf
[8] Humberto Duarte. Virtualisation du poste de travail : Le cas de l'université Rennes 2. Dans Actes du
congrès JRES2009, Nantes Décembre 2009. https://2009.jres.org/planning_files/article/pdf/11.pdf
[9] Frédérick Bigrat, jean-Marc Liger, Pierre Cros, Thomas Noël, Mikaël Ates. Le projet Univnautes :
implémentation d’un portail captif Eduspot au sein de l'Université Numérique Paris Ile-de-France.
Dans
Actes
du
congrès
JRES2011,
Toulouse,
Novembre
2011.
https://2011.jres.org/archives/106/paper106_article.pdf
[10]Jean-Marc Liger, Théodore Aslamatzidis. Multimédia et Didactique, Internet au service d'une
activité émergente : le Sambo. Dans Actes du congrès JORRESCAM2000, 119, Amiens Avril 2000.
JRES 2015 – Montpellier
7/7

Documents pareils