Les différents types de virtualisation : Classification

tech-presentation-2Après avoir vu l’intérêt de la virtualisation, je vais pouvoir vous présenter les différents types de virtualisation qui existent aujourd’hui sur le marché. Ces billets sur la virtualisation reprennent le contenu de l’AC (avec Romain Hinfray) et de la TX (avec Julie Facon). Je ferais des retours vers ces deux projets en synthétisant le contenu car ca fait trop long pour un blog.

Vous avez surement entendu parler de très nombreux types de virtualisation avec un panel de noms au moins aussi nombreux. Au début, on a tendance à rapidement s’y perdre. Je vais donc essayer dans cet article proposer une classification de la virtualisation qui est celle que nous avons proposé lors de l’AC.

On virtualise quoi ?

Tout d’abord, il est essentiel de se poser la question « Qu’est ce qu’on virtualise ? ». Il est possible de virtualiser beaucoup de choses de nos jours. Un début de liste comporterait des routeurs, des switchs, des applications, des systèmes d’exploitation, de l’espace disque et ainsi de suite. La virtualisation de routeurs et de switchs se fait notamment par les VRF dans les IOS Cisco ou bien des applications telles que Nexus de Cisco (switchs virtuels pour VMWare).

La virtualisation d’application est également un secteur important du marché même si il est peu connu car il n’existe pas, à ma connaissance, d’application libre sur ce secteur. Pour vous illustrer le principe, avec la virtualisation d’application vous pouvez vous connecter sur un portail, cliquer sur l’application de votre choix et elle s’exécute en quelques secondes sans être installé sur votre poste. Je ne sais pas comment ca fonctionne mais c’est assez impressionnant à voir. Un exemple d’implémentation de cette technologie est Citrix XenApp (pas grand chose à voir avec Xen a priori).

Ce dont je vais essentiellement parler, c’est la virtualisation de système d’exploitation. C’est le type de virtualisation généralement le plus connu. Le but de ce type de virtualisation est d’exécuter simultanément plusieurs systèmes d’exploitation sur une même machine physique. Les exemples d’implémentation ne manquent pas : Xen, VMWare, KVM, Hyper-V, …

On virtualise comment ?

Nous allons nous intéresser plus particulièrement à la virtualisation de systèmes d’exploitation. Je vous propose tout d’abord un arbre qui résume bien les différents types de virtualisation. Une fois de plus, il s’agit d’une proposition de classification, il en existe surement plein d’autres.

Classification

Comme on le voit dans le schéma, la première distinction qui est faite est la distinction entre virtualisation de systèmes d’exploitation et virtualisation de processus. Il y a une différence fondamentale entre exécuter un système d’exploitation complet et effectuer un cloisonnement de processus. Des exemples de virtualisation de processus sont OpenVZ, les jails BSD ou encore les zones Solaris.

Dans la virtualisation de systèmes, nous avons distingué à nouveau deux catégories : les systèmes modifiés et les systèmes non modifiées. Cette distinction est également essentielle car elle va régir tout le fonctionnement de la virtualisation. Dans le cas de systèmes modifiées, le système d’exploitation va avoir « conscience » d’être présent au dessus d’une couche de virtualisation et va travailler efficacement avec cette dernière. Dans le cas de systèmes non modifiés, la couche de virtualisation va faire tout son possible pour faire croire au système d’exploitation qu’il est présent sur du matériel physique.

Dans la catégorie des systèmes modifiés, on va retrouver la paravirtualisation. La paravirtualisation est le type de virtualisation inventé par le projet Xen. Ce type de virtualisation a été rendu possible grâce aux logiciels libres car il a été possible de modifier et d’adapter le noyau Linux ou BSD ou Solaris. Microsoft a mis en pratique cette méthode avec son produit Hyper-V intégré à Windows Server 2008.

Dans la catégorie des systèmes non modifiées, on va retrouver la virtualisation totale et la virtualisation matérielle assistée. Cette dernière n’est qu’une amélioration de la virtualisation totale grâce aux extensions processeurs AMD-V et Intel VT.  Ce type de virtualisation est le type de virtualisation le plus utilisé grâce à la simplicité de fonctionnement des applications et à la puissance des outils d’administration existants. On retrouve dans cette catégorie VMWare, VirtualBox et Virtual PC entre autres.

Pour conclure et mettre une nuance à cette classification, il est possible de mélanger les types de virtualisation, je m’explique. Il est possible, par exemple, dans un système d’exploitation fonctionnant en virtualisation matérielle assistée de rajouter des pilotes de paravirtualisation afin d’améliorer les performances ou d’ajouter une fonctionnalité.

L’intérêt de la virtualisation

tech-presentation-2Je vous ai déjà présenté le projet Xen dans un billet précédent en vous en ventant ses mérites mais je ne vous ai même pas présenté l’intérêt de la virtualisation. Je vais donc faire le tour des avantages que peut apporter la virtualisation à une plateforme informatique existante ou bien à un projet de plateforme informatique. Ces avantages se divisent en quatre catégories principales : coût, sécurité, criticité et performances.

Constat

Dans une architecture classique (sans virtualisation donc), chaque service dispose de sa propre machine physique. Cette règle informelle ou plutôt « Best Practice » permet d’éviter que la compromission d’un service impacte d’autres services sur la machine. En conséquence, une architecture de ce type implémente une machine par service proposé sans compter les « Hot Spare ». Les « Hot Spare » sont des machines qui attendent une panne de la machine principale pour de prendre le relai et assurer la continuité du service.

Au final, les machines sont peu utilisées surtout avec les configurations matérielles d’aujourd’hui comprenant processeurs Dual-Core ou Quad-Core.

Avantages en terme de coût

La virtualisation va permettre de mutualiser les équipements physiques afin de supporter plusieurs systèmes d’exploitation sur une même machine physique. Au lieu d’avoir une machine physique pour chaque service, nous allons donc avoir un système d’exploitation pour chaque service. Les deux situations ne sont pas totalement équivalentes mais on s’en approche.

Une société va donc pouvoir héberger dans un espace moindre, avec une climatisation moindre et avec une consommation électrique moindre un même nombre de services. La variable d’ajustement sera le taux d’utilisation des machines physiques. L’architecture sera donc utilisée de manière plus efficace. De manière plus concrète, au lieu d’avoir un parc de serveurs bas de gamme hébergeant chacun un service, une société va pouvoir acheter un nombre restreint de serveurs haut de gamme plus puissants. Ceci va lui permettre de louer moins d’espace en datacentre et d’utiliser proportionnellement moins d’électricité.

Il faut cependant noter qu’une architecture virtualisée rajoute une surcharge de maintenance dans la mesure où il a été rajouté une couche applicative entre les ressources physique et le système d’exploitation. Cette couche applicative aura besoin d’être maintenue ce qui générera des coûts supplémentaires par rapport à une architecture classique.

Avantages en terme de sécurité

Etant donné que la virtualisation exécute plusieurs systèmes d’exploitation sur une même machine, il est primordiale qu’elle assure un cloisonnement parfait. Une faille dans ce dernier constituerait une faille de sécurité considérable. La virtualisation s’efforce d’arriver à un cloisonnement proche du cloisonnement physique. Le cloisonnement dans le cadre de la virtualisation reste cependant largement meilleur que dans le cas de plusieurs services sur un même système d’exploitation.

La virtualisation donne également la possibilité de créer des environnements de tests standardisés afin d’effectuer des tests de pénétration ou bien d’infection. La possibilité de mettre en pause une machine virtuelle est intéressante afin de pouvoir étudier le comportement de code malicieux par exemple. Je ne connais pas d’implémentation de cette possibilité mais la perspective me semble prometteuse.

Avantages en terme de criticité

Nous avons qualifié la possibilité d’exécuter plusieurs systèmes d’exploitation sur une même machine physique en tant qu’avantage. Il s’agit certes d’un avantage en terme de coût mais surement pas d’un avantage en terme de criticité. Une panne matérielle induit l’indisponibilité d’un grand nombre de services. La virtualisation permet de palier à cette problématique en fournissant de nombreux outils.

Dans le cadre d’un système d’exploitation classique, il est simple de sauvegarder des applications, des données ou des fichiers de configuration. Cependant, la virtualisation va permettre de faire une sauvegarde de la totalité des données d’une machine. Dans le cas d’une restauration de sauvegarde, il sera possible de restaurer un système d’exploitation fonctionnel rapidement sans devoir tout réinstaller. Ceci est un gros avantage de la virtualisation.

La virtualisation permet également de migrer des systèmes d’exploitation d’une machine physique à une autre en moins d’une seconde. Ceci permet d’éviter une indisponibilité en cas de modification de la configuration matérielle d’un équipement.

Avantages en terme de performance

Dans le cadre d’une architecture classique, si une machine nécessite plus de mémoire vive par exemple, il est nécessaire de prévoir un temps d’indisponibilité et le déplacement d’un technicien sur site. La virtualisation va permettre d’augmenter les ressources physiques de manière instantanée et sans manipulation de matériel ni déplacement de personnel. Il suffit d’exécuter une commande afin de rajouter de la mémoire vive ou de l’espace disque. Traditionnellement, ces augmentations se faisaient dans la mesure des ressources physiques. Depuis quelques temps, il est possible d’attribuer plus de mémoire vive qu’il est disponible dans la machine. La mémoire vive non utilisée par une machine virtuelle sera ainsi attribuée à une autre.

Les livres pour comprendre Xen 2

Voici le second opus des livres permettrant de mieux comprendre Xen. Alors que le premier livre était un plutôt un guide d’installation et de configuration de Xen, ce livre a pour but d’être une présentation en profondeur de Xen permettant un compréhension approfondie de son fonctionnement.

The Definitive Guide to the Xen Hypervisor

DefinitiveGuideXenHyp

Ce livre a pour objectif d’être la bible des développeurs de Xen et de former les futurs développeurs. Cependant, ce livre peut être abordé à plusieurs niveaux : un niveau développeur et un niveau administration système. C’est le deuxième niveau que m’avait conduit à m’intéresser à ce livre.

Ce livre contentera les développeurs dans la mesure où il part d’un point de vue global pour aller jusqu’à une analyse très approfondie du fonctionnement de Xen avec des exemples de fonctions en C et l’explication de leur fonctionnement.  N’étant pas développeur et n’ayant que très peu de compétences en programmation, il m’est assez difficile de commenter ce niveau de compréhension.

Ce livre contentera également les administrateurs système. La totalité de son contenu n’est pas forcément accessible à ces derniers surtout s’ils n’ont pas fait beaucoup de programmation auparavant. Cependant, une grande partie l’est tout de même. Un effort de compréhension conséquent est nécessaire pour réussir à assimilier les connaissances correctement. Une fois cet effort de compréhension effectué, le niveau de connaissance du lecteur sera largement supérieur à une personne qui a lu le livre précédent. Ceci donnera à la personne les connaissances permettant de résoudre bon nombres de problématiques liés à Xen qui dépassent la simple erreur de configuration.

Ce livre est cependant complémentaire au précédent. La lecture de ce livre ne suffit pas pour obtenir la configuration d’un serveur Xen et des domaines associés. Pour bien connaitre Xen, la lecture de ces deux livres est donc fortement intéressante. Ce livre peut servir de « suite » permettant d’approfondir au premier livre qui permet de faire une première mise en place.

TX : Etude de la virtualisation : Réseau et Cloisonnement

Suite à l’AC que j’ai effectué au semestre d’Automne avec Romain Hinfray, j’ai voulu aller plus loin dans l’étude de la virtualisation. Ceci s’explique principalement par le fait que nous n’avions pas du tout utilisé Xen dans le cadre de l’AC. C’est donc sous la forme d’une TX (sorte de TPE) que j’ai continué l’étude de la virtualisation. Cette TX s’est faite avec Julie Facon.

Nous avons voulu prolonger l’AC en y injectant du pratique. Les deux points qui étaient restés le plus en suspens après l’AC étaient l’intégration de la virtualisation dans une infrastructure réseau conventionnelle et la gestion du cloisonnement des performances. Le powerpoint est disponible ci-dessous via slideshare.net et le rapport est téléchargeable ici.

Je vais tout de même vous résumer ici les deux études afin de, potentiellement, vous donner envie d’en lire plus. L’étude sur le réseau a tout d’abord inclus l’installation de l’outil Xen ainsi que de l’outil de gestion de machines virtuelles ConVirt. L’installation détaillée est une installation par le biais des paquets Debian mais ce que nous avons utilisé dans le cadre de notre TX est l’installation par les sources. Cette dernière est la seule qui permet d’utiliser une version de Xen à jour. Nous avons ensuite exploré les différents modes de réseau de Xen, à savoir, pont, routeur et NAT. Nous avons étendu l’étude vers l’utilisation des VLAN via le biais du protocole 802.1Q. La conclusion de cette étude est que le mode pont est de loin le mode le plus simple et que le mode NAT permet d’introduire des fonctionnalités tout à fait intéressantes. Le mode routeur n’est cependant pas fonctionnel et est d’une utilité fortement réduite. Ce qu’il faut noter également, c’est que le réseau sous Xen dépend totalement de la gestion du réseau sous Linux.

Ensuite, la seconde partie est donc la partie sur le cloisonnement de performances. L’objectif de cette partie était de montrer l’intérêt de la virtualisation par rapport à une plateforme classique. Nous avons donc simulé une montée en charge de différents services et mesurer l’impact sur les autres services. Nous avons utilisé l’outil Apache Bench pour implémenter une montée en charge modérée et l’Isolation Benchmark Suite pour implémenter une très forte montée en charge. Nous avons pu constaté l’agilité avec laquelle la virtualisation arrivé à gérer une montée en charge tout en assurant une qualité de service aux machines virtuelles qui ne demande que peu de ressources. Ceci n’est bien entendu absolument pas du tout le cas d’une plateforme non virtualisée. La virtualisation est une solution efficace pour assurer un cloisonnement en termes de performances.

C’est quoi Xen ?

Xen_logo

Je vais être amené à vous parler régulièrement de Xen dans ce blog car j’ai régulièrement été amené à travailler dessus. Avant de pouvoir vous parler en long en large et en travers de cet outil, je souhaitais faire un petit billet récapitulant ce qu’est Xen et ce que ce n’est pas.

Pour rester dans la définition, voici ce que Wikipedia France propose comme définition :

Xen est un logiciel libre de virtualisation, plus précisément un hyperviseur de machine virtuelle. Il est développé par l’université de Cambridge au Royaume-Uni. Xen permet de faire fonctionner plusieurs systèmes d’exploitation virtuels (invités) sur une seule machine hôte.

La version de Wikipedia Anglais est la suivante :

Xen is a virtual machine monitor for IA-32 (x86, x86-64), IA-64 and PowerPC 970 architectures. It allows several guest operating systems to be executed on the same computer hardware concurrently. Xen was initially created by the University of Cambridge Computer Laboratory and is now developed and maintained by the Xen community as free software, licensed under the GNU General Public License (GPL2).

Pour résumer les deux définitions, Xen est une solution de virtualisation. La virtualisation est la technique informatique qui permet d’exécuter plusieurs systèmes d’exploitation indépendants sur une même machine physique. Cependant, et vous le savez bien, il existe de nombreuses solutions de virtualisation dont on entend bien plus parler. Parmi ces dernières, nous pourrions citer le géant VMWare ou bien Hyper-V de Microsoft ou encore OpenVZ. Toutes ces solutions sont pourtant bien différentes entre elles et par rapport à Xen.

La spécificité de Xen et ce qui a créé son succès est lié à son fonctionnement. Le projet Xen a été le premier a implémenter la paravirtualisation. Mais, qu’est ce que la paravirtualisation ? La paravirtualisation consiste à interposer entre un système d’exploitation un hyperviseur qui sera l’interface primaire entre le matériel et le reste des couches applicatives. Cette hyperviseur aura donc un accès privilégié aux ressources physiques et pourra ensuite en déléguer une partie aux systèmes d’exploitation virtualisés.

Donc, si vous avez bien compris, vu que l’hyperviseur est l’interface entre les ressources physiques et les couches applicatives, il n’y a plus de notion de système d’exploitation invité et système d’exploitation hôte comme cela peut être le cas chez les autres. Tout est virtualisé ! De plus, les systèmes d’exploitation ont été modifiés pour prendre en compte la présence de l’hyperviseur. Un petit schéma récapitualtif (fait par Romain Hinfray, jedi des schémas sur PowerPoint) :

virtus

L’hyperviseur Xen a pour objectif d’être le plus minimaliste possible. Pas question de se connecter à l’hyperviseur via une console SSH ou via une console applicative. L’hyperviseur est un point très sensible en termes de sécurité. Si vous controlez l’hyperviseur, vous controlez tout ! Ouai mais c’est bien… mais comment je fais pour administrer mon plateforme de virtualisation ?! Et bien comme je l’ai dit précédemment, l’hyperviseur a pour rôle de distribuer une partie de ses accès au matériel vers les autres systèmes d’exploitation. Dans le cas de Xen, un domaine, nommé domaine 0, aura de nombreux privilèges permettant notamment de controler l’accès aux ressources physiques, l’exécution des autres systèmes d’exploitation et le réglage des paramètres de l’hyperviseur.

Quel avantage a donc la paravirtualisation ? La vitesse, beaucoup de vitesse ! Au lieu de devoir émuler X architectures matérielles, on va en émuler aucune car les systèmes d’exploitation auront été modifiés pour prendre en compte le fait qu’ils s’exécutent au dessus d’un hyperviseur. Pour vous donner un ordre d’idée, un système d’exploitation s’exécutant au dessus de Xen accuse un perte de l’ordre de 5% alors qu’un système d’exploitation s’éxecutant au dessus de VMWare accuse une perte de l’ordre de 20% jusqu’à 80% !