Une machine virtuelle (VM) est un terme assez générique pour de nombreuses technologies de virtualisation.
Il existe de nombreuses variantes sur les technologies de virtualisation, mais les principales sont:
- Virtualisation au niveau du matériel
- Virtualisation au niveau du système d'exploitation
qemu-kvm
et VMWare
sont des exemples de la première. Ils utilisent un hyperviseur pour gérer les environnements virtuels dans lesquels un système d'exploitation complet s'exécute. Par exemple, sur un qemu-kvm
système, vous pouvez avoir une machine virtuelle exécutant FreeBSD, une autre exécutant Windows et une autre exécutant Linux.
Les machines virtuelles créées par ces technologies se comportent comme des ordinateurs individuels isolés pour l'invité. Ceux-ci ont un processeur virtuel, une RAM, une carte réseau, des graphiques, etc., que le client pense être le véritable article. Pour cette raison, de nombreux systèmes d'exploitation différents peuvent être installés sur les machines virtuelles et ils fonctionnent «prêts à l'emploi» sans aucune modification nécessaire.
Bien que cela soit très pratique, dans la mesure où de nombreux systèmes d'exploitation s'installent sans trop d'effort, il présente un inconvénient en ce que l'hyperviseur doit simuler tout le matériel, ce qui peut ralentir les choses. Une alternative est le matériel para-virtualisé, dans lequel un nouveau périphérique virtuel et pilote est développé pour l'invité, conçu pour les performances dans un environnement virtuel. qemu-kvm
fournir la virtio
gamme de périphériques et de pilotes pour cela. Un inconvénient est que le système d'exploitation invité doit être pris en charge; mais s'ils sont pris en charge, les avantages en termes de performances sont importants.
lxc
est un exemple de virtualisation au niveau du système d'exploitation, ou conteneurs. Sous ce système, il n'y a qu'un seul noyau installé - le noyau hôte. Chaque conteneur est simplement une isolation des processus de l'espace utilisateur. Par exemple, un serveur Web (par exemple apache
) est installé dans un conteneur. En ce qui concerne ce serveur Web, le seul serveur installé est lui-même. Un autre conteneur peut exécuter un serveur FTP. Ce serveur FTP n'est pas au courant de l'installation du serveur Web - seulement le sien. Un autre conteneur peut contenir l'installation complète de la zone utilisateur d'une distribution Linux (tant que cette distribution est capable de fonctionner avec le noyau du système hôte).
Cependant, il n'y a pas d'installations de système d'exploitation distinctes lors de l'utilisation de conteneurs - uniquement des instances isolées de services utilisateur. Pour cette raison, vous ne pouvez pas installer différentes plates-formes dans un conteneur - pas de Windows sur Linux.
Les conteneurs sont généralement créés à l'aide d'un fichier chroot
. Cela crée une racine privée ( /
) distincte pour un processus avec lequel travailler. En créant de nombreuses racines privées individuelles, les processus (serveurs Web ou distribution Linux, etc.) s'exécutent dans leur propre système de fichiers isolé. Des techniques plus avancées, telles que celles qui cgroups
peuvent isoler d'autres ressources telles que le réseau et la RAM.
Il y a des avantages et des inconvénients à la fois et de nombreux débats de longue haleine quant à ce qui est le mieux.
- Les conteneurs sont plus légers, car aucun système d'exploitation complet n'est installé pour chacun; ce qui est le cas des hyperviseurs. Ils peuvent donc fonctionner sur du matériel de moindre spécification. Cependant, ils ne peuvent exécuter que des invités Linux (sur des hôtes Linux). De plus, comme ils partagent le noyau, il est possible qu'un conteneur compromis en affecte un autre.
- Les hyperviseurs sont plus sécurisés et peuvent exécuter différents systèmes d'exploitation, car un système d'exploitation complet est installé sur chaque machine virtuelle et les invités ne connaissent pas les autres machines virtuelles. Cependant, cela utilise plus de ressources sur l'hôte, qui doit être relativement puissant.