Il est possible que vous ayiez déjà entendu parler du concept de "Virtualisation", ou bien simplement d'outil comme "VirtualBox", "VMWare" ou alors peut-être bien "Docker"... Ce sujet relativement récent dans son adoption globale n'en est pas moins complexe. Tentons tout d'abord de définir ce qu'est la virtualisation. Selon une définition officielle :
Il s'agit d'une "technique consistant à faire fonctionner plusieurs systèmes d'exploitation, en même temps, sur un même ordinateur" d'après le Larousse [1]
Nous lui préférons cependant une définition plus rigoureuse [2] : "la virtualisation consiste à exécuter sur une machine, appelée "machine hôte", un système d'exploitation ou une application dans un environnement isolé, appelée cette fois "machine invitée"".
Pour simplifier, la virtualisation nous permet de créer des ordinateurs sur un même ordinateur physique. Plus imagé, voici 2 analogies pour bien comprendre le sujet :
Imaginez un coffre-fort, dans lequel vous créez plusieurs compartiments distincts. Ces compartiments fonctionnent de manière indépendante comme s'il s'agissait finalement chacun eux-mêmes de coffre-forts...
Voyons cela sous un autre angle : prenons un hôtel qui possède uniquement une grande suite, par ex. de 300m². Cet hôtel ne peut donc héberger qu'une personne ou un petit groupe de personnes en même temps mais ceux-ci n'occupent pas du tout 100 % du temps 100 % de l'espace. Maintenant, découpons cet hôtel en plusieurs suites, par ex. 10 pièces de 30m² ; ici, nous pouvons aisément imaginer que l'espace sera mieux occupé et que l’hôtel peut héberger bien plus de monde maintenant...
Dans la première analogie, nous voyons bien la compartimentalisation, c'est-à-dire l'isolation des compartiments entre eux ; la seconde analogie nous permet de voir l'utilisation des ressources au maximum des capacités, de sorte à optimiser les coûts.
C'est comme cela que fonctionne la virtualisation.
A la place d'avoir plusieurs ordinateurs physiques, la virtualisation nous permet d'en créer plusieurs virtuels sur un seul ordinateur. Chacun de ces ordinateurs virtuels, que nous appelons donc 'machine virtuelle' (ou VM pour Virtual Machine), pourra utiliser son propre système d'exploitation (Linux, Windows, Android...) et/ou ses propres applications.
Mais alors pourquoi diable voudrions-nous faire cela ?
Bien, cela peut nous éviter d'avoir plusieurs machines physiques pour, vous allez voir, plusieurs raisons intéressantes :
Aujourd'hui, ce concept est utilisé partout, que ce soit pour des infrastructures d'entreprises ou d'administrations, dans de nombreux domaines comme le "Cloud Computing" (l'informatique en nuage), le Big Data, etc. La virtualisation a surtout transformé le monde des centres de données (datacenters) : à l'origine dans les années 2000s et avant, 1 machine servait (cf. terme Serveur) 1 application ! Depuis les années 2010 et l'explosion de la virtualistion, toutes les entreprises ayant recours à des centres de données ont pu réduire le nombre de machines et la taille des espaces alloués (gain de place, économie d'énergie, gain en productivité...). De même, leurs coûts ont sensiblement baissé et les perfomances grandement augmenté.
Ce concept arrive même à maturité chez les particuliers avec des applications de plus en plus accessibles et simples d'utilisation comme VirtualBox ou Docker. Il est même possible chez soi d'avoir un environnement complet virtualisé, cf. Proxmox VE, mais ceci n'intéressera que les plus expérimentés d'entre nous et ayant besoin de se fabriquer un Homelab
.
Vous avez pu remarquer plus haut que lorsque nous avons défini la virtualisation, nous avons mis en avant une partie importante de la définition : "un système d'exploitation ou une application". En effet, plusieurs façons existent pour obtenir des environnements virtualisés.
Nous discuterons ici de 2 principaux types d'environnement :
Nous l'avons vu en introduction, nous sommes capable de virtualiser un système entier (OS, Operating System), via des machines virtuelles. L'idée est ici de reproduire "logiciellement" le comportement d'un ordinateur physique.
Un ordinateur est principalement composé de quatre parties essentielles. Pour vulgariser :
Afin de virtualiser un ordinateur, il est donc nécessaire de simuler chacune de ces parties, pour certaines pouvant être configurables (ex. : nombre de cœurs d'un CPU, taille de la mémoire...). L'ensemble de ces parties doit fonctionner de concert avec l'ordinateur sur lequel est lancé l'environnement ; en effet, on ne peut pas par exemple définir 32 cœurs CPU si notre propre CPU ne comporte que 10 cœurs ! Nous appelons cette partie "simulation" un hyperviseur, fonction qui nous permet par dessus de créer concrètement l'environnement fonctionnel virtuel.
Cet hyperviseur est la partie essentielle des environnements virtualisés, qui nous permet de créer ces fameuses "Machines Virtuelles" (ou VM pour Virtual Machine), mais aussi de gérer finement les ressources allouées à celles-ci.
Oui, car nous pouvons bien entendu créer plusieurs VM ! C'est tout l'intérêt de la virtualisation...
D'où la terminologie d'orchestration que vous pourriez être amené à voir sur certaines documentations
Les principaux acteurs sur le marché de la virtualisation sont les suivants :
Nous avons rédigé deux tutoriels sur les 2 outils open source :
~~ Un tutoriel vous montrant comment utiliser VirtualBox
~~ Un tutoriel vous montrant comment utiliser GNOME Boxes
N'hésitez pas à essayer chez vous !
La conteneurisation est, depuis quelques années, une technologie en plein essor dans le domaine de la virtualisation, qui nous permet d'exécuter des "applications" de manière isolée et portable. Il s'agit d'une approche simple de la virtualisation, mais qui possède tout de même des différences majeures...
Qu'est-ce que la conteneurisation exactement ?
La conteneurisation est donc une méthode de virtualisation légère qui permet de créer un contenant isolé du système hôte afin d'y installer une application et toutes ses dépendances. Ce contenant, appelé conteneur, est en fait lui-même un logiciel autonome, qui contient tout ce dont une application a besoin pour s'exécuter correctement, y compris les bibliothèques, les fichiers de configuration et les dépendances système. Mais la conteneurisation diffère de la virtualisation traditionnelle en ce sens qu'elle partage le même système d'exploitation que le système hôte (pour rappel : dans un environnement de virtualisation classique, chaque VM exécute son propre système d'exploitation) ce qui permet également un partage de toutes les ressources de la machine hôte (clavier, souris, écran, etc.).
Bien entendu, cette conteneurisation a beaucoup d'avantages mais aussi des inconvénients.
Quand celle-ci permet... :
...Ce principe comporte néanmoins quelques inconvénients :
Les principaux acteurs sur le marché de la conteneurisation sont les suivants :
Intéressons nous, cela dit, aux applications libres et open source : il en existe plusieurs. En voici les principaux :
Nous avons donc pu le voir, deux technologies existent afin de simuler, virtualiser, un environnement à l'intérieur de notre système.
Deux approches différentes pour des besoins différents :
~~ Là où Docker/LXC pourra être utilisé pour simplifier le déploiement d'une application (une instance Nextcloud par exemple )...
~~ ...La machine virtuelle pourra être utile pour améliorer sa sécurité (cf. notre tutoriel dédié à Whonix).
Contributeur(s): Ayo
Définition Larousse de Virtualisation ↩︎
Définition Wikipédia de Virtualisation ↩︎