[ libresys ]

Installation d'un serveur Debian - hôte OpenVZ + KVM

Il s'agit dans cette documentation d'installer un serveur physique Debian qui soit capable d'exécuter aussi bien des machines virtuelles de type OpenVZ que KVM.

Pré-requis

OpenVZ

Installation des paquetages

Sur Debian 4

Taper les commandes suivantes pour mettre à jour le fichier sources.list, afin de référencer un dépot de paquets permettant d'installer OpenVZ sur Debian 4 :

# echo -e "\ndeb http://download.openvz.org/debian-systs etch openvz" >> /etc/apt/sources.list
# wget -q http://download.openvz.org/debian-systs/dso_archiv_signing_key.asc -O- | apt-key add - 

Faire ensuite :

# apt-get install vzquota  vzprocps vzctl 
# apt-get install fzakernel-2.6.18-686-bigmem    (sur serveur 32 bits)
# apt-get install fzakernel-2.6.18-amd64         (sur serveur 64 bits)

  • Modifier le /boot/grub/menu.lst pour utiliser le bon noyau
  • Installer le paquet vzctl-ostmpl-debian ou le récupérer sur un serveur déjà installé (le modèle se trouve dans /var/lib/vz/template/cache/)
  • Vérifier en faisant un rcconf que vz est bien sélectionné.
  • Rajouter ceci à la fin de /etc/sysctl.conf (ou vérifier que c'est bien présent)

#-- OpenVZ begin --#

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# TCP Explict Congestion Notification
#net.ipv4.tcp_ecn = 0

# we do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

#-- OpenVZ end --#

  • Rebooter

Sur Debian 5 et 6

C'est un peu plus simple car OpenVZ est intégré dans les dépots Debian. En revanche, les dépots n'ont pas tous les paquets (par ex. vzdump et vzprocps) mais ce manque ne nous gêne pas.

  • Faire

# apt-get update
# apt-get install linux-image-openvz-686 (sur serveur 32 bits)
# apt-get install linux-image-openvz-amd64 (sur serveur 64 bits)
# apt-get install vzctl vzquota

  • Modifier le /boot/grub/menu.lst (Debian 5) pour utiliser le bon noyau
  • Récupérer des templates sur le site openvz ou les récupérer sur un serveur déjà installé (le modèle se trouve dans /var/lib/vz/template/cache/)
  • Vérifier en faisant un rcconf que vz est bien sélectionné.
  • Rajouter ceci à la fin de /etc/sysctl.conf (ou vérifier que c'est bien présent)

#-- OpenVZ begin --#

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# TCP Explict Congestion Notification
#net.ipv4.tcp_ecn = 0

# we do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

#-- OpenVZ end --#

  • Rebooter

Préparation pour hébergement de VE avec réseau veth

Cette section n'est pas nécessaire si les VE sont uniquement du type venet. Mais il est possible de préparer le serveur pour le cas où il serait amené à héberger des VE de type veth. Doc OpenVZ : http://wiki.openvz.org/Virtual_Ethernet_device.

Dans /etc/network/interfaces, transformer la configuration réseau en bridge, par exemple pour debian 4/5:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto vzbr0
iface vzbr0 inet static
   address 10.x.x.x
   netmask 255.255.x.x
   broadcast 10.x.x.x
   gateway 10.x.x.x
   bridge_ports eth0
   up echo 1 > /proc/sys/net/ipv4/conf/vzbr0/proxy_arp
   up echo 1 > /proc/sys/net/ipv4/conf/vzbr0/forwarding

Il sera certainement nécessaire d'installer le paquet bridge-utils et ifenslave.

# apt-get install bridge-utils ifenslave-2.6

Créer le fichier /etc/vz/vznet.conf avec le contenu suivant :

#!/bin/bash
EXTERNAL_SCRIPT="/usr/local/sbin/vznetaddbr"

Créer le fichier /usr/local/sbin/vznetaddbr avec le contenu suivant :

#!/bin/bash
# /usr/local/sbin/vznetaddbr
# a script to add virtual network interfaces (veth's) in a CT to a bridge on CT0

CONFIGFILE=/etc/vz/conf/$VEID.conf
. $CONFIGFILE
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`

if [ ! -n "$VZHOSTIF" ]; then
   echo "According to $CONFIGFILE CT$CTID has no veth interface configured."
   exit 1
fi

if [ ! -n "$VZHOSTBR" ]; then
   echo "According to $CONFIGFILE CT$CTID has no bridge interface configured."
   exit 1
fi

echo "Adding interface $VZHOSTIF to bridge $VZHOSTBR on CT0 for VE$VEID"
/sbin/ifconfig $VZHOSTIF 0
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/$VZHOSTIF/forwarding
/usr/sbin/brctl addif $VZHOSTBR $VZHOSTIF

exit 0

Puis le rendre éxecutable

# chmod +x   /usr/local/sbin/vznetaddbr

KVM

Je n'ai testé la virtualisation complète par KVM que sur des matériels équipés de processeurs supportant la virtualisation complète. Pour déterminer si le processeur le supporte, vérifier si la commande suivante retourne des résultats. Si oui, le processeur supporte une virtualisation complète avec KVM.

# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Installation sur Debian 6

# apt-get install virt-manager qemu-kvm

 

Avertissement : Les documentations disponibles dans ce wiki sont tirées des documentations que j'ai rédigées dans le cadre de mon activité professionnelle, que j'ai ensuite adaptées afin d'en éliminer toute référence à un contexte spécifique du système d'information que j'administre et de les rendre plus facilement réutilisables. Cela implique que je ne les ai pas appliquées dans l'état où elles sont présentées dans ce wiki et qu'elles peuvent comporter des erreurs. Merci de me les signaler le cas échéant, et en cas de doute, n'hésitez pas à me questionner à travers l'article adéquat du blog.

Vous pouvez utiliser les informations, documentations et conseils diffusés à travers ce site à vos risques et périls. Je ne saurais être tenu pour responsable des conséquences que leur utilisation pourrait vous occasionner.

Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante : CC Attribution-Noncommercial-Share Alike 3.0 Unported