Serveur de tests maison

 

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.