OpenVz et Debian
http://www.deimos.fr/blocnotesinfo/index.php?title=OpenVZ_:_Mise_en_place_d%27OpenVZ
OpenVZ : Mise en place d’OpenVZ
De Bloc Notes Informatique.
Sommaire[masquer] |
1 Introduction
OpenVZ est une technologie de virtualisation de niveau système d’exploitation basée sur le noyau Linux. OpenVZ permet à un serveur physique d’exécuter de multiples instances de systèmes d’exploitation isolés, connus sous le nom de serveurs privés virtuels (VPS) ou environnements virtuels (VE).
En comparaison aux machines virtuelles telles que VMware et aux technologies de paravirtualisation telles que Xen, OpenVZ offre moins de flexibilité dans le choix du système d’exploitation : le système d’exploitation invité et hôte doivent être de type Linux (bien que les distributions de Linux peuvent être différentes dans des VEs différents). Cependant, la virtualisation au niveau OS d’OpenVZ offre une meilleure performance, une meilleure scalabilité (i.e. évolution), une meilleure densité, une meilleure gestion de ressource dynamique, et une meilleure facilité d’administration que ses alternatives. Selon le site Web d’OpenVZ, cette méthode de virtualisation introduirait une très faible pénalité sur les performances : 1 à 3% de pertes seulement par rapport à un ordinateur physique.
OpenVZ est la base de Virtuozzo, un produit propriétaire fourni par SWsoft, Inc. OpenVZ est distribué sous la Licence publique générale GNU version 2.
OpenVZ comprend le noyau Linux et un jeu de commandes utilisateurs.
2 Installation
Pour installer OpenVZ, c’est toujours aussi simple sur debian :
Command : aptitude |
aptitude install vzquota vzctl linux-image-2.6-openvz-amd64 linux-image-openvz-amd64 linux-headers-2.6-openvz-amd64 debootstrap |
Nous allons également éditer les sysctl pour ajouter ceci :
Config File : /etc/sysctl.conf |
# 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 net.ipv4.ip_forward=1 # 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 |
Et on va activer ce dont nous avons besoin :
Command : |
sysctl -p |
3 Configuration
3.1 Préparation des environnements
Vous avez la possibilité de créer vos environnements de 2 manières :
- Par debootstrap
- Par template
Les 2 solutions se valent. La plus rapide étant le template car elle doit se trouver sur votre machine.
Personnellement, j’ai utilisé longtemps la template. Puis récemment, j’ai du passer mon serveur en Squeeze (actuellement en testing) et aucunes templates n’existaient. J’ai donc opté pour la version debootstrap.
3.1.1 Debootstrap
Vous allez voir que c’est très simple. Pour créer un VE, nous allons donc utiliser la méthode debootstrap. Voici la liste des distributions disponibles :
Command : ls |
> ls /usr/share/debootstrap/scripts/ breezy edgy etch-m68k gutsy hoary intrepid karmic lucid potato sarge.buildd sid stable unstable warty.buildd woody.buildd dapper etch feisty hardy hoary.buildd jaunty lenny maverick sarge sarge.fakechroot squeeze testing warty woody |
Pour ma part, j’ai choisis Squeeze, donc :
Command : debootstrap |
debootstrap --arch amd64 squeeze /mnt/containers/private/101 |
- –arch : On choisis l’architecture voulue, ici amd64.
- squeeze : le nom de la distrib souhaité
- /mnt/containers/private/101 : l’endroit ou doit être placé mon VE (j’utilise ici l’ID du VE)
3.1.2 Template
Nous n’allons pas créer notre template, mais plutôt en télécharger des déjà existantes à l’adresse suivante : http://wiki.openvz.org/Download/template/precreated et le placer au bon endroit. Pour ma part j’ai modifier le fichier /etc/vz/vz.conf pour modifier les chemins par défaut. Ca pointe donc vers /mnt/containers.
Command : |
cd /mnt/containers/template/cache wget <a rel="nofollow" href="http://download.openvz.org/template/precreated/contrib/debian-5.0-amd64-minimal.tar.gz">http://download.openvz.org/template/precreated/contrib/debian-5.0-amd64-minimal.tar.gz</a> |
3.2 Réseaux
3.2.1 En mode NAT
Si vous avez besoin d’avoir plusieurs VE disponible depuis 1 seule IP et que vous ne pouvez pas avoir d’autres IP directement accessibles, il faudra alors passer en mode naté. C’est notamment le cas si vous possédez une Dedibox (Illiad) ou un serveur Kimsufi (OVH) dont une seule IP WAN est disponible (en standard) pour un serveur donné et qu’il vous est impossible de faire du mode bridgé.
Nous allons donc configurer simplement la partie carte réseaux :
Config File : /etc/network/interfaces |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 88.xx.xx.xx netmask 255.255.255.0 network 88.xx.xx.0 broadcast 88.xx.xx.255 gateway 88.xx.xx.xx |
Jusque là, tout est classique. Seulement nous allons avoir besoin suite à la création d’un VE de faire du masquerading pour la possibilité d’avoir Internet depuis les VE et du PREROUTING pour tout ce qui est redirection. Nous utiliserons donc ici IPtables qui nous donnera accès à l’extérieur depuis les VE et dont les redirections de ports seront possible depuis l’extérieur vers les VE :
Config File : /etc/init.d/iptables |
|
Ici j’ai le port 80 et 443 qui sont redirigés vers une machine (Ed).
3.2.2 Avec une interface bridgée
Le gros intérêt de l’interface venet, c’est que ça permet à l’administrateur du serveur physique de décider de la configuration réseau de la machine virtuelle. C’est particulièrement appréciable pour un hébergeur qui souhaite vendre un service d’hébergement de machines virtuelles, car il peut librement laisser ses clients administrer leur serveur virtuel OpenVZ tout en étant certain qu’ils ne pourront pas perturber le réseau, s’attribuer davantage d’adresses IP que prévu, bidouiller les tables de routage, etc. Si vous utilisez OpenVZ pour fournir des services d’hébergement à vos clients, l’interface veth n’est pas faite pour vous. Je ne suis pas dans ce cas de figure, donc les potentiels problèmes de sécurité que peuvent poser l’interface veth pour un hébergeur ne me concernent pas.
J’utilise à la fois venet et veth sur les serveurs que j’administre : veth lorsque j’ai besoin d’avoir un accès aux couches ethernet depuis les serveurs virtuels, et venet dans tous les autres cas. Mais, contrairement à la simplicité offerte par les interfaces venet, pour pouvoir utiliser une interface veth dans un serveur virtuel, il faut faire quelques opérations de configuration complémentaires pour préparer le serveur physique à recevoir des serveurs virtuels utilisant veth. C’est ce que je vais décrire dans les sections suivantes.
Nous allons donc installer le nécessaire :
Command : apt-get |
apt-get install bridge-utils |
Puis créer une configuration type :
Config File : /etc/network/interfaces |
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto vmbr0 iface vmbr0 inet static bridge_ports eth0 address 192.168.1.216 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.254 |
Rebootez ensuite le serveur.
Afin qu’au lancement d’un serveur virtuel OpenVZ ajoute ou retire dynamiquement une interface veth au bridge, il faut créer quelques fichiers sur le serveur physique. Cette opération est à faire une bonne fois pour toutes sur le serveur physique, indépendamment du nombre de serveurs virtuels qui seront créés par la suite. Il est également possible de la faire sur un serveur qui, au final, n’héberge que des serveurs virtuels utilisant des interfaces venet, cela ne perturbe en rien ces derniers.
D’abord, il faut créer le fichier /etc/vz/vznet.conf, avec le contenu suivant :
Config File : /etc/vz/vznet.conf |
#!/bin/bash EXTERNAL_SCRIPT="/usr/sbin/vznetaddbr" |
puis le fichier /usr/sbin/vznetaddbr, avec le contenu suivant :
Config File : /usr/sbin/vznetaddbr |
#!/bin/sh # # Add virtual network interfaces (veth's) in a container to a bridge on CT0 CONFIGFILE=/etc/vz/conf/$VEID.conf . $CONFIGFILE NETIFLIST=$(printf %s "$NETIF" |tr ';' '\n') if [ -z "$NETIFLIST" ]; then echo >&2 "According to $CONFIGFILE, CT$VEID has no veth interface configured." exit 1 fi for iface in $NETIFLIST; do bridge= host_ifname= for str in $(printf %s "$iface" |tr ',' '\n'); do case "$str" in bridge=*|host_ifname=*) eval "${str%%=*}=\${str#*=}" ;; esac done [ "$host_ifname" = "$3" ] || continue [ -n "$bridge" ] || bridge=vmbr0 echo "Adding interface $host_ifname to bridge $bridge on CT0 for CT$VEID" ip link set dev "$host_ifname" up echo 1 >"/proc/sys/net/ipv4/conf/$host_ifname/proxy_arp" echo 1 >"/proc/sys/net/ipv4/conf/$host_ifname/forwarding" brctl addif "$bridge" "$host_ifname" break done exit 0 |
Pour info, j’ai modifier la ligne contenant « bridge= » avec mon interface vmbr0.
Il faut également associer le droit d’exécution à ce fichier en tapant la commande :
Command : chmod |
chmod 0500 /usr/sbin/vznetaddbr |
On va maintenant configurer la VE (voir également plus bas comment manager une VE) :
Command : vzctl |
vzctl set $my_veid --netif_add eth0 --save |
Et enfin éditez votre configuration de machine et ajoutez l’interface bridge pour celui ci :
Config File : /etc/vz/conf/$VEID.conf |
CONFIG_CUSTOMIZED="yes" VZHOSTBR="vmbr0" |
La fin de config du fichier de conf doit au final ressembler à ceci :
Config File : /etc/vz/conf/$VEID.conf |
... OSTEMPLATE="debian-5.0-amd64-minimal" ORIGIN_SAMPLE="vps.basic" HOSTNAME="vz.deimos.fr" CONFIG_CUSTOMIZED="yes" VZHOSTBR="vmbr0" IP_ADDRESS="" NAMESERVER="192.168.100.3" CAPABILITY="SYS_TIME:on " NETIF="ifname=eth0,mac=00:18:51:96:D4:8D,host_ifname=veth101.0,host_mac=00:18:51:B8:B8:CF" |
Maintenant, il suffit de configurer l’interface eth0 comme vous avez l’habitude de faire sur votre VE.
3.2.3 Avec des vlans
Vous pouvez avoir besoin de créer des vlan dans vos VE. Ca fonctionne même très bien avec une interface bridgée. Pour se faire, sur la machine host, vous devez avoir un vlan de configuré (pour la mise en place, utilisez cette documentation). Pour ceux qui souhaitent quand même un exemple :
Config File : /etc/network/interfaces |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet manual # The bridged interface auto vmbr0 iface vmbr0 inet static address 192.168.100.1 netmask 255.255.255.0 gateway 192.168.100.254 broadcast 192.168.100.255 network 192.168.100.0 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off # The DMZ Vlan 110 auto vmbr0.110 iface vmbr0.110 inet static address 192.168.110.1 netmask 255.255.255.0 broadcast 192.168.110.255 vlan_raw_device vmbr0 |
Cet exemple est fait avec une interface bridgée car j’ai du KVM qui tourne dessus, mais rien ne vous oblige à ce qu’elle le soit.
Ensuite, lorsque vous créez votre VE, vous n’avez rien de plus à faire lors de la création de votre interface réseau pour votre VE. Lancez ensuite la création de votre VE et n’oubliez pas d’installer le package « vlan » pour pouvoir créer un accès vlan au sein même de votre VE. Voici encore une fois de quoi vous donner une idée de la conf réseau du VE :
Config File : /etc/vz/conf/VEID.conf |
... CONFIG_CUSTOMIZED="yes" VZHOSTBR="vmbr0" IP_ADDRESS="" NETIF="ifname=eth0,mac=00:18:50:FE:EF:0B,host_ifname=veth101.0,host_mac=00:18:50:07:B8:F4" |
Pour la conf du VE, c’est preque identique que pour la machine host, il va falloir créer une interface vlan sur l’interface principale (pas besoin encore une fois d’avoir l’interface principale de configurée, seulement la vlan suffit). Pour les plus perplexes, voici un exemple de configuration dans un VE :
Config File : /etc/network/interfaces |
# This configuration file is auto-generated. # WARNING: Do not edit this file, your changes will be lost. # Please create/edit /etc/network/interfaces.head and /etc/network/interfaces.tail instead, # their contents will be inserted at the beginning and at the end # of this file, respectively. # # NOTE: it is NOT guaranteed that the contents of /etc/network/interfaces.tail # will be at the very end of this file. # Auto generated lo interface auto lo iface lo inet loopback # VE interface auto eth0 iface eth0 inet manual # VLAN 110 interface auto eth0.110 iface eth0.110 inet static address 192.168.110.2 netmask 255.255.255.0 gateway 192.168.110.254 broadcast 192.168.110.255 vlan_raw_device eth0 |
3.2.4 Avec du Bonding
Vous pouvez avoir besoin de créer du bonding bridgé dans vos VE. Pour se faire, sur la machine host, vous devez avoir un bonding de configuré (pour la mise en place, utilisez cette documentation). Pour ceux qui souhaitent quand même un exemple :
Config File : /etc/network/interfaces |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo eth0 eth1 iface lo inet loopback iface eth0 inet manual iface eth1 inet manual auto bond0 iface bond0 inet manual slaves eth0 eth1 bond_mode active-backup bond_miimon 100 bond_downdelay 200 bond_updelay 200 auto vmbr0 iface vmbr0 inet static address 192.168.0.227 netmask 255.255.255.0 network 192.168.0.0 gateway 192.168.0.245 bridge_ports bond0 |
3.3 NFS
Je n’aborderais ici que le côté client dans un VE, pas d’un serveur dans un VE.
3.3.1 Serveur
Tout d’abord côté serveur, montez votre serveur NFS en suivant cette documentation.
Puis nous allons installer ceci qui va nous permettre d’utiliser non seulement le protocole v3 d’NFS, mais en plus de pouvoir faire abstraction de la couche kernel (pratique en cas de crash) :
Command : aptitude |
aptitude install nfs-user-server |
3.3.2 Client
- Sur la machine hôte (HN), ajoutez ces lignes dans sysctl.conf :
Config File : /etc/sysctl.conf |
... # OpenVZ NFS Client sunrpc.ve_allow_rpc = 1 fs.nfs.ve_allow_nfs = 1 kernel.ve_allow_kthreads = 1 |
Puis on applique tout ça à chaud :
Command : sysctl |
sysctl -p |
Activons maintenant le NFS sur les VE qui nous intéressent :
Command : vzctl |
vzctl set $my_veid --features "nfs:on" --save |
Je ne sais pas si cette étape est indispensable, mais dans le doute, je l’ajoute quand même :
Command : aptitude |
aptitude install nfs-user-server |
Ensuite, vous pouvez monter normalement vos points de montage NFS. Il est cependant possible que vous rencontriez quelques soucis. C’est pour quoi sur le serveur, je vous conseil de rajouter l’option ‘no_root_squash’ dans le fichier export :
Config File : /etc/export |
/mnt/backups/backups 192.168.0.127(rw,no_root_squash) |
Et sur le client, ajoutez l’option nolock pour monter le NFS :
Command : mount |
mount -t nfs -o nolock @IP:/mon/partage mon_point_de_montage |
3.4 Mount Bind
Les mount bind peuvent être parfois très pratiques. Voilà comment faire :
3.4.1 Mount script
Créez un script dans /etc/vz/conf/vps.mount pour tous les VE ou /etc/vz/conf/CTID.mount pour un VE en particulier (remplacer CITD par le numéro du VE) :
Config File : /etc/vz/conf/101.mount |
#!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} mount --bind /mnt/disk ${VE_ROOT}/mnt/disk |
Et adaptez la dernière ligne avec vos besoins.
3.4.2 Unmount script
Et enfin la même chose pour le script du démontage, donc /etc/vz/conf/vps.umount ou /etc/vz/conf/CTID.umount :
Config File : /etc/vz/conf/101.umount |
#!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} umount ${VE_ROOT}/mnt/disk exit 0 |
Et enfin on applique les droits qu’il faut pour que ce soit exécutable :
Command : chmod |
chmod u+x /etc/vz/conf/CTID.mount /etc/vz/conf/CTID.umount |
4 Management
4.1 Créer un VE
Choisissez la méthode voulu en fonction de la méthode de création de la VM que vous souhaitez (template ou debootstrap).
4.1.1 Template
Pour créer un container, utilisez cette commande :
Command : vzctl |
my_veid=101 vzctl create $my_veid --ostemplate debian-5.0-amd64-minimal --config vps.basic vzctl set $my_veid --onboot yes --save vzctl set $my_veid --hostname nagios.mycompany.com --save vzctl set $my_veid --ipadd 192.168.0.130 --save vzctl set $my_veid --nameserver 192.168.0.27 --save |
Si vous voulez configurer vos interfaces en mode bridgé, n’oubliez pas cette partie.
4.1.2 Debootstrap
A l’époque ou j’écris ces lignes, Squeeze n’est pas encore la version stable, mais vient (aujourd’hui même de freezer pour être stable). Il y a donc quelques petits trucs qui peuvent varier comme ceci qu’il va falloir créer :
Command : cp |
cp /etc/vz/conf/ve-basic.conf-sample /etc/vz/conf/ve-vps.basic.conf-sample |
Nous copions donc ici les paramètres par défaut d’un VE vers un nouveau nom qu’il sera capable de prendre par défaut. Lançons donc sa configuration :
Command : vzctl |
> my_veid=101 > vzctl set $my_veid --applyconfig vps.basic --save WARNING: /etc/vz/conf/101.conf not found: No such file or directory Saved parameters for CT 101 |
Ensuite nous rajoutons quelques lignes supplémentaires nécessaire dans notre fichier de configuration :
Command : |
echo "OSTEMPLATE=debian" >> /etc/vz/conf/$my_veid.conf |
Puis on configure les paramètres réseaux :
Command : vzctl |
vzctl set $my_veid --ipadd 192.168.0.130 --save vzctl set $my_veid --nameserver 192.168.0.27 --save |
Ensuite nous allons supprimer udev qui peut empêcher la VM de booter :
Command : rm |
rm /mnt/containers/private/101/etc/rcS.d/S02udev |
Puis nous allons démarrer le VE et entrer dedans :
Command : vzctl |
vzctl start $my_veid vzctl enter $my_veid |
Renseignez votre fichier source.list :
Config File : /etc/apt/source.list |
deb http://ftp.fr.debian.org/debian/ squeeze main non-free contrib deb-src http://ftp.fr.debian.org/debian/ squeeze main non-free contrib deb http://security.debian.org/ squeeze/updates main contrib non-free deb-src http://security.debian.org/ squeeze/updates main contrib non-free |
Puis, lancez ces commandes pour supprimer le superflu et supprimer les gettys (les VEs n’en n’utilisent pas) :
Command : |
sed -i -e '/getty/d' /etc/inittab rm -Rf /lib/udev/ |
Nous résolvons le problème de mtab :
Command : |
rm -f /etc/mtab ln -s /proc/mounts /etc/mtab |
4.2 Démarrer un VE
Maintenant vous pouvez démarrer votre VE :
Command : vzctl |
vzctl start 101 |
4.3 Changer le mot de passe root d’un VE
Si vous souhaitez changer le mot de passe root :
Command : vzctl |
vzctl exec 101 passwd |
4.4 Lister les VE
Pour lister vos VE, utilisez la commande vzlist :
Command : vzlist |
$ vzlist VEID NPROC STATUS IP_ADDR HOSTNAME 101 8 running 192.168.0.130 nagios.mycompany.com |
4.5 Stopper un VE
Pour arrêter noter VE :
Command : vzctl |
vzctl stop 101 Stopping container ... Container was stopped Container is unmounted |
4.6 Redémarrer un VE
Pour redémarrer un VE :
Command : vzctl |
$ vzctl restart 101 Restarting VE Stopping VE ... VE was stopped VE is unmounted Starting VE ... VE is mounted Adding IP address(es): 192.168.0.130 Setting CPU units: 1000 Configure meminfo: 500000 Set hostname: nagios.mycompany.com File resolv.conf was modified VE start in progress... |
4.7 Détruire un VE
Pour supprimer définitivement un VE :
Command : vzctl |
$ vzctl destroy 101 Destroying container private area: /vz/private/101 Container private area was destroyed |
4.8 Entrer dans un VE
Command : vzctl |
$ vzctl enter 101 entered into VE 101 |
4.9 Limites de VE
Par défaut il y a des limites que les VE ne peuvent passer. Nous allons voir comment les gérer ici. Si vous souhaitez tout de même aller encore plus loin, sachez qu’il y a tout d’expliquer sur le site officiel http://wiki.openvz.org/User_beancounters.
4.9.1 Lister les limites
Pour lister les limites, nous allons exécuter cette commande :
Command : vctl |
$ vzctl exec 101 cat /proc/user_beancounters Version: 2.5 uid resource held maxheld barrier limit failcnt 101: kmemsize 1301153 3963508 14372700 14790164 0 lockedpages 0 8 256 256 0 privvmpages 8987 49706 65536 69632 0 shmpages 640 656 21504 21504 0 dummy 0 0 0 0 0 numproc 9 21 240 240 0 physpages 1786 27164 0 9223372036854775807 0 vmguarpages 0 0 33792 9223372036854775807 0 oomguarpages 1786 27164 26112 9223372036854775807 0 numtcpsock 3 6 360 360 0 numflock 1 7 188 206 0 numpty 1 2 16 16 0 numsiginfo 0 2 256 256 0 tcpsndbuf 106952 106952 1720320 2703360 0 tcprcvbuf 49152 1512000 1720320 2703360 0 othersockbuf 0 21008 1126080 2097152 0 dgramrcvbuf 0 5648 262144 262144 0 numothersock 25 29 360 360 0 dcachesize 115497 191165 3409920 3624960 0 numfile 234 500 9312 9312 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 dummy 0 0 0 0 0 numiptent 10 10 128 128 0 |
Il faut que la dernière ligne soit toujours à 0, sinon c’est que clairement vous avez atteint les limites.
Voici quelques informations importantes :
- held : Actuellement la valeur de la ressource
- maxheld : la valeur maximum que la ressource a atteind
- barrier : la limite soft (avertissement). Ca signifie que la valeur held a déjà été jusqu’à cette valeur
- limit : la milite hard. La valeur held ne pourra jamais dépasser cette valeur.
Pour les augmenter, limites vous avez 2 solutions :
- Vous pouvez le faire à la volée.
- Allez dans /etc/vz/conf/101.conf et augmentez les valeurs qui posent problème. Malheureusement, cela nécessite un redémarrage du VE pour que ces paramètres soient prit en compte.
Il est possible que le failcnt ne soit pas réinitialiser à 0…pas d’inquiétude, il se fera plus tard.
4.9.2 Maximiser les limites
Si vous avez trop de restrictions par rapport à vos besoins ou que vous sentez que le VE que vous allez créer va être lourde, maximisez dès le départ ceci :
Command : vzsplit |
vzsplit -n <strong>2</strong> -f max-limits |
- 2 : changez ce numéro par le nombre de VM que vous voulez faire tourner sur votre machine et il se chargera de calculer au mieux les limites pour votre VE
Un fichier /etc/vz/conf/ve-max-limits.conf-sample. Vous pouvez l’éditer à tout moment et faire les modifications que vous souhaitez. Si vous voulez l’appliquer à un VE :
Command : vzctl |
vzctl set <strong>101</strong> --applyconfig <strong>max-limits</strong> --save |
Le VE 101 a maintenant une nouvelle configuration via la config ‘max-limits’.
4.9.3 Appliquer des limites à la volée
Par exemple, vous souhaitez changer la taille de la RAM à la volée :
Command : vzctl |
vzctl set 101 --privvmpages <strong>786432:1048576</strong> --save <strong>--setmod restart</strong> |
- 786432 : correspondant à la limite soft (barrier)
- 1048576 : correspondant à la limite hard (limit)
Grâce au ‘setmod restart’, je peux maintenant appliquer des limites à la volée.
4.9.4 Quotas disques
Vous avez peut être mis des quotas disque et vous arrivez à 100% de votre disque VE. Pas de soucis, on augmente le quota à chaud :
Command : vzctl |
vzctl set 101 --diskspace 14G:15G --save |
Si vous ne voulez pas de quota, ajoutez cette ligne dans la configuration du VE :
Config File : /etc/vz/conf/VEID.conf |
DISK_QUOTA=no |
4.9.5 Limiter le CPU
Si vous souhaitez limiter le CPU, il y a plusieurs façons d’y arriver. Soit vous jouez avec le scheduler, sois vous appliquez un pourcentage. Pour des usages basique la deuxième solution vous conviendra :
Command : vzctl |
> vzctl set 102 --cpulimit 80 --save --setmod restart Setting CPU limit: 80 Saved parameters for CT 102 |
Par exemple ici j’ai limiter mon VE 102 à 80% de CPU. Pour plus d’infos : http://wiki.openvz.org/Resource_shortage
5 Services
Il peut arriver que certains services aient quelques problèmes à fonctionner correctement (toujours les mêmes). C’est pourquoi je vais donner les solutions de ceux que j’ai pu rencontrer.
5.1 NTP
Pour le service ntp, il suffit donc de configurer le VE comme ceci :
Command : vzctl |
vzctl set 101 --capability sys_time:on --save |
5.2 GlusterFS
Si vous souhaitez faire du glusterfs dans un VE, vous risquez de vous heurter à des problèmes de droit:
fuse: failed to open /dev/fuse: Permission denied
Pour les contourner on va donc créer le device fuse depuis l’host sur le VE en question et lui rajouter les droits d’admin (un peu moyen en terme de sécu, mais pas le choix) :
Command : |
vzctl set $my_veid --devices c:10:229:rw --save vzctl exec $my_veid mknod /dev/fuse c 10 229 vzctl set $my_veid --capability sys_admin:on --save |
5.3 Encfs
Si vous souhaitez faire de l’encfs dans un VE, vous risquez de vous heurter à des problèmes de droit:
EncFS Password: fuse: device not found, try 'modprobe fuse' first fuse failed. Common problems: - fuse kernel module not installed (modprobe fuse) - invalid options -- see usage message
Sachez donc qu’il faut déjà au niveau du VZ charger le module fuse pour que les VE en héritent. Ajoutez ceci sur votre VZ pour ne pas avoir à charger le module à chaque boot :
Config File : /etc/modules |
... # Load Fuse fuse ... |
Puis chargez le dynamiquement pour y avoir accès ensuite :
Command : modprobe |
modprobe fuse |
Pour les contourner on va donc créer le device fuse depuis l’host sur le VE en question et lui rajouter les droits d’admin (un peu moyen en terme de sécu, mais pas le choix) :
Command : |
vzctl set $my_veid --devices c:10:229:rw --save vzctl exec $my_veid mknod /dev/fuse c 10 229 vzctl set $my_veid --capability sys_admin:on --save |
Il est possible que la deuxième ligne ne fonctionne pas quand le VE est éteint. Lancez là alors une fois allumée puis montez votre partition encfs.
5.4 OpenVPN
Si vous souhaitez faire fonctionner un serveur OpenVPN dans un VE, ajoutez ce type de droits et créez les devices nécessaires :
Command : |
vzctl set $my_veid --devices c:10:200:rw --save vzctl set $my_veid --capability net_admin:on --save vzctl exec $my_veid mkdir -p /dev/net vzctl exec $my_veid mknod /dev/net/tun c 10 200 vzctl exec $my_veid chmod 600 /dev/net/tun vzctl set $my_veid --devnodes net/tun:rw --save |
6 FAQ
6.1 bridge vmbr0 does not exist!
Putain !!! Ah j’en ai chier sur ce truc de merde ! En effet par défaut Debian attribue à vmbr0 le nom de l’interface pour faire du bridge (certainement une nouvelle nomenclature pour Debian 6). J’avais trouvé ce problème à l’installation de mon serveur et puis comme un con j’avais pas noté ! Lorsque vous faites une mise à jour, celà peut ne plus fonctionner (le bridge de vos VMs) car le fichier /usr/sbin/vznetaddbr peut être remplacé. Ce qui lors du lancement d’un ve vous donne quelque chose comme :
Adding interface veth101.0 to bridge vmbr0 on CT0 for CT101 bridge vmbr0 does not exist!
Pour corriger le problème rapidement modifiez ce fichier et remplacer le nom de cette interface par la bonne (ici br0). Pour ma part, j’ai changé le nom de l’interface pour ne plus être ennuyé à l’avenir.