• 6 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 31/10/2024

Découvrez la virtualisation, une réponse à des problèmes de terrain

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.

Schéma représentant deux VM connectées à un serveur central. Chaque VM contient des icônes de composants informatiques (processeur, RAM, stockage, et réseau). Des flèches colorées montrent le partage de ressources entre les VM et le serveur.
Deux VM connectées à un l'hyperviseur.

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.

Illustration d'un arbre avec a un tronc vert menant à un hexagone central (l'hyperviseur) d'où partent deux branches colorées, chacune connectée à une bulle représentant une machine virtuelle : VM1 en bleu et VM2 en rouge.
L'hyperviseur est comme un arbre qui dispose de ressources et va les dispatcher vers les VM, 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 :

Diagramme comparant l'émulation, la virtualisation et la conteneurisation. Chaque section montre une pile : applications, systèmes invités et logiciels (émulateur, hyperviseur, logiciel de conteneurisation). Toutes les piles reposent sur un OS hôte e
Les différences entre l'émulation, la virtualisation et la conteneurisation.

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.

Exemple de certificat de réussite
Exemple de certificat de réussite