# QEMU/KVM: Mise en oeuvre d'un Hyperviseur sous Centos
{{INLINETOC}} :
**KVM** (Kernel-based Virtual Machine) est un hyperviseur libre de type I pour Linux. KVM est intégré dans le noyau Linux depuis la version 2.6.201.
Il fonctionne originellement sur les processeurs à architectures x86 disposant des instructions de Virtualisation Intel VT ou AMD-V.
**libvirt** est une bibliothèque, une API, un daemon et des outils en logiciel libre de gestion de la virtualisation utilisée par KVM
**WebVirtMgr** ce présente sous la forme d'une interface web développée en bootstrap. Elle utilise l'API libvirt pour la gestion du ou des hyperviseurs, des réseaux, des interfaces, des stockages et des VMs. L'accès aux VMs ce fait via une console en VNC (novnc) ou html5 "spice".
**OpenvSwitch**, ou OVS, est un logiciel de commutation virtuelle utilisé principalement pour les environnements de machines virtuelles de machines virtuelles en tant que commutateur virtuel.
OpenvSwitch est principalement composé de :\\ - **Ovs-vswitchd**: démon, implémente la commutation et implémente des flux d'échange basés sur des flux basés sur des modules compatibles avec le noyau Linux
Commutation.\\ - **Ovsdb-server**: service de base de données léger, qui enregistre principalement les informations de configuration de l'ensemble du système OVS, y compris l'interface, le contenu d'échange, le réseau local virtuel (Ovs-vswitchd fonctionne en fonction des informations de configuration de la base de données.)\\ - **Ovs-dpctl**: Un outil pour configurer le module du noyau du commutateur afin de contrôler les règles de transmission.\\ - **Ovs-vsctl**: principalement pour obtenir ou modifier les informations de configuration d'ovs-vswitchd, cet outil mettra à jour le numéro dans ovsdb-server.\\ - **Ovs-appctl**: principalement pour envoyer des commandes au démon OVS, généralement pas utilisé.\\ - **Ovsdbmonitor**: outil graphique permettant d’afficher des informations sur les données dans ovsdb-server.\\ - **Ovs-controller**: un simple contrôleur OpenFlow\\ - **Ovs-ofctl**: utilisé pour contrôler le contenu de la table de flux lorsque OVS fonctionne comme un commutateur OpenFlow.
## Virualisation
Un hyperviseur de type 2 est un logiciel qui s’installe et s’exécute sur un système d’exploitation déjà en place. De ce fait, plus de ressources sont utilisées étant donné qu’on fait tourner l’hyperviseur et le système d’exploitation qui le supporte, il y a donc moins de ressources disponible pour les machines virtuelles. L’intérêt qu’on peut trouver c’est le fait de pouvoir exécuter plusieurs hyperviseurs simultanément vu qu’ils ne sont pas liés à la couche matérielle.
QEMU est une solution d'émulation complète dite « hyperviseur de type 2 ». Le matériel vu par le système d'exploitation invité est émulé, et le processeur lui-même peut être émulé.
'-----------------------------------------------------------------------------------------------'
|[88] |
| Host User space |
| .----------------------------------. |
| |[BB] | |
| | Qemu | |
| | '-----------------------------' | |
| | |[LB] Guest | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | '-----------------------------' | |
| | ^ | |
| | | | |
| .----------------------------------. |
| | |
'-----------------------------------------------------------------------------------------------'
|
|
v
'-----------------------------------------------------------------------------------------------'
|[GR] |
| Host Kernel Space |
| |
| |
| |
| |
| |
| |
'-----------------------------------------------------------------------------------------------'
|
v
'-----------------------------------------------------------------------------------------------'
|[RD] |
| Harware |
| |
'-----------------------------------------------------------------------------------------------'
[BB]: {"fill":"#5555BB","a2s:delref":true}
[LB]: {"fill":"#bbddee","a2s:delref":true}
[PK]: {"fill":"#FFAAAA","a2s:delref":true}
[OR]: {"fill":"#FF7733","a2s:delref":true}
[BG]: {"fill":"#114444","a2s:delref":true}
[GR]: {"fill":"#99dd99","a2s:delref":true}
[RD]: {"fill":"#EE3322","a2s:delref":true}
[YL]: {"fill":"#ffff33","a2s:delref":true}
[88]: {"fill":"#888888","a2s:delref":true}
## Hyperviseur de Type 1
Un hyperviseur de type 1 est un système qui s’installe directement sur la couche matérielle du serveur. Ces systèmes sont allégés de manière à se « concentrer » sur la gestion des systèmes d’exploitation invités c'est-à-dire ceux utilisés par les machines virtuelles qu’ils contiennent. Ceci permet de libérer le plus de ressources possible pour les machines virtuelles. Toutefois, il est possible d’exécuter uniquement un hyperviseur à la fois sur un serveur.
KVM convertit Linux en un hyperviseur de type 1 (système nu). Pour exécuter des machines virtuelles, tous les hyperviseurs ont besoin de certains composants au niveau du système d'exploitation : gestionnaire de mémoire, planificateur de processus, pile d'entrées/sorties (E/S), pilotes de périphériques, gestionnaire de la sécurité, pile réseau, etc. La technologie KVM comprend tous ces composants, car elle est intégrée au noyau Linux. Chaque machine virtuelle est mise en œuvre en tant que processus Linux standard. Elle est gérée par le planificateur Linux standard et dispose de matériel de virtualisation dédié (carte réseau, carte graphique, un ou plusieurs processeurs, mémoire, disques).
'-----------------------------------------------------------------------------------------------'
|[88] |
| Linux User space .-----------------------------. |
| | | |
| | Webbvirtmgr | |
| .-----------------------------. |
| ^ |
| | |
| v |
| .----------------------------------. .--------------. |
| |[BB] | |[PK] | |
| | Libvirt | | ovsdb-server | |
| | | .--------------. |
| | | ^ |
| | | | |
| | | v |
| | | .--------------. |
| .----------. | | |[PK] | |
| | libvirtd |<-->| | | ovs-vswitchd | |
| .----------. .----------------------------------. .--------------. |
| ^ ^ ^ |
| | | | |
'-----------------------------------------------------------------------------------------------'
| | |
'-----------------------------------------------------------------------------------------------'
|[GR] | | | |
| Linux Kernel Space v v v |
| .---------------------------------. .------------------------. |
| |[78] | |[PK] | |
| | KVM | | vhost-net | |
| .------------------------. | '--=--------------------------' | .------+----+------------. |
| | | | |[LB] Guest | | |port| |
| | Kernel Drivers | | | .-------------------------. | | .------+----+------------. |
| | | | | |[PK] | | | |[PK] | |
| .------------------------. | | | virtual drivers | | | | ovs kernel fwd panel | |
| ^ | | .-------------------------. | | .------+----+------------. |
| | | '-----------------------------' | |port| |
| | .---------------------------------. '----' |
| | | | |
'-----------------------------------------------------------------------------------------------'
| | |
v v v
'-----------------------------------------------------------------------------------------------'
|[RD] |
| Harware |
| |
'-----------------------------------------------------------------------------------------------'
[BB]: {"fill":"#5555BB","a2s:delref":true}
[LB]: {"fill":"#bbddee","a2s:delref":true}
[PK]: {"fill":"#FFAAAA","a2s:delref":true}
[OR]: {"fill":"#FF7733","a2s:delref":true}
[BG]: {"fill":"#114444","a2s:delref":true}
[GR]: {"fill":"#99dd99","a2s:delref":true}
[RD]: {"fill":"#EE3322","a2s:delref":true}
[YL]: {"fill":"#ffff33","a2s:delref":true}
[78]: {"fill":"#447788","a2s:delref":true}
[88]: {"fill":"#888888","a2s:delref":true}
## WebVirtMgr
WebVirtMgr est une interface Web basée sur libvirt pour la gestion des machines virtuelles. Il permet de créer et de configurer de nouveaux domaines, et d'ajuster l'allocation des ressources d'un domaine. Une visionneuse VNC sur un tunnel SSH présente une console graphique complet du domaine invité. KVM est actuellement le seul hyperviseur pris en charge
## Open vSwitch
OpenvSwitch est un logiciel de switch virtuel conçu pour relier entre elles des machines virtuelles tel que le ferait un switch physique entre plusieurs machine.
Open vSwitch permet de créer autant de bridge que l'on veut et autant de VLAN sur chaque bridge. Cette aspect permet de facilement isoler chaque client en lui attribuant un bridge dédié, on évite ainsi les problèmes de hack ou de fort trafic généré par le rejet de paquets marqués.
##Prérequis de l'installation
* Disposer d’une machine Linux « le serveur ».
* Avoir accès à cette machine :
* En local mais surtout à distance (SSH) ;
* Avec des droits administrateur (« root », ou être membre du groupe « sudo »).
* Pour l’accès aux dépôts GIT de ce serveur depuis les clients GIT :
* Un serveur SSH fonctionnel et correctement configuré (sécurisé) ;
* et/ou
* Un serveur HTTP(S) fonctionnel et correctement configuré (Apache de préférence).