Introduction
Le but de ce document est de permettre de faire l'atelier, pas à pas, en suivant les instructions, vous-même!
En cas de problème, n'hésitez-pas à me demander de l'aide. Les personnes avancées peuvent soit aider
les autres participants, soit lire les scripts, et documentations et références.
La première version de ce document était plus complexe. Avec l'arrivée de lenny en stable, et les améliorations au package CRIL openvz-support,
les étapes sont vraiment simplifiées.
Etape 1: installation de Debian lenny
A l'aide du CD d'installation réseau (netinstall), installer par réseau une Debian lenny sans configuration particulière. Notez que si votre machine est compatible amd64/emt64 (c'est le cas de tous les AMD et Intel récents), vous pouvez bénéficier d'une installation en 64 bits. Les machines virtuelles OpenVZ pourront, elles,
être utilisées en 32 ou 64 bits. Pour le moment, sauf cas spéciaux, je recommande un système de base en 64 bits, et des machines virtuelles 32 bits.
- Choose a language: C; choose a country: Europe/Switzerland; Keymap Swiss/French
- DHCP: Hostname: vzhost1; domain: alphanet.ch
- Partitionning: Guided, use entire disk; All files in a single partition; Finish partitionning; Yes.
- Root password: demo; User: demo, demo, password demo.
- Package survey: à ce moment ALT-F2, chroot /target; vi /etc/apt/sources.list, insérer avant ftp.ch.debian.org mirror local si utilisé; apt-get update; exit
- Software selection
- dans tous les cas: Standard system
- si désiré Desktop environment
Connexion et installation de quelques packages utiles
-
vi /etc/apt/sources.list
, commenter le CD si pas déjà fait
-
apt-get update && apt-get -u dist-upgrade
-
apt-get install tcpdump ltrace strace telnet ssh rsync
-
apt-get clean
NB: on aurait pu utiliser FAI ou du preseeding, mais il y a peu de choses à faire, on a donc installé manuellement, plutôt que de dupliquer sur les 5 autres machines
avec dd ou tar et ensuite de modifier juste le nom de la machine
/etc/hostname
,
/etc/hosts
,
/etc/mailername
et s'occuper de
z25
(alias carte réseau).
Avancés
- il pourrait être intéressant d'utiliser LVM et d'installer chacune des machines virtuelles dans son propre volume logique (LV), ce qui permet de supprimer la gestion des quotas machines OpenVZ.
- pour configurer les jeux de caractères selon le standard CRIL, faire comme suit
Etape 2: ajout des sources d'installation CRIL, du bon kernel et du package openvz-support et des outils
Sous root:
echo >> /etc/apt/sources.list deb http://packages.cril.ch/cril/debian/packages/ etch cril
wget -O - http://www.cril.ch/pub/CRIL/WebHome/3D79EDCA.asc | apt-key add -
apt-get update && apt-get -u dist-upgrade
# NB: remplacer amd64 par i386 si vous avez installé Debian lenny i386
# (va également installer les outils openvz)
apt-get install linux-image-2.6-openvz-amd64
# redémarrer à ce stade et vérifier que les commandes suivantes fonctionnent:
# uname -a # doit indiquer un kernel openvz
# vzlist # ne doit pas indiquer d'erreur
apt-get install openvz-support
# il faut copier la configuration attachée à ce topic dans /etc/default/openvz-support
/usr/lib/openvz-support/scripts/install-openvz --complete
# à ce stade, redémarrer, ou lancer /etc/init.d/openvz-support start
Cette dernière procédure préconfigure le réseau pour notre utilisation, ainsi que des redirections de ports
de 2222 à 2231 (pour 192.168.100.100:22 à 192.168.100.109:22), utile par exemple pour accéder
via l'adresse publique. Consultez /etc/rc.local pour voir ce que fait ce script.
- openvz-support: Default openvz-support config
- vérifier: pas 64 bits pour les VZ!
Avancés
- le kernel OpenVZ de lenny ne supporte pas certaines fonctions, comme par exemple l'allocation de temps CPU. Il est possible d'installer un kernel "officiel" OpenVZ, consulter leur Wiki et surtout http://bugzilla.openvz.org/show_bug.cgi?id=909. C'est peu recommandé.
Etape 3: création de templates à l'aide du support
L'idée est de préparer une version de base d'un OS (ici Debian) à utiliser comme template lors de la
création de nouvelles machines virtuelles. Cette génération se fait notamment grâce à l'outil
debootstrap et une archive Debian.
Sous root:
apt-get install debootstrap
/usr/lib/openvz-support/scripts/create-template
Attention: le numéro de VM 777 est réservé pour la création de templates. Cette création
prend environ 10 minutes sur une machine Phoenix avec une bonne connexion réseau.
Utilisez ce temps à lire les manuels systèmes concernant les commandes (voir étape 6 ci-dessous).
(voir aussi
http://wiki.openvz.org/Debian_template_creation)
En cas de nécessité (arrêt au milieu de l'installation), faire:
vzctl stop 777; rm -rf /etc/vz/conf/777.conf /var/lib/vz/private/777
et réessayer.
Etape 4: création d'une machine virtuelle à l'aide du support
Nous allons créer une machine virtuelle portant le numéro 100. Par convention, elle sera également
accessible en 192.168.100.100 (p.ex. ses services: ssh, etc). Voir
/etc/default/openvz-support
pour cette configuration et
/etc/rc.local
.
Nous allons définir que cette VM prendra la moitié des ressources de la machine, cela se fait
à l'aide de l'outil
vzsplit
. Une configuration plus fine est certes possible, mais en général
utiliser cet outil est plus fiable que de deviner des limites à la main.
/usr/lib/openvz-support/scripts/vz-instanciate 100
vzlist -a
# Appliquer les limites
# (pour être propre, éditer ensuite le fichier et supprimer les doublons!)
vzsplit -n 2 >> /etc/vz/conf/100.conf
Si nécessaire, vous pouvez détruire la VM 100:
vzctl stop 100
vzctl destroy 100
Etape 5: manipulations
Essayez-vous aux diverses opérations suivantes:
- démarrer et stopper une VM:
vzctl start 100
, vzctl stop 100
- liste des processus depuis le système englobant:
ps auxw | more
- liste des processus depuis la machine hébergée (VM):
vzctl exec 100 ps auxw | more
- mémoire libre et espace disque dans les deux cas (
free
, df
))
- n'hésitez pas à consulter les manpages:
vzctl(8)
, vz
p.ex. man 8 vzctl
, man vz
, ainsi que toutes les manpages associées (voir man -k vz
), notamment vzsplit(8))
, vzlist
et exécutez ces diverses commandes après avoir lu le manuel!
- connectez-vous en ssh sur la VM 100
- lancez le programme
perl -e 'while (1) { }'
et déterminez combien de CPU est utilisé sur la machine hébergée (VM) et la machine hôte. Modifiez éventuellement le CPU alloué à la VM à l'aide de la commande vzctl set 100 --cpulimit 25%
. Est-ce que cela change en temps réel ? A quoi pourrait servir l'option --save
dans le changement de paramètres ? Quels paramètres peuvent-être modifiés ? (voir vzctl set
), Terminez le programme avec CTRL-C.
- NB: ne fonctionnera pas avec le kernel openvz de lenny (toujours 100% des ressources)
- essayez d'augmenter la mémoire disponible et l'espace disque (cf http://wiki.openvz.org/UBC_parameters)
- installez le package
apache2
et vérifiez qu'il fonctionne (port 80 de l'adresse IP de 100)
- si apache ne démarre pas (
ps auxw | grep apache
, dans la VM!), faites tail /var/log/apache2/error.log
- modifiez /etc/apache/apache2.conf
- diminuez le nombre de thread dans
IfModule mpm_worker_module
- nous allons crée une copie de la VM 100 dans la VM 101:
- dupliquez la VM 100 dans la VM 101 comme suit:
cp /etc/vz/conf/100.conf /etc/vz/conf/101.conf
vzctl create 101
vzctl stop 100 # pas on-line
rsync -aH --delete /var/lib/vz/private/100/. /var/lib/vz/private/101/.
vzctl start 100
- changez la configuration IP et p.ex. de nom de la machine via
vzctl set
- (indications
- utiliser
--save
et --ipdel 192.168.100.100
et --ipadd 192.168.100.101
)
- démarrez cette VM et testez qu'Apache répond également.
- faites
date > /var/www/bla
dans cette VM et contrôlez qu'Apache sur cette VM liste ce fichier, mais pas sur l'autre VM 100; p.ex. avec w3m http://192.168.100.101/bla
- faudrait-il changer la clé SSH privée de machine de cette nouvelle VM ? y-a-t-il d'autres choses qui peuvent être à faire dans le cas d'une telle copie ?
- imaginez ce qu'il faudrait faire pour intégrer une machine réelle comme VM
- documentez-vous sur la commande
vzmigrate
. Qu'est-ce que la migration on-line ?
- connectez-vous en SSH sur la VM 100 depuis le host:
ssh 192.168.100.100 -l root
- suspendez la VM:
vzctl 100 checkpnt
- faites
vzlist -a
- confirmez que la session SSH est coincée
- n'attendez pas trop (timeout règles firewall p.ex.) et faites:
vzctl 100 restore
- la session SSH continue-t-elle ?
- où est stocké l'état de la VM pendant "suspend" (deux endroits) ?
- comment feriez-vous pour une migration transparente entre deux machines physiques d'une VM ?
- sur le modèle de
/etc/rc.local
, ajoutez une redirection de port sur l'adresse publique de votre système de manière à ce que l'Apache de chaque machine virtuelle soit accessible sous 10080 + 100 * (adresse - 100)
- consultez
/proc/user_beancounters
et déterminez si des dépassements de ressource ont eu lieu; si oui que proposez-vous ?
- on aimerait pouvoir utiliser sshfs, encfs ou d'autres systèmes de fichiers basés sur fuse. Pour ce faire il faut charger le module kernel fuse:
modprobe fuse
(dans l'hôte), et autoriser ce périphérique dans la VM (cf --devices
dans vzctl(8)
).
- comparez ce script: stgraber-ubuntu-template: Script de création de template pour Ubuntu au script dans le package
openvz-support
.
- comment fonctionne les "hooks" permettant de créer des VZ dans des LV indépendants (volumes logiques) (indication:
/etc/openvz-support/run-part.d/sample*
)
Indications
Quelques conseils
- travailler en mode NAT est plus flexible, mais plus complexe: dans certains cas, travailler en mode "quasi-bridge" est soit nécessaire (support des broadcast pour le voisinage réseau Microsoft), soit plus simple, en particulier s'il y a plusieurs adresses IP, ou le besoin d'auto-accès (des services de la VM accèdent à des services locaux sous certaines adresses IP)
- si la version de GNU/Linux en VZ n'est pas la même que celle du host (en particulier le kernel), il peut y avoir de petits problèmes de compatibilité. Testez en particulier bien: votre IDENTd, Asterisk.
- si vous utilisez un filesystem par VZ (p.ex. extX sur LVM), désactivez la gestion des quotas (DISK_QUOTA=no), c'est plus performant
- pour transformer une machine réelle en machine virtuelle
- excluez /var/lib/vz/root des sauvegardes, de find/locate, etc.
- vous pouvez y monter des filesystem via un /etc/vz/conf/10X.mount script.
- pour sauvegarder les VZ
- système et données (/var/lib/vz/private/10X): tar ou rsync
- données "actives" (bases de données, fichiers DBM indexés, repository SVN, etc): faire des dumps réguliers avec historique, sous forme de fichiers textes et/ou compressés, sauvegardés dans la sauvegarde système
- on peut aussi lancer des scripts via vzctl exec 10X "au bon moment".
--
MarcSCHAEFER - 30 Dec 2008