J'ai besoins de me mettre en place un serveur de tests pour pouvoir déployer et redéployer des vms ou des réseaux complets de tests pour différents projes professionnels. Je vais donc mettre complètement à jour mon serveur avec les besoins suivants :
- Distribution Ubuntu 12.04 LTS pour bénéficier d'un kernel récent
- une version récente de kvm et libvirt
- openvswitch pour avoir un niveau avancé de paramétrage de réseaux (VLAN, OpenFlow ...)
- déploiement des vms en lvm
Commençons
Le matériel
La bestiole de test dispose des ressources suivantes :
- processeur Quad Core Q6660
- 8 Go Ram
- 7 interfaces réseau dont 3 Gigabit
- 7 disques durs dont 5 pour le LVM
Outre le serveur je dispose d'un NAS Thecus N5200, d'un switch administrable Linksys SRW208 et d'un point routeur Wifi WRT54GL.
Installation Ubuntu 12.04
Rien de bien méchant ici, bien réfléchir a son partitionnement et choisir seulement les paquets de base et les paquets SSH.
Pour le partitionnement je choisi des partitions en ext4 et un découpage LVM avec deux groupes de volumes : system et vm ; le premier sur un disque de 200Go pour les différentes partitions système en ce gardant de l'espace sous le pied ; le second pour le stockage des vms sur 5 disques (3*1To + 2*500Go).
Fixer l'adresse IP de la machine.
Puis une petite mise à jour de la distribution :
# apt-get update && apt-get dist-upgrade -y
Puis un reboot si nécessaire (nouveau kernel par exemple).
Virtualisation avec kvm
Je vais utiliser kvm pour la virtualisation. On installe donc les paquets nécessaires :
# apt-get install kvm libvirt-bin virtinst
Gestion du réseau avec OpenVswitch
Pour utiliser et installer OVS avec KVM il faut supprimer la gestion de base du réseau préinstallé pour kvm (le bridge virbr0) :
# virsh net-destroy default
# virsh net-autostart --disable default
# apt-get remove --purge ebtables
Puis on installe les paquets nécessaires pour openvswitch :
# apt-get install openvswitch-controller openvswitch-brcompat openvswitch-switch
openvswitch-datapath-source
Il faut ensuite activer la compatibilité Linux bridge d'OVS dans le fichier /etc/default/openvswitch-switch :
BRCOMPAT=yes
On redémarre pour tout activer correctement et on test :
Test kvm :
# virsh list
Test ovs :
# ovs-vsctl show
Si aucune erreur sur ces deux commandes c'est que tout va bien.
Configuration
Créer un bridge
Il faut maintenant créer un bridge OVS pour que les machines virtuelles puissent communiquer avec l'extérieur.
# ovs-vsctl add-br br0
# ovs-vsctl add-port br0 eth0
(à adapter suivant la carte réseau)
Il faut ensuite adapter le fichier d'interface pour tout démarrer correctement :
auto eth0
iface eth0 inet manual
up ifconfig $IFACE up
auto br0
iface br0 inet static
address 192.168.1.11
netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 192.168.1.254
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
Création du pool de stockage des vms
Pour kvm on crée le pool de stockage sur un groupe de volume existant et dédié :
# mkdir /etc/libvirt/storage
# vi /etc/libvirt/storage/vm.xml
pool <type='logical'>
<name>vm</name>
<target>
<path>/dev/vm</path>
</target>
</pool>
On active ce pool de stockage :
# virsh pool-define /etc/libvirt/storage/vm.xml
Pool vm défini depuis /etc/libvirt/storage/vm.xml
# virsh pool-start vm
Pool vm démarré
# virsh pool-autostart vm
Le pool vm démarrera automatiquement
# virsh pool-info vm
Nom : vm
UUID : 04722404-dcc3-13f8-cbb6-934915c60317
État : en cours d'exécution
Persistent: yes
Autostart: yes
Capacité : 3,64 TB
Allocation : 0,00
Disponible : 3,64 TB
Paramétrage de vnc
VNC est nécessaire pour accéder aux vms en console. Par défaut vnc "écoute" sur le réseau de loopback, ce qui est pas très intéressant pour accéder à VNC via le réseau local. Il faut modifier le fichier /etc/libvirt/qemu.conf :
vnc_listen = "192.168.1.11"
remplacer par l'IP du serveur. NB, il est bien sur nécessaire sur un serveur de prod d'activer le TLS pour plus de sécurité d'accès et/ou de limiter les accès aux ports VNC (59xx).
On redémarre libvirt pour prendre en compte cette modification :
# service libvirt-bin restart
Créer une première vm pour tester
La commande de création d'une vm avec tout les paramètres vu plus haut est la suivante :
# virt-install --hvm --vnc --name=vm01 --ram 512 --disk pool=vm,size=10,bus=virtio,cache=none
--network=bridge:br0,model=virtio --location=http://ftp.debian.org/debian/dists/squeeze/main/
installer-amd64/ --os-type=linux --os-variant=debiansqueeze
Se connecter sur la vm via VNC (vinagre, vncviewer ...) et normalement tout fonctionne correctement.
Voilà un bel outils en place.