QEMU/KVM (Libvirt)

KVM c'est la simplicité, l'intégration native au kernel Linux et surtout la performance ! Oh et c'est légèrement un peu beaucoup utilisé chez les clouds providers.

Guides d'installation

Guides d'installation

Installer un hôte de virtualisation QEMU/KVM (Fedora Server 31)

fedora27server-945x400.jpg

Fonctionnement de QEMU/KVM

KVM (Kernel-based Virtual Machine) est une technologie de virtualisation Open Source intégrée à Linux. Avec KVM, vous pouvez transformer Linux en un hyperviseur qui permet à une machine hôte d'exécuter plusieurs environnements virtuels isolés, appelés invités ou machines virtuelles.

KVM convertit le noyau Linux en un hyperviseur de type 1. 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).

400px-Kernel-based_Virtual_Machine.png

Installation d'un hôte de virtualisation QEMU/KVM (avec Libvirt)
# Installer les packages nécessaires
dnf install -y qemu-kvm libvirt python-libvirt libguestfs-tools-c virt-install virt-v2v virt-top tuned cockpit cockpit-machines

# Supprimer le dashboard (inutile pour un hôte de virtualisation)
dnf remove -y cockpit-dashboard
systemctl enable --now libvirtd
virsh net-destroy default

virsh net-undefine default

systemctl restart libvirtd
# Ajouter un règle dans le firewall pour autoriser le service Cockpit (port 9090)
firewall-cmd --add-service=cockpit --permanent
firewall-cmd --reload

# Démarrer le service pour Cockpit
systemctl enable --now cockpit.socket
# Démarrer le service tuned
systemctl enable --now tuned

# Choisir le profil adapté à la virtualisation
tuned-adm profile virtual-host

Guides d'installation

Création d'un bridge pour QEMU/KVM avec NetworkManager et Libvirt

Afin de pouvoir bénéficier d'une connectivité sur un réseau d'entreprise (avec DHCP, DNS...etc), il est nécessaire que les machines virtuelles puissent "parler" sur le réseau. Par défaut, Libvirt crée un réseau de type NAT par défaut, ce qui ne convient pas l'usage décrit précédemment.

Si vous disposez d'un système GNU/Linux disposant de NetworkManager (ex: Fedora Server), il est tout à fait possible de créer un bridge qui va permettre aux machines virtuelles de communiquer sur le réseau de l'entreprise ou votre réseau home. Un bridge Linux est simplement une implémentation de switching Layer 2 au niveau du noyau Linux, il va faire le même travail qu'un vSwitch sur VMware ou un Hyper-V Switch.

Les noms des interfaces sont à adapter en fonction de votre configuration !

sudo nmcli con add ifname virbr1 type bridge con-name virbr1
sudo nmcli con add type bridge-slave ifname enp3s0 master virbr1
sudo nmcli con down "enp3s0"
sudo nmcli con up virbr1

Une fois ces étapes accomplies, vous devriez voir votre bridge fonctionnel (ne pas hésiter à redémarrer le service NetworkManager) :

Il est également intéressant de déclarer ce bridge à Libvirt pour pouvoir l'utiliser plus facilement avec ce dernier :

<network>
  <name>virbr1</name>
  <forward mode="bridge"/>
  <bridge name="virbr1" />
</network>

Pour éditer des configurations réseaux (IP statique notamment), cela se fait au niveau du bridge ! Pensez à bien flush la configuration de votre interface physique.

That's it !