B3: Virtualisation
Historique
Contrairement à ce que l'on pourrait croire, la virtualisation n'est pas une technologie récente.
En effet, dès les années 1960, et notamment à cause du coût des mainframes de l'époque, on a cherché à diviser les ressources (RAM, CPU, etc) disponibles et compartimenter des instances de systèmes d'exploitation, par exemple, pour utiliser une même mainframe pour plusieurs clients, chaque client disposant de sa propre instance isolée de celles des autres clients. Pour le client, il lui semble juste utiliser quelque chose d'indistinguable d'une machine physique.
La virtualisation consiste donc à diviser les ressources d'une machine physique en une série de machines dites virtuelles, isolées les unes des autres (et donc, en théorie, ne pouvant pas accéder à l'environnement d'exécution ou aux ressources (RAM, disques) d'une autre machine virtuelle, ou de l'hôte (le logiciel utilisé est un hyperviseur).
La virtualisation nécessite en général des instructions dédiées au niveau du CPU (hardware-assisted) afin d'obtenir les meilleures performances possibles. Ainsi, de nos jours, une machine virtuelle (VM) avec 1 CPU assigné est quasiment identique en performances à une machine physique équivalente avec 1 CPU, la différence étant de l'ordre de 1 à 3 % suivant les technologies utilisées.
On utilise souvent les termes hôte et invité pour désigner respectivement l'hyperviseur et les machines virtuelles.
Les buts principaux de la virtualisation sont d'améliorer le dimensionnement des infrastructures (leur "scalability" en langue de Shakespeare) et d'optimiser les ressources matérielles utilisées: on veut éviter que nos machines "tournent à vide" en ne faisant rien et en consommant de l'électricité, on préfèrera qu'elles soient utilisées à 75 ou 80% de leurs capacités.
IBM CP-40 puis CP/CMS, 1967
Dans les années 1960, les équipes de recherche et développement d'IBM ont développé le système d'exploitation CP-40, qui devint CP/CMS en 1967, et qui, étonnamment pour IBM à l'époque, était open-source. Il permettait de fournir à chaque utilisateur une machine simulée (et non complètement virtualisée) exécutant l'OS phare d'IBM à l'époque, S/360.
En 1972, cette technologie fut renommée VM par IBM, et est toujours utilisée de nos jours notamment dans leurs mainframes Z-Series.
En 1972, la virtualisation matériellement assistée fait son apparition avec S/370 et VM/370.
À la fin des années 1970, la virtualisation est éclipsée du fait de la demande en performances graphiques des utilisateurs (CAO/DAO/CAD, etc) et de l'arrivée des micro-ordinateurs: la demande en calcul distribué chute alors, de plus en plus d'utilisateurs se voyant fourni un micro-ordinateur personnel.
Popek et Goldberg: Principes de la virtualisation
en 1974, Gerald J. Popek et Robert P. Goldberg formalisent les prérequis de tout système de virtualisation moderne et donc de tout hyperviseur (aussi appelé VMM: Virtual Machine Monitor) en trois points précis:
- L'équivalence et la fidélité: Une VM doit se comporter de façon identique à une machine physique équivalente.
- Le contrôle des ressources et de la sécurité: l'hyperviseur doit pouvoir contrôler complètement les ressources virtualisées (donc, les VMs). Il doit donc pouvoir stopper une VM rencontrant une erreur, et une VM ne doit pas pouvoir contrôler l'hyperviseur ou accéder à des ressources physiques ou logicielles ne lui étant pas assignées par l'hyperviseur.
- Efficacité et Performance: la plus grande partie des instructions exécutées par une VM doit l'être sans intervention de l'hyperviseur (on ne veut pas faire de l'émulation!). Dans certains cas, certains sous-systèmes de la VM (exemple: une carte réseau ou un contrôleur de disques) peuvent être émulés.
Dans les années 70, les machines DEC PDP-10, IBM System/370 sont des exemples de machines dont les CPUs répondent aux conditions énoncées par Popek et Goldberg. Ce ne sera pas le cas de l'architecture x86 avant 2005, avec l'introduction des jeux d'instructions Intel VT-X et AMD-V. La même année, SPARC (utilisé par les machines Sun Microsystems) implémente les principes de Popek et Goldberg dans l'architecture UltraSPARC.
À l'inverse, les processeurs PowerPC (PPC) de Motorola et POWER d'IBM par la suite, disposaient dès leur apparition des jeux d'instructions nécessaires.
Types de virtualisation matérielle
On peut distinguer 3 grands types de virtualisation matérielle:
- Virtualisation complète: le système d'exploitation invité peut s'exécuter sans modification particulière (hors pilotes spécifiques).
- Paravirtualisation: les invités s'exécutent dans des domaines isolés, mais on ne simule pas un environnement matériel (cartes réseau, etc), et le système invité doit être modifié pour pouvoir accéder aux ressources de l'hôte (par exemple: carte réseau) en communiquant avec l'hyperviseur. Comme on ne simule plus certains équipements, les performances sont meilleures, mais on a besoin de pilotes spécifiques au niveau de l'OS invité pour qu'il puisse dialoguer avec l'hyperviseur.
- Virtualisation Hybride: presque complète, mais on va utiliser la paravirtualisation pour augmenter les performances des VMs invitées.
Containerisation
À la différence de la virtualisation classique, la containerisation exécute une instance d'un système d'exploitation en utilisant directement le noyau de l'hôte, qui fournit des mécanismes d'isolation pour isoler chaque container des autres containers et de l'hôte.
On retrouve une partie des avantages de la virtualisation, notamment la "scalabilité" et la standardisation des environnements invités, mais en utilisant moins de ressources que la virtualisation matérielle, chaque container utilisant, au final, le même kernel: celui de l'hôte.
Cependant, on perd en isolation et donc, en sécurité: un container malveillant pourrait utiliser une faille du noyau de l'hôte pour accéder aux ressources d'autres containers ou de l'hyperviseur.
Les années 90
La virtualisation revient sur le devant de la scène en 1998 avec deux évènements majeurs:
- La présentation de Simics/sun4m à la conférence USENIX 98, montrant une instance de Linux et une instance de Solaris s'exécutant dans des VMs directement à partir de la copie (dd) non modifiée de disques systèmes
- VMware brevette sa technologie de virtualisation, lancée l'année suivante, encore assez "rustique" et nommée à l'époque VMware Virtual Platform, pour l'architecture IA-32 d'Intel
Les années 2000: le besoin de densité et de matériel abordable
Dans les années 2000 et notamment du fait de la popularisation d'Internet dans le grand public, il devient nécessaire d'optimiser l'utilisation des serveurs afin d'utiliser au maximum leurs capacités et ainsi d'augmenter la densité de calcul par baie. Les choses s'accélèrent à nouveau pour la virtualisation:
- en 2000: FreeBSD introduit les jails, ancêtres des conteneurs, et IBM annonce z/VM pour leur nouvelle architecture z-Series
- 2001: VMware crée le premier logiciel de virtualisation dédié aux serveurs
- 2003: Xen est le premier hyperviseur open-source pour CPUs x86, le développement de QEMU débute cette même année, VMware est racheté par EMC, pour 635 millions de dollars.
- 2005: Intel VT-x et AMD-V apparaissent. VMware lance VMware Player, Solaris 10 introduit les Zones, et libvirt pour Linux apparaît cette même année. HP lance Integrity Virtual Machines pour l'UNIX d'HP, HP-UX.
- 2006: VMware lance VMware Server, HP sort la seconde version d'Integrity Virtual Machines
- 2007: KVM, Kernel Virtual Machine, un module de virtualisation pour le noyau Linux est lancé. VirtualBox est lancé par InnoTek, sous license GNU GPL. Microsoft lance Hyper-V cette même année. Ganeti, un système de gestion de clusters de virtualisation, sort cette année, et permet d'utiliser Xen, KVM ou LXC (ultérieurement) pour exécuter des machines virtuelles dans un cluster d'hyperviseurs.
- 2008: arrivée des cgroups dans le noyau Linux et de LXC, ouvrant la porte aux containers que nous connaissons, Sun Microsystem rachète InnoTek (et donc VirtualBox), ProxmoxVE (basé sur KVM) sort cette même année, et VMware lance VMware workstation
2010: les Hyperscalers et généralisation de la virtualisation
- 2010: Sortie d'OpenStack, développé initialement par Rackspace Hosting et la NASA et maintenu par l'Openstack Foundation.
- 2011: QEMU est enfin considéré stable. Sortie d'OpenShift (développé par Red Hat), propriétaire.
- 2013: Docker est lancé
- 2014: Kubernetes apparaît
- 2015: Sortie de Nutanix HCI (basé sur Linux KVM)
- 2018: Sortie de XCP-NG, basé sur Xen, développé par Vates SAS et la Linux Foundation
- 2020: sortie de SUSE Harvester HCI, basé sur Kubernetes et Kubevirt (extension de virtualisation de Kubernetes permettant de traiter des machines virtuelles comme des "Pods" Kubernetes).
Concepts et implémentations
(source: Wikipedia)
Hyperviseurs de type 1
Définition
Un hyperviseur de type 1 s'exécute directement sur le matériel hôte et contrôle le matériel et gère les systèmes d'exploitation invités. Il s'agit en général d'un noyau très léger qui fait office de VMM, et une VM spéciale sera créée pour dialoguer avec ce noyau et permettre à un administrateur de contrôler les autres VMs invitées.
Quelques exemples d'hyperviseurs de type 1:
- Xen
- Hyper-V
- Broadcom VMWare ESXi
- KVM (c'est un module du noyau Linux qui convertit directement le kernel en hyperviseur de type 1)
Hyperviseurs de type 2
Définition
Un hyperviseur de type 2 s'exécute sur un système d'exploitation classique (Linux, Windows, etc) et le VMM s'exécute donc comme un processus de ce système d'exploitation. On peut citer:
- VMware Workstation
- VirtualBox
- OpenBSD VMM
- 9Front VMX
- Virt-Manager pour Linux
Solutions de virtualisation
Libres/open-source
- Proxmox VE

- Xen Orchestra/XCP NG

- Kubevirt, SUSE Harvester HCI
- HCI pour HyperConverged Infrastructure. Le stockage est ici pris en charge par l'hyperviseur et est local à chaque machine du cluster (avec de la réplication entre les noeuds du cluster), et non par un SAN ou NAS.

- HCI pour HyperConverged Infrastructure. Le stockage est ici pris en charge par l'hyperviseur et est local à chaque machine du cluster (avec de la réplication entre les noeuds du cluster), et non par un SAN ou NAS.
- OpenNebula
- Ganeti (Xen et KVM)
- OpenStack
- Incus
Propriétaires
- VMWare

- Nutanix HCI

- Microsoft Hyper-V
- OpenShift

Labo!!
Eh bien maintenant, on va se monter un cluster Proxmox! Direction le labo! \o/