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