Imaginez la situation suivante : vous faites partie d’une petite entreprise de développement informatique, composée d’environ 20 salariés. Chaque employé possède un ordinateur Linux, Mac ou Windows selon ses besoins, auxquels s’ajoutent quelques smartphones sous Android.
Vous souhaitez déployer une application de stockage de données sur tout votre parc informatique. Plusieurs applications répondent aux besoins de l’entreprise, mais avant d’en choisir une, vous souhaitez tester si elles sont bien complètement fonctionnelles sur Windows, Linux, Mac et Android.
La solution la plus fiable pour tester cela serait de le faire directement sur des machines de l’entreprise, mais elles sont toutes utilisées, et il n’est pas question de monopoliser les machines de vos collègues pour réaliser vos tests.
Heureusement, des solutions existent pour vous simplifier la vie et vous permettre de faire tous vos tests sur votre propre ordinateur, grâce à la virtualisation.
On peut déjà lister les cas suivants :
Tester un OS sans l'installer sur votre machine physique ;
S’assurer de la compatibilité d’une application avec différents OS ;
Utiliser une application dans un environnement particulier ;
Utiliser les fonctionnalités spécifiques d’un OS ;
Simuler une 2e machine et faire des tests de communication simples ;
Créer un petit réseau de plusieurs machines ;
Simuler des environnements multi-OS ;
Mutualiser des serveurs physiques et faire des économies ;
Partager un serveur physique en plusieurs serveurs virtuels ;
Rendre une architecture hautement disponible (HA) en améliorant sensiblement sa tolérance aux pannes ;
Migrer des serveurs virtuels sur de nouveaux serveurs physiques ;
Déployer un serveur virtuel à la volée ;
Faciliter les opérations de maintenance.
Vous voyez déjà qu’avec cette liste non exhaustive, la virtualisation a des intérêts multiples, et qu’il serait dommage de s’en passer. Regardons ensemble ce qui caractérise une machine virtuelle.
Comprenez ce qu’est une machine virtuelle
Ce qu’on appelle machine virtuelle ou VM (Virtual Machine), est une machine qui n’est pas physique ; autrement dit, qui n’est pas constituée de ressources physiques. Pour fonctionner, une machine a effectivement besoin de 4 types de ressources principaux :
Le CPU ;
La mémoire (RAM) ;
Le stockage (disque dur) ;
Le réseau (optionnel).
Comment une machine virtuelle peut-elle donc fonctionner sans ressources physiques ?
C’est simple, elle utilise les ressources d’une machine physique sur laquelle elle est installée : la machine hôte. Le principe de la virtualisation repose effectivement sur le partage de ressources. La machine hôte n’a pas forcément besoin de 100 % de chaque type de ressource pour fonctionner, elle peut donc en “prêter” ou en allouer une partie à une ou plusieurs VM.
Pour faire simple, une VM est un ordinateur dans un ordinateur (bienvenue dans la matrice).
Découvrez la fonction de l’hyperviseur
Vous avez donc une machine dans une machine. Mais comment se répartissent-elles les ressources ? Nativement, les machines (Windows, Linux ou autre) ne sont pas capables de partager les ressources physiques qu’elles utilisent. C’est là qu’intervient l’hyperviseur.
Derrière ce mot un peu barbare se cache simplement une catégorie d’applications capables de partager les ressources de la machine sur laquelle elles sont installées.
L’hyperviseur a 2 rôles majeurs :
créer des ressources virtuelles propres à chaque VM ;
répartir ses propres ressources.
Créer des ressources virtuelles propres à chaque VM
Dans un premier temps, il crée pour chaque VM des ressources virtuelles.
En effet, les VM ne vont pas aller se servir directement dans les ressources de la machine hôte, tout simplement car elles n’ont pas conscience d’être des VM hébergées sur un hôte. Elles vont donc aller piocher dans leurs ressources virtuelles. Et comme n’importe quelle machine physique, une VM aura donc son propre disque dur, sa mémoire, son processeur et ses périphériques, à la différence près que tout cela sera virtuel.
Répartir ses propres ressources
Dans un second temps, l’hyperviseur donne aux VM le droit d’utiliser ses propres ressources physiques. Il joue alors le rôle de chef d’orchestre pour allouer à chaque VM les ressources dont elles ont besoin, au bon moment et dans les bonnes quantités (mais dans une certaine limite qui aura été fixée).
On peut assimiler cela à un organisme vivant, comme un arbre, qui dispose de ressources (eau, nutriments) puisées dans le sol, et va les dispatcher vers ses branches, en fonction de leurs besoins respectifs.
Différencier la virtualisation de l’émulation
Les plus “gamers” d’entre vous ont peut-être déjà joué sur leur PC à de vieux jeux vidéo comme le tout premier Zelda sorti sur la console NES en 1986.
Avant que ce jeu ne ressorte en version PC, le seul moyen de pouvoir y jouer sur votre ordinateur était d’utiliser un émulateur NES, c’est-à-dire un logiciel qui en quelque sorte imitait le comportement de la console NES.
L’émulation et l’émulateur peuvent être vus comme les ancêtres de la virtualisation et de l’hyperviseur (pas le “virtualisateur” ;)). Cependant il ne s’agit pas exactement de la même chose, voilà donc quelques précisions pour ne pas les confondre :
L’émulation permet de faire fonctionner un système (une NES par exemple) sur un autre type de système (un PC avec processeur x86). Pour cela le système invité (la NES) est recréé par l’émulateur installé sur le système hôte (le PC). Une traduction des instructions est alors nécessaire entre les 2 systèmes qui ne “parlent pas la même langue”. L’émulation est de ce fait assez peu performante.
La virtualisation permet de faire fonctionner sur un système hôte (un PC x86), un invité ayant un système similaire (un PC x86). À ce moment-là, pas besoin de traduire les instructions puisque les 2 systèmes (hôte et invité) parlent la même langue. La virtualisation est donc plus performante que l’émulation.
Parfois les applications disponibles sur le marché pour faire de la virtualisation, sont aussi capables de faire de l’émulation. Un outil désigné comme hyperviseur se révélera en fait être un hyperviseur/émulateur. Il en va de même pour le terme “machine virtuelle” qui peut désigner aussi bien une machine virtualisée qu’une machine émulée. Ne prenez donc pas au pied de la lettre la dénomination utilisée.
Mais alors virtualisation c’est un peu comme la conteneurisation non ?
Pas vraiment mais c’est une excellente question ! Si vous avez suivi l’indispensable cours sur Docker, vous savez qu’il existe une 3ème technologie similaire à l‘émulation et à la virtualisation, il s’agit de la conteneurisation.
Mais alors la conteneurisation kezako ?
On pourrait penser que des outils comme Docker ou LXC, qui permettent de faire des conteneurs, sont en fait des hyperviseurs mais ce n’est pas le cas.
Un conteneur permet de créer sur une machine, un environnement logiciel complètement distinct de l’environnement par défaut de la machine hôte. C’est un peu comme une nouvelle session utilisateur, mais poussée à l’extrême. Dans un conteneur, tous les logiciels, librairies, configurations système et réseau sont propres au conteneur et indépendant de l’hôte. En revanche, le noyau du système d’exploitation est commun aux 2. Il n’est donc pas possible d’avoir une machine hôte sous Debian avec un conteneur sous Windows. En revanche un hôte sous Debian avec un conteneur sous Red Hat est possible car les 2 OS fonctionnent grâce à un noyau Linux.
Les schémas ci-dessous comparent ces 3 technologies de manière assez claire :
Voici aussi un tableau comparatif pour savoir dans quel cas on utilise l’une ou l’autre de ces 3 technologies :
| EMULATION | VIRTUALISATION | CONTAINERISATION |
Isolation de l’hôte | Bonne | Bonne | Faible |
Performances | Faible | Bonne | Excellente |
Exemple de cas d’usage | Test de logiciels sur divers OS | Services réseau (DHCP, Web…) | Développement applicatif |
Exemple d’outils | QEMU | KVM, VirtualBox, VMWare Fusion | OpenVZ, Docker, LXC |
Tableau comparatif entre l'émulation, la virtualisation et la conteneurisation.
Pour plus d’informations sur le fonctionnement des conteneurs n’hésitez pas à lire le cours consacré à Docker.
Par simplification de langage, la virtualisation, l’émulation et la conteneurisation sont très souvent regroupées sous le terme unique de “virtualisation”. Vous connaissez maintenant la différence entre les 3.
Distinguez les hyperviseurs selon vos besoins
Maintenant que vous connaissez le concept général de la virtualisation, nous allons pouvoir entrer dans le détail et parler des types d’hyperviseurs.
En effet, Il existe 2 grandes catégories d'hyperviseurs qui s’utilisent dans des cas très différents :
Les hyperviseurs de type 2 qui sont adaptés dans le cas où vous avez besoin de quelques machines et que vous voulez faire des tests multiplateformes (d’application, d’OS, de communication…)
Les hyperviseurs de type 1 qui sont particulièrement utiles pour créer de grosses architectures réseaux d’entreprise, qui nécessitent des optimisations de coûts et de maintenance, tout en améliorant la robustesse face aux pannes.
Ces 2 types d’hyperviseurs ne sont absolument pas interchangeables.
Prenons une analogie : le vélo est un moyen de transport particulièrement adapté pour relier Strasbourg et sa banlieue. Par contre, si vous souhaitez aller jusqu’à Montréal vous allez devoir prendre l’avion. De la même manière, que le vélo et l’avion s’utilisent dans des cas bien spécifiques, les hyperviseurs de type 1 et de type 2 ont eux aussi leur cas d’usage bien à eux.
En résumé
La virtualisation permet de créer des machines virtuelles (VM) qui utilisent les ressources d'un ordinateur existant, idéal pour tester des applications sans déranger les collègues.
Une machine virtuelle utilise des ressources virtuelles (CPU, mémoire, stockage) fournies par un hyperviseur, qui gère et partage ces ressources efficacement.
La virtualisation est plus performante que l’émulation, car elle ne nécessite pas de traduire les instructions entre systèmes différents.
La conteneurisation partage le même noyau que l’hôte pour créer des environnements logiciels isolés, tandis que la virtualisation crée des machines complètement indépendantes.
Les hyperviseurs de type 1 sont utilisés pour de grandes infrastructures (comme un avion pour un long voyage), tandis que les hyperviseurs de type 2 conviennent mieux aux petites infrastructures et aux tests multi-plateformes (comme un vélo pour des trajets courts).
Voyons maintenant les différences des hyperviseurs d’un point de vue technique.