Installation KVM sur un dédié OVH

L’objectif aujourd’hui est de déployer la solution de virtualisation KVM sur un serveur dédié pris chez OVH (un SP-32 pour être précis).

Le système hôte sera CentOS 7.2 et la virtualisation du réseau se fera à l’aide d’OpenVSwitch. Je n’aborderais ni le stockage réseau ni la mise en cluster.

Préparation

Pour commencer, le serveur doit être… installé sous CentOS, à faire depuis le manager d’OVH :

2016-01-16_21-49-23

Je conseille vivement d’utiliser le kernel de la distribution et non un de ceux mis à disposition par OVH.

Une fois opérationnel, vérifiez que SELinux est bien activé :

[root@host01 ~]# getenforce 
Enforcing

Si ce n’est pas le cas, l’activer (dans /etc/sysconfig/selinux) car c’est une première protection indispensable.

KVM

Installation des packages :

yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

virt-install est facultatif et ne sert qu’à faciliter la création de nouvelles machines virtuelles.

Activation de libvirtd (le « chef » d’orchestre) au démarrage :

systemctl enable libvirtd
systemctl start libvirtd

On vérifie que les modules noyaux sont bien présents :

[root@host01 ~]# lsmod | grep kvm
kvm_intel             162153  0 
kvm                   525409  1 kvm_intel

devpts

Une modification est nécessaire dans /etc/fstab pour que l’accès console aux VMs KVM (cf virsh ttyconsole) fonctionne :

devpts		/dev/pts	devpts	gid=5,mode=620	0	0

Remarquez l’ajout des options gid=5,mode=620 :

  • gid=5  rend le groupe tty propriétaire lorsque l’on monte de nouveaux pseudo terminal device (pts).
  • mode=620  donne les droits en lecture+écriture à l’utilisateur et écriture au groupe.

Sans elles, le lancement de machines virtuelles échoue avec l’erreur « qemu-kvm: Failed to create chardev ».

Réseau

Nous allons avoir besoin d’un bridge pour connecter les VMs à l’interface physique du serveur et donc pouvoir « monter » des IP publiques sur celles-ci.

Dans /etc/sysconfig/network-script/ifcfg-eth0, notez les adresses IPv4 et v6, le masque de sous-réseau et la passerelle puis ne conserver que les lignes suivantes :

  • DEVICE=eth0
  • ONBOOT=yes

Ajoutez à sa suite BRIDGE=br0 et enregistrez.

Créez à présent un fichier /etc/sysconfig/network-script/ifcfg-br0 avec le contenu suivant :

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"
BOOTPROTO="static"
IPADDR="ADRESSE IP DU SERVEUR"
GATEWAY="GATEWAY DU SERVEUR"
NETMASK="NETMASK DU SERVEUR"
IPV6INIT="yes"
IPV6_AUTOCONF="no"
IPV6ADDR="SUBNET V6 DU SERVEUR"

Autorisez le forward des packets :

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.d/kvm.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.d/kvm.conf
sysctl -p /etc/sysctl.d/kvm.conf

Ne reste plus qu’à redémarrer le serveur pour appliquer la nouvelle configuration.

Note : Il m’est arrivé à plusieurs reprises de perdre le réseau à cette étape en voulant exécuter systemctl restart network pour appliquer les réglages pour ne pas avoir à redémarrer. De toute évidence, pour une raison que j’ignore, mieux vaut perdre quelques minutes à redémarrer proprement  🙂

Si jamais vous perdez la main, ce n’est pas grave car OVH propose par défaut un KVM IP (accès à la console du serveur depuis une applet Java), il suffit alors de se connecter dessus et de re-configurer correctement le réseau sans risque de perdre la main.

SELinux

Chez OVH, c’est la partition /home qui se taille la part du lion et il faut donc – sauf à repartionner – composer avec en stockant les VMs, ISOs et autres templates dans celle-ci.

Appliquer le context virt_image_t est indispensable pour que KVM puisse utiliser ce répertoire :

yum -y install policycoreutils-python
mkdir -p /home/{images,isos}
semanage fcontext --add -t virt_image_t '/home/images/(/.*)?'
restorecon -Rv /home/images

virt_image_t se retrouve en regardant le contexte de l’emplacement par défaut (/var/lib/libvirt/images) :

[root@host01 ~]# ls -dZ /var/lib/libvirt/images
drwx--x--x. root root system_u:object_r:virt_image_t:s0 /var/lib/libvirt/images

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s