Créer son premier serveur virtuel sous OpenVZ

Voici la suite du tutoriel sur l’installation d’un serveur hôte OpenVZ. Nous allons à présent entrer dans le vif du sujet et créer un premier serveur virtuel.

Création d’un premier serveur virtuel

Créer un nouveau serveur virtuel avec OpenVZ est quelque chose de très simple. A condition d’avoir installé le bon template (cf. le tutoriel sur l’installation du serveur hôte), il suffit de taper cette commande dans un terminal :

vzctl create 101 --ostemplate debian-4.0-i386-minimal --ipadd 192.168.1.1 --hostname mon-nouveau-serveur

Cette commande a, en quelques secondes, créé un nouveau serveur debian, ayant 101 comme ID de serveur virtuel (son VEID dans la terminologie OpenVZ), répondant à l’adresse IP 192.168.1.1, et dont le hostname est « mon-nouveau-serveur ». Magique !

On peut peaufiner la configuration réseau de ce serveur en lui définissant les paramètres DNS avec :

vzctl set 101 --nameserver l.ip.du.dns --searchdomain mondomaine.fr --save

Et enfin, si l’on veut que ce serveur virtuel soit démarré au reboot du serveur hôte :

vzctl set 101 --onboot yes --save

Notre serveur virtuel est prêt, il est grand temps de le démarrer avec :

vzctl start 101

Après quelques secondes, le serveur est prêt à être utilisé. Pour y entrer, tapez :

vzctl enter 101

depuis le serveur hôte. Sinon, si le template choisi contenait un serveur ssh, vous devriez déjà pouvoir vous y connecter par son adresse IP. Une fois dans votre serveur virtuel, vous pouvez y faire à peu près la même chose que dans un serveur physique. Vous pouvez dès à présent installer vos logiciels sur ce nouveau serveur virtuel.

Qu’avons nous fait ?

Installer un nouveau serveur debian, ubuntu centos ou autre en 10 secondes, ça y ressemble, mais ce n’est pas un tour de magie. Alors voyons plus en détail ce que nous avons fait.

La création du serveur tout d’abord. La commande vzctl create permet de s’appuyer sur un template pour créer un nouveau serveur virtuel. Le template est une archive tar compressée contenant l’arborescence complète d’une installation d’une distribution quelconque depuis la racine. Le nom du template à fournir sur la ligne de commande correspond au nom de l’archive placée dans le répertoir /var/lib/vz/template/cache, sans l’extension .tar.gz.

Au moment de la création, la commande vzctl create extrait tous les fichiers contenus dans l’archive tar dans le répertoire /var/lib/vz/private/x (où x est le numéro  du serveur virtuel). Après la création, on retrouve donc tous les fichiers du serveur virtuel dans le système de fichiers du serveur hôte.

Au moment de la création du serveur virtuel, openvz a également créé son fichier de configuration spécifique dans /etc/vz/conf/101.conf. Ce fichier contient les paramètres d’allocation de ressources du serveur virtuel ainsi que les paramètres réseau. C’est pour que les paramètres fournis à la commande vzctl soient enregistrés définitivement dans ce fichier qu’il faut préciser l’option –save. Sans cette option, les paramètres fournis à vzctl sont appliqués dynamiquement au serveur virtuel mais ne sont pas conservés si le serveur virtuel est redémarré.

La configuration réseau d’un serveur virtuel OpenVZ (lorsqu’il opère dans le mode venet…  j’y reviendrai) diffère de la configuration réseau de la même distribution sur un serveur physique. En effet, les paramètres réseau ne sont stockés dans les fichiers habituels de la distribution hébergée, mais sont utilisés, au moment du démarrage du serveur virtuel pour recréer les fichiers de la distribution hébergée qui concernent le paramétrage réseau, DNS et le hostname (respectivement /etc/network/interfaces, /etc/resolv.conf et /etc/hostname pour debian/ubuntu par exemple).

Enfin, au moment du démarrage, la commande vzctl start « monte » l’espace de fichiers du serveur virtuel, situé par exemple dans /var/lib/vz/private/1 dans un espace de nommage situé dans /var/lib/vz/root/101.  Lorsque le serveur est arrêté, seul le répertoire /var/lib/vz/private/101 contiendra les fichiers, et /var/lib/vz/root/101 apparaîtra vide. A savoir pour ne pas se faire piéger.

Démarrer, lister et arrêter ses serveurs virtuels

Comme nous avons vu précédemment, le démarrage du serveur virtuel se fait depuis le serveur hôte avec la commande :

vzctl start 101

De la même manière, pour arrêter ce serveur virtuel, il faut taper la commande :

vzctl stop 101

Dans le serveur virtuel, le démarrage et l’arrêt se font par la classique séquence de boot des machines unix/linux : un processus init parcourt l’inittab, et ce dernier procède au démarrage des services référencés dans les répertoires /etc/rc?.d/ et /etc/init.d. Les commandes vzctl start et vzctl stop prennent en charge la gestion du processus init du serveur virtuel. Dans vos serveurs virtuels vous gérerez le lancement et l’arrêt des services comme d’habitude, par l’intermédiaire de scripts de service placés dans /etc/init.d, sans vous occuper du reste.

Sur le serveur hôte, vous pouvez lister les serveurs virtuels qui sont démarrés en tapant :

vzlist

Si votre serveur virtuel est démarré, vous devriez lire quelque chose qui ressemble à ceci :

      VEID      NPROC STATUS  IP_ADDR         HOSTNAME
       101         10 running 192.168.1.1     mon-nouveau-serveur

On retrouve dans ce tableau les principaux éléments fournis à la création du serveur virtuel, à savoir son ID (VEID = Virtual Environment ID), son adresse IP et son hostname. On peut lire également le nombre de processus lancés dans ce serveur virtuel et un statut qui précise que ce serveur fonctionne.

C’est tout pour aujourd’hui. Dans un prochain article je poursuivrai ce tutoriel sur OpenVZ par la gestion des ressources allouées à un serveur virtuel par le serveur hôte.

  1. Bonjor j’ai fait la première partie de votre tuto et j’en suis à cette partie là mais un problème se pose.

    Please check that vzdev kernel module is loaded and you have sufficient permissions to access the file.

    aprés un debian:/dev# lsmod |grep zvdev
    qui me ne retourne rien effectivement ce n’est pas chargé…

    je vous ai mis le log de toutes mes commandes que j’ai effectué ici:

    http://matlane2000.free.fr/divers/loisirs/informatique/serveur/openvz/

    ainsi qu’une photo du choix du kernel au boot (il n’y a pas eu de problème à ce niveau là)

    Toutes les commandes sont exécutés en root sans quoi je n’aurai pas pu scripter le log.

    Merci pour vos lumières :o )

  2. Effectivement, ce module est nécessaire au fonctionnement d’OpenVZ, mais en principe tu ne devrais pas avoir à le charger manuellement.

    As tu fait en sorte que /etc/init.d/vz soit lancé au démarrage du serveur physique ?

    C’est décrit dans http://www.libresys.fr/2008/09/22/installer-un-serveur-hote-openvz/

    Il faut faire :
    update-rc.d -f vz remove
    update-rc.d vz defaults

    ou bien utiliser rcconf (apt-get install rcconf s’il n’est pas installé).

  3. A oui effectivement… j’ai cru que cela concerné que la partie pour ubuntu.

    La partie « Avant de poursuivre » concerne donc les deux distribution.

    Merci pour votre réponse ultra rapide! Cela marche bien je n’ai pas encore configuré la partie reseau. Dire que sur mon rectorat ils ont mis 2mois à migrer les serveurs web sous 2003…

    Encore merci pour cette doc superbe!

  4. Bonjour encore moi!…

    Je veux me servir de venet mais il me faut définir la paserelle (gateway) j’ai directement éditer le fichier /etc/vz/conf/1.conf
    en rajoutant un: GATEWAY= »ip_paserelle »

    par la suite j’ai définit les dns avec un:
    vzctl set 1 –nameserver 208.67.222.222-208.67.220.220 –save
    File resolv.conf was modified
    Saved parameters for VE 1

    Aprés cela je fais untruc un peu « stupide » peut etre: je redémrare le vserver pur etre sur que les nouvelles config soient prise en compte:
    vzctl restart 1
    Restarting VE
    Stopping VE …
    VE was stopped
    VE is unmounted
    Starting VE …
    VE is mounted
    Adding IP address(es): 192.168.1.200
    Setting CPU units: 1000
    Configure meminfo: 65536
    Set hostname: debianvz
    File resolv.conf was modified
    VE start in progress…

    Donc aucune probléme en vue mais aucune resolution de dns… donc impossible d’installer quoi que ce sois sur le serveur.

    Un ping à partir du vserver marche trés bien sur une adresse ip (local ou distante) je ping également le vserver à partir d’une autre machine sur son ip local.

    Bon je cherche un peu voire et je me dis que il ya peut etre un truc dans les log je fais un updatedb pour enchainer un locate et là surprise:

    updatedb
    /usr/bin/find: AVERTISSEMENT: lien direct (hard link) est erroné pour /var/lib/vz/root/1/proc/sys/net: cela est peut-être dû à une anomalie dans le pilote du système de fichiersé L’option -noleaf est automatiquement activée. Les résultats antérieurs peuvent avoir échoués à inclure des répertoires qui auraient dû être recherchés.
    /usr/bin/find: /var/lib/vz/root/1/proc/14119: Aucun fichier ou répertoire de ce type
    /usr/bin/find: /var/lib/vz/root/1/proc/14135: Aucun fichier ou répertoire de ce type
    /usr/bin/find: /var/lib/vz/root/1/proc/14147: Aucun fichier ou répertoire de ce type

    … Donc pas de resolution de dns et une errreure curieuse.

    pouriez vous m’expliquez ce que je rate?

    Je met le fichier de conf ici:

    cat /etc/vz/conf/1.conf
    # Copyright (C) 2000-2007 SWsoft. All rights reserved.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    #

    ONBOOT= »yes »

    # UBC parameters (in form of barrier:limit)
    KMEMSIZE= »11055923:11377049″
    LOCKEDPAGES= »256:256″
    PRIVVMPAGES= »65536:69632″
    SHMPAGES= »21504:21504″
    NUMPROC= »240:240″
    PHYSPAGES= »0:2147483647″
    VMGUARPAGES= »33792:2147483647″
    OOMGUARPAGES= »26112:2147483647″
    NUMTCPSOCK= »360:360″
    NUMFLOCK= »188:206″
    NUMPTY= »16:16″
    NUMSIGINFO= »256:256″
    TCPSNDBUF= »1720320:2703360″
    TCPRCVBUF= »1720320:2703360″
    OTHERSOCKBUF= »1126080:2097152″
    DGRAMRCVBUF= »262144:262144″
    NUMOTHERSOCK= »360:360″
    DCACHESIZE= »3409920:3624960″
    NUMFILE= »9312:9312″
    AVNUMPROC= »180:180″
    NUMIPTENT= »128:128″

    # Disk quota parameters (in form of softlimit:hardlimit)
    DISKSPACE= »1048576:1153024″
    DISKINODES= »200000:220000″
    QUOTATIME= »0″

    # CPU fair sheduler parameter
    CPUUNITS= »1000″

    GATEWAY= »90.27.173.1″
    IP_ADDRESS= »192.168.1.200″
    HOSTNAME= »debianvz »
    VE_ROOT= »/var/lib/vz/root/$VEID »
    VE_PRIVATE= »/var/lib/vz/private/$VEID »
    OSTEMPLATE= »debian-4.0-i386-minimal »
    ORIGIN_SAMPLE= »vps.basic »
    NAMESERVER= »208.67.222.222-208.67.220.220″

    cat /etc/vz/conf/1.conf
    # Copyright (C) 2000-2007 SWsoft. All rights reserved.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    #

    ONBOOT= »yes »

    # UBC parameters (in form of barrier:limit)
    KMEMSIZE= »11055923:11377049″
    LOCKEDPAGES= »256:256″
    PRIVVMPAGES= »65536:69632″
    SHMPAGES= »21504:21504″
    NUMPROC= »240:240″
    PHYSPAGES= »0:2147483647″
    VMGUARPAGES= »33792:2147483647″
    OOMGUARPAGES= »26112:2147483647″
    NUMTCPSOCK= »360:360″
    NUMFLOCK= »188:206″
    NUMPTY= »16:16″
    NUMSIGINFO= »256:256″
    TCPSNDBUF= »1720320:2703360″
    TCPRCVBUF= »1720320:2703360″
    OTHERSOCKBUF= »1126080:2097152″
    DGRAMRCVBUF= »262144:262144″
    NUMOTHERSOCK= »360:360″
    DCACHESIZE= »3409920:3624960″
    NUMFILE= »9312:9312″
    AVNUMPROC= »180:180″
    NUMIPTENT= »128:128″

    # Disk quota parameters (in form of softlimit:hardlimit)
    DISKSPACE= »1048576:1153024″
    DISKINODES= »200000:220000″
    QUOTATIME= »0″

    # CPU fair sheduler parameter
    CPUUNITS= »1000″

    GATEWAY= »90.27.173.1″
    IP_ADDRESS= »192.168.1.200″
    HOSTNAME= »debianvz »
    VE_ROOT= »/var/lib/vz/root/$VEID »
    VE_PRIVATE= »/var/lib/vz/private/$VEID »
    OSTEMPLATE= »debian-4.0-i386-minimal »
    ORIGIN_SAMPLE= »vps.basic »
    NAMESERVER= »208.67.222.222-208.67.220.220″

    Voila… par avance merci.

  5. Sans t’assurer que c’est la réponse à ton problème, quelques remarques :

    - la bonne syntaxe pour spécifier plusieurs DNS est la suivante (je corrige ta ligne) :

    vzctl set 1 –nameserver « 208.67.222.222 208.67.220.220″ –save

    Ces paramètres permettent à openvz de générer correctement le fichier /etc/resolv.conf du serveur virtuel, au moment ou ce dernier est démarré. Tu peux vérifier qu’il est correctement généré après le démarrage. Tu devrais obtenir :
    nameserver 208.67.222.222
    nameserver 208.67.220.220

    - quand la configuration réseau de ton serveur virtuel est de type venet, tu n’as pas a spécifier de passerelle. C’est le serveur physique qui route les paquets. As tu bien configuré la passerelle sur le serveur physique ? Si, en revanche, tu as besoin qu’un serveur virtuel utilise une passerelle différente de celle paramétrée sur le serveur physique, oriente toi vers une configuration réseau de type veth.

    - tu peux ignorer le problème que te rapporte la commande updatedb, c’est normal. le mieux serait de demander à updatedb de ne pas indéxer le répertoire /var/lib/vz/root.

  6. Bonjour et merci de vos réponses!

    La syntaxe que vous proposez ne fonctionne pas (pour info):

    debian:/# vzctl set 1 –nameserver “208.67.222.222 208.67.220.220″ –save
    non-option ARGV-elements: –nameserver “208.67.222.222 208.67.220.220″ –save

    Ici ce sont les – qui se sont transformé en –

    Aprés rectification:
    debian:/# vzctl set 1 –nameserver “208.67.222.222 208.67.220.220″ –save
    non-option ARGV-elements: 208.67.220.220″

    La commande don je me sers:
    debian:/# vzctl set 1 –nameserver “208.67.222.222-208.67.220.220″ –save
    File resolv.conf was modified
    Saved parameters for VE 1

    Dela je regarde dans le conf sur le serveur physique:

    debian:/# cat /etc/vz/conf/1.conf
    # Copyright (C) 2000-2007 SWsoft. All rights reserved.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    #

    ONBOOT= »yes »

    # UBC parameters (in form of barrier:limit)
    KMEMSIZE= »11055923:11377049″
    LOCKEDPAGES= »256:256″
    PRIVVMPAGES= »65536:69632″
    SHMPAGES= »21504:21504″
    NUMPROC= »240:240″
    PHYSPAGES= »0:2147483647″
    VMGUARPAGES= »33792:2147483647″
    OOMGUARPAGES= »26112:2147483647″
    NUMTCPSOCK= »360:360″
    NUMFLOCK= »188:206″
    NUMPTY= »16:16″
    NUMSIGINFO= »256:256″
    TCPSNDBUF= »1720320:2703360″
    TCPRCVBUF= »1720320:2703360″
    OTHERSOCKBUF= »1126080:2097152″
    DGRAMRCVBUF= »262144:262144″
    NUMOTHERSOCK= »360:360″
    DCACHESIZE= »3409920:3624960″
    NUMFILE= »9312:9312″
    AVNUMPROC= »180:180″
    NUMIPTENT= »128:128″

    # Disk quota parameters (in form of softlimit:hardlimit)
    DISKSPACE= »1048576:1153024″
    DISKINODES= »200000:220000″
    QUOTATIME= »0″

    # CPU fair sheduler parameter
    CPUUNITS= »1000″

    GATEWAY= »90.27.173.1″
    IP_ADDRESS= »192.168.1.200″
    HOSTNAME= »debianvz »
    VE_ROOT= »/var/lib/vz/root/$VEID »
    VE_PRIVATE= »/var/lib/vz/private/$VEID »
    OSTEMPLATE= »debian-4.0-i386-minimal »
    ORIGIN_SAMPLE= »vps.basic »
    NAMESERVER= »“208.67.222.222-208.67.220.220″ »

    **********************************************

    Bon c’est un peu bizzare ces caractéres je vais sur le serveur virtuel voie la tête du conf:

    debianvz:/# more /etc/resolv.conf
    search mondomaine.fr
    nameserver “208.67.222.222-208.67.220.220″

    Donc là effectivement ce n’est pas comme vous me dites… Puis je éditer le resolv.conf sur le serveur virtuel directement?

    Dans l’espoir quand même que cela fonctionne je tante l’installation de apache2:

    debianvz:/# apt-get install apache2
    Reading package lists… Done
    Building dependency tree… Done
    The following extra packages will be installed:
    apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1
    libexpat1 libmagic1 libpcre3 libpq4 libsqlite3-0 mime-support
    Suggested packages:
    file
    The following NEW packages will be installed:
    apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1
    libaprutil1 libexpat1 libmagic1 libpcre3 libpq4 libsqlite3-0 mime-support
    0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
    Need to get 2403kB/2907kB of archives.
    After unpacking 8627kB of additional disk space will be used.
    Do you want to continue [Y/n]? y
    Err http://ftp.se.debian.org etch/main libmagic1 4.17-5etch1
    Temporary failure resolving ‘ftp.se.debian.org’
    Err http://ftp.se.debian.org etch/main libpcre3 6.7-1
    Temporary failure resolving ‘ftp.se.debian.org’
    etc etc…

    Un peu dérouté je fais un ping sur un autre serveur sur mon reseau local (toujours à partir du serveur virtuel):

    debianvz:/# ping 192.168.1.118
    PING 192.168.1.118 (192.168.1.118) 56(84) bytes of data.
    64 bytes from 192.168.1.118: icmp_seq=1 ttl=63 time=343 ms
    64 bytes from 192.168.1.118: icmp_seq=2 ttl=63 time=0.229 ms

    — 192.168.1.118 ping statistics —
    2 packets transmitted, 2 received, 0% packet loss, time 999ms
    rtt min/avg/max/mdev = 0.229/171.730/343.232/171.502 ms

    ça marche…

    Je me met sur mon serveur qui est en 192.168.1.118 et je ping le serveur virtuel qui est en 192.168.1.200:

    mathieu@lotus:/$ ping 192.168.1.200
    PING 192.168.1.200 (192.168.1.200) 56(84) bytes of data.
    64 bytes from 192.168.1.200: icmp_seq=1 ttl=64 time=0.307 ms
    64 bytes from 192.168.1.200: icmp_seq=2 ttl=64 time=1.26 ms
    64 bytes from 192.168.1.200: icmp_seq=3 ttl=64 time=0.208 ms

    — 192.168.1.200 ping statistics —
    3 packets transmitted, 3 received, 0% packet loss, time 1999ms
    rtt min/avg/max/mdev = 0.208/0.593/1.265/0.477 ms

    ça marche…

    Je retourne sur le serveur virtuel je ping l’ip de google et ça marche par contre quand je ping google.com ça ne marche pas…..

    Là vraiment je séche…

    Bon quand vous dites:
    As tu bien configuré la passerelle sur le serveur physique ?

    Le serveur physique est en dhcp et tout fonctionne dessus je n’ai rien configuré de spéciale ça c’est fait tout seul à l’installation de la debian il a détecté le dhcp et zou.

    Aurai je raté une étape à ce niveau là?..

    Au final je voudrai que le serveur virtuel soit un serveur web et y mettre un service webdav dessus.

    Encore une fois merci pour votre aide!

  7. Je n’avais pas remarqué que wordpress avait modifié des caractères après ma saisie, désolé.

    La bonne syntaxe est celle ci (je mets dans un style « code » ce coup ci) :

    vzctl set 1 --nameserver "208.67.222.222 208.67.220.220" --save

    Et pour ce qui est de modifier manuellement le fichier /etc/resolv.conf du serveur virtuel, tu peux le faire quand le serveur est démarré, mais il sera écrasé à nouveau au prochain démarrage du serveur par vzctl start, donc tu peux te dépanner momentanément, mais ça n’est pas une solution.

  8. salut j’ai continué à rtfm et j’ai trouvé:

    vzctl set 1 –nameserver 81.253.149.9 –nameserver 80.10.246.132 –save
    File resolv.conf was modified
    Saved parameters for VE 1

    lut sur le wiki:
    vzctl set –nameserver IP1 –nameserver IP2
    –nameserver … –save

    http://wiki.openvz.org/Proxmox_Mail_Gateway_in_container

    Voila ça marche!!!!! ;-)
    Merci pour ta réponse ultra rapide!

  9. On m’a récemment soufflé dans l’oreillette que les numéros de VEID jusqu’à 100 sont réservés par OpenVZ.

    Cette information est effectivement discrètement présente sur le site d’OpenVZ.

    Bien que ça puisse fonctionner, il est donc préférable de n’utiliser que des numéros à partir de 101 pour ne pas rencontrer de problème.

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>