148 lines
3.1 KiB
Markdown
148 lines
3.1 KiB
Markdown
# Rappels & historique
|
|
|
|
## Rappels sur la virtualisation classique
|
|
|
|
### Prémices
|
|
|
|
#### Au départ
|
|
|
|
Exécuter simultanément plusieurs environnements distinct sur un
|
|
mainframe IBM.
|
|
|
|
#### IBM System/370
|
|
|
|
* Virtualisation grâce au système CP/CMS ;
|
|
* permis par la présence d'une MMU et par l'ajout d'un mode
|
|
*supervisor* au processeur.
|
|
|
|
### Vocabulaire
|
|
|
|
* Machine hôte/host machine
|
|
* Machine invité/guest machine
|
|
|
|
#### Virtualisation vs. émulation
|
|
|
|
* Émulation : simulation logiciel de matériel (potentiellement une architecture différente) : pas d'accès direct au matériel ;
|
|
* Virtualisation : accès direct, mais restrint, au matériel.
|
|
|
|
#### Technologies de virtualisation matérielle
|
|
|
|
* Intel VT-x/AMD-V/ARM Virtualization Extensions
|
|
* partitionne le processeur pour exécuter plusieurs système d'exploitation via le même processeur.
|
|
|
|
|
|
### Comment virtualiser ?
|
|
|
|
* Full virtualisation : hyperviseurs ;
|
|
* Paravirtualisation ;
|
|
* Isolateurs/conteneurs ;
|
|
* Conteneurs applicatifs.
|
|
|
|
### Hyperviseurs
|
|
|
|
![](hyperv.png)
|
|
|
|
### Hyperviseurs
|
|
|
|
Contrôlent l'utilisation faite des ressources de la machine hôte par les
|
|
machines virtuelles.
|
|
|
|
#### Type 1
|
|
|
|
* L'hyperviseur contrôle directement le matériel ;
|
|
* Tous les systèmes lancés par la suite passent par l'hyperviseur.
|
|
|
|
* Microsoft Hyper-V, XenServer, VMware ESX, ...
|
|
|
|
#### Type 2
|
|
|
|
* L'hyperviseur s'appuie sur le système d'exploitation déjà lancé pour accéder
|
|
au matériel ;
|
|
|
|
* Linux KVM, VirtualBox, BHyVe, ...
|
|
|
|
|
|
### Paravirtualisation
|
|
|
|
#### Caractéristiques
|
|
|
|
* Nécessite un noyau patché ;
|
|
* l'hôte expose une API accessible aux invités ;
|
|
* les invités accèdent au matériel via l'API de l'hôte.
|
|
|
|
#### Exemple
|
|
|
|
* Xen
|
|
|
|
|
|
## Virtualisation légère
|
|
|
|
### Conteneur
|
|
|
|
![](cntnr.png)
|
|
|
|
### Conteneur
|
|
|
|
#### Caractéristiques
|
|
|
|
* Isolation faite par le noyau de l'hôte ;
|
|
* le noyau est partagé entre tous les invités ;
|
|
* les périphériques sont déjà en place (pas besoin d'en émuler) ;
|
|
* l'invité démarre à partir de `/sbin/init`.
|
|
|
|
|
|
### Conteneurs applicatifs
|
|
|
|
![](cntrapp.png)
|
|
|
|
### Conteneurs applicatifs
|
|
|
|
#### Caractéristiques
|
|
|
|
* Noyau est partagé avec l'hôte ;
|
|
* on utilise tout en place : fs, sockets, périphériques ;
|
|
* lance directement une application, pas `init`.
|
|
|
|
#### Versus chroot
|
|
|
|
* Simple isolation d'une partie du système de fichiers ;
|
|
* pas de limitation sur les ressources utilisés ;
|
|
* pas d'isolation de l'arbre des processus ;
|
|
* implémentations douteuses (GrSecurity !).
|
|
|
|
|
|
## Différentes implémentations
|
|
|
|
### Points communs
|
|
|
|
#### Environnement virtualisé
|
|
|
|
* Arborescence de fichiers séparée ;
|
|
* arbre de processus isolé ;
|
|
* comptes utilisateurs distincts ;
|
|
* pile réseau et nom de machine propre.
|
|
|
|
### Diversité
|
|
|
|
#### Unix
|
|
|
|
* **FreeBSD :** Jails lancées en 1998 ;
|
|
* **Solaris :** Zones lancées en 2005 ;
|
|
|
|
#### GNU/Linux
|
|
|
|
* **OpenVZ :** 2005, nécessite de patcher son kernel ;
|
|
* **Linux Containers (LXC) :** 2008, basé sur les namespaces et les cgroups ;
|
|
* **Docker :** 2013, en pleine croissance !
|
|
|
|
### Et Windows ?
|
|
|
|
#### Isolation
|
|
|
|
* Parallels Virtuozzo Containers ;
|
|
* Sandboxie.
|
|
|
|
#### Dérivés
|
|
|
|
* **Boot2Docker :** Docker dans une VM.
|