Vous êtes ici : Accueil Zaclys Astuces / Les rubriques / Informatique / Système d'exploitation / Linux / SysAdmin

Voir un article

Virtualisation : isolation avec OpenVZ sur serveur linux (centos / fedora)

Sans doute le meilleur compromis fonctionnalité / performance / souplesse actuellement

OpenVZ est testé ici sur un serveur dédié Centos 6 (vous installerez centos 7 à l'intérieur des CT) avec 32Go de ram, 8 cores cpu et 2To HD raid 1 soft

 

ACTU avril 2015 : problem réseau on container after update ?

 

Introduction et vocabulaire  :

en virtualisation on parle souvent de VM (virtual machine), mais ici en isolation on parle plutot de container (puisque qu'on va lancer des OS de manière isolée dans les containairs, plutôt qu'une totale et + lourde virtualisation de machine)

Les containers sont souvent notés "CT" dans la documentation officielle avec " CT0" qui désigne l'hôte, puis CT1 etc les containers

 

Sommaire :

  1. installation
  2. OS templates
  3. création, tunning et ressources d'un CT
  4. supervision
  5. réseau : adresse ip publique (ip failover) , venet et veth
  6. clock zone et autres réglages du CT
  7. dump et restore
  8. mount transverses : les dossiers paratagés entre vos CT
  9. a connaitre aussi
  10. les hyperviseurs (solusVM , proxmox)
  11. besoin d'un consultant pour vous aider ?
     


1/ installation du noyau modifié openVZ , tune et reboot :


Le principe est simple : on va installer un noyau linux centos modifié qui va être capable de gérer l'isolation des processus de chaque container, mais aussi la gestion des ressources (cpu, ram etc) .  Il faudra donc rebooter la machine sur ce noyau.

Le package OpenVZ va également fournir les commandes "vz" nécessaires pour créer et administrer nos containers.

On installe le serveur hôte sous Centos, mais les containers pourront être indifféremment sous Centos, fedora , debian, ubuntu etc

Créer un dossier ou une partition /vz pour héberger tout cet univers de containers

Si vous voulez désactiver la collecte de statistique qui se fait automatiquement avec remontée vers l'équipe de dvpt d'openVZ :

  • touch /etc/vz/vzstats-disable

Si besoin de conntracking sur iptables il faut le réactiver dans /etc/modprobe.d/openvz.conf depuis openvz 4.7 :

  • options nf_conntrack ip_conntrack_disable_ve0=0

Et pour finir, bien sur , il faut rebooter le serveur pour qu'il boot sur ce kernel openvz (vérifiez éventuellement votre grub.conf avant) :

  • reboot


Pour en savoir plus sur toutes ces étapes :
http://openvz.org/Quick_installation


2/ Installation des OS-templates:

mkdir -p /vz/template/cache
wget -P /vz/template/cache/ http://download.openvz.org/template/precreated/centos-6-x86_64.tar.gz
wget -P /vz/template/cache/ http://download.openvz.org/template/precreated/centos-7-x86_64.tar.gz
wget -P /vz/template/cache/ http://download.openvz.org/template/precreated/fedora-19-x86_64.tar.gz
wget -P /vz/template/cache/ http://download.openvz.org/template/precreated/fedora-20-x86_64.tar.gz


cf http://openvz.org/Download/templates/precreated

 

3/ Création et réglages d'un container  :

  • vzctl create 101 --ostemplate fedora-19-x86_64 --layout=ploop
    (si vous voulez utiliser les snapshots, vzdump etc, je vous recommande le layout ploop plutôt simfs , nécessite une version récente d'openvz, pour en savoir + http://openvz.org/Ploop/Why )
  • vzctl set 101 --hostname vz1 --save
  • vzctl set 101 --onboot yes --save
  • vzctl start 101
     
  • vzctl create 102 --ostemplate centos-7-x86_64 --layout=ploop
  • vzctl set 102 --hostname vz2 --save
  • vzctl start 102
     
  • vzlist -a
          CTID      NPROC STATUS    IP_ADDR         HOSTNAME
           101         18 running   -               vz1
           102         18 running   -               vz2



    En 2 lignes :
     
  • vzctl create 103 --ostemplate centos-7-x86_64 --layout=ploop
  • vzctl set 103 --hostname vz3 --onboot yes --diskspace 6G:7G --ram 2G --swap 2G  --ipadd X.X.X.X --save



test : lancer des commandes dans le container avec vzctl exec :

  • vzctl exec 101 ps ax
  • vzctl exec 101 df -h


Ressources management  :

HD

  • vzctl set 101 --diskspace 6G:7G --save

    on regarde ce que ça donne dans le container  :

    # vzctl exec 101 df -h /
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/simfs      6.0G  580M  5.5G  10% /

     
  • vzctl set 101 --diskinodes 1000000:1500000 --save

    on regarde ce que ça donne dans le container (inutile sur le layout ploop)   :

    # vzctl exec  101 df -i
    Filesystem      Inodes  IUsed   IFree IUse% Mounted on
    /dev/simfs     2000000 194029 1805971   10% /

     

limite d'espace disk soft et hard . immédiatement prise en compte par le filesystem de la vm , comme tous les réglages ! (c'est un des avantages de l'isolation VS la virtualisation) 

http://openvz.org/Resource_shortage#Disk_quota

 

CPU
 

  • vzctl set 101 --cpuunits 1000 --save
  • vzctl set 102 --cpuunits 3000 --save

cpuunit permet de faire un partage de ressource cpu façon nice , dans cet exemple nous donnons 3x plus de ressources cpu au CT 102 qu'au CT 101.
mais ces 2 CT peuvent exploiter 100% des ressources cpu totales de l'hôte (effet burst)
 

  • vzctl set 101 --cpulimit 30%  --save

le % est automatiquement convertit en load average : 100 = 100% d'un core cpu, sur un machine 4 cores, le total dispo est donc de 400 , ainsi 30% du total cpu = 120

attention, avec cpulimit le CT ne profitera pas du burst cpu au dela de la dite limite ...

http://openvz.org/Resource_shortage#CPU
 

 

RAM

  • vzctl set 101 --ram 512M --swap 1G --save

    on regarde ce que ça donne dans le container  :

    # vzctl exec 101 free -m
                 total       used       free     shared    buffers     cached
    Mem:          512M        31M       480M         0B         0B        14M
    -/+ buffers/cache:        17M       494M
    Swap:         1.0G         0B       1.0G

     

 

IO

  • vzctl set 101 --ioprio 2 --save

ioprio = priorité d'acces disk  : valeur de 0 à 7, inverse de nice , donc le + donne le +
 


cf man vzctl pour voir toutes les possibilités !

 

4/ Supervision :


Vue complète avec vzlist  :
vzlist -a -o "ctid,status,ip,laverage,kmemsize,kmemsize.m,diskspace,diskspace.s,numproc,cpus,cpuunits,cpulimit,tcpsndbuf.m,tcprcvbuf.m,ioprio,onboot,layout,hostname"

 

# vzcalc -v 102

Resource     Current(%)  Promised(%)  Max(%)
Low Mem          0.14       0.69       0.69
Total RAM        0.34        n/a        n/a
Mem + Swap       0.08       0.78        n/a
Alloc. Mem       0.31       0.97       1.86
Num. Proc        0.01        n/a       0.19
--------------------------------------------
Memory           0.34       0.97       1.86

# vzmemcheck -v

Output values in %
CTID        LowMem  LowMem     RAM MemSwap MemSwap   Alloc   Alloc   Alloc
              util  commit    util    util  commit    util  commit   limit
102           0.14    0.69    0.34    0.08    0.78    0.31    0.97    1.86
101           1.06  114.74    4.59    0.26   35.60    0.50   35.60   48.60
--------------------------------------------------------------------------
Summary:      1.20  115.43    4.93    0.34   36.39    0.81   36.58   50.46


# vzcpucheck -v

VEID            CPUUNITS
-------------------------
0               1000
101             1000
102             1000
Current CPU utilization: 3000
Power of the node: 618592




5/ Réseau :

vzctl set 101 --ipadd X.X.X.X --save

C'est tout (en cas de pb vérifiez votre firewall)


Pour en savoir plus :

La plupart du temps on veut une ip publique associée à chaque container.

Chez OVH vous pouvez louer des "ip failover" pour rajouter des ip à votre machine.

Evitez de prendre es mac adresses virtuelles avec.
Evitez également de suivre la procédure d'install que vous recevez par mail, elle n'est pas adaptée à la virtualisation !

Il existe plusieurs méthode le bridge, le nat hote/container en ip privée  etc ,
voici le + simple à mon goût : venet  , l'interface virtuelle par défaut.

Llimitations de ce choix  :
pas de ARP donc pas de mac adresses virtuelles, pas de bridge, pas de config réseau depuis l'intérieur du CT, support ipv6 limité , sniffing de packet limité, par contre meilleure performance, meilleure sécurité et surtout grande simplicité de config puisqu'il est inutile de faire la config réseau de chaque CT, une ligne de config depuis l'hôte suffit comme nous allons voir
 

Ce qu'il faut c'est absolument activer l'ip forwarding de packet sur l'hote (sur openVZ version récente, ça se fait tout seul puisque openVZ gère sysctl ) , mais en cas de pb pensez à votre firewall qui peut poser pb et jettez un oeil à vos iptables


Il suffit d'attribuer votre nouvelle ip publique "failover" à votre container :

vzctl set 102 --ipadd X.X.X.X --save

 

à partir de là, depuis la machine hôte vous pouvez pinger le container :

ping X.X.X.X


maintenant rentrez dans le container :

vzctl enter 102

tentez un ping de l'adresse ip de l'hôte pour voir si le container arrive à atteindre l'hôte

ensuite remplissez le fichier /etc/resolv.conf si nécessaire du container, sur les dernières versions c'est inutile  (sinon vous trouverez le dns dans le ficher /etc/resolv.conf de l'hôte) :
nameserver 213.186.33.99

à partir de là vous pouvez vérifier la résolution dns ET l'accès au réseau externe  :

ping google.fr
 

si ça passe, c'est tout bon, sinon vérifiez le firewall de l'hôte qui vous empêche peut être de sortir (ip forward)
 

Bien depuis l'extérieur vous devez accéder en ssh à ce CT

Pour installer apache, toujours depuis l'intérieur du container :

yum install httpd

echo coucou >/var/www/html/index.html

service httpd start
chkconfig httpd on  


ensuite depuis l'extérieur, vous devez voir coucou sur http://VOTRE.IP.FAIL.OVER

 

 

Références sur la partie réseau :

venet :  https://openvz.org/Virtual_network_device

venet VS veth : https://openvz.org/Differences_between_venet_and_veth

https://openvz.org/FAQ#Networking

 

6/ clock zone et tunning :

1/ pb de clock zone sur le CT ? sur le host vérifiez /etc/sysconfig/clock et /etc/localtime , puis restart du CT

si ça ne suffit pas, entrez dans le CT et :

- dans /etc/sysconfig/clock :
ZONE="Europe/Paris"
UTC=true

- dans /etc/adjtime :
-30.380942 1402473579 0.000000
1402473579
UTC

- et localtime :
cat  /usr/share/zoneinfo/Europe/Paris > /etc/localtime

 

2/ Tunning du CT :  vzctl enter CT

  • yum cron : yum install yum-cron; chkconfig yum-cron on ;service yum-cron start
  • sendmail :  yum install sendmail sendmail-cf; chkconfig sendmail on ;service sendmail start
  • centos7 : syslog : yum install rsyslog; chkconfig rsyslog on ; service rsyslog start
  • centos7 : yum install cronie-anacron
  • logwatch : yum install logwatch
  • aliases : fixer alias root dans /etc/aliases , exposed user et masquerades dans /etc/mail/sendmail.mc , tous les aliases dans  /etc/mail/local-host-names (celui du CT et celui de la zone dns) pour recevoir les mails sysadmin du CT sur votre bal
  • centos 6 : rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  • centos 7  :  yum install epel-release
  • rpm forge centos 7 (attention pb conflit possible avec epel sur certains packages ) :
    yum install
    http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
  • yum update
  • echo "export HISTFILE=/root/.bash_history" >>  /root/.bashrc
     

 

3/ Tunning coté maitre (CT0) :

  • Pour le firewall (iptables) il est préférable de travailler sur le maitre et d'ouvrir les flux utiles pour chaque CT (en forward).
  • /etc/sysconfig/iptables /etc/sysconfig/ip6tables (activer ou non ipv6 via sysctl et /etc/sysconfing/network)
  • chkconfig smartd on; service smartd restart
  • yum install logwatch
  • yum erase postfix
  • yum install sendmail sendmail-cf; chkconfig sendmail on ;service sendmail start
  • cf /etc/aliases, exposed user et masquerades dans /etc/mail/sendmail.mc pour recevoir les mails sysadmin
  • yum cron : yum install yum-cron; chkconfig yum-cron on ;service yum-cron start
  • /etc/sysconfig/iptables (attention si vous regrouper les regles de firewall sur le maitre avec iptables, depuis la version 4.6.1 de vzctl il faut réactiver l'ip conntrack coté maitre :  pour en savoir + )
  • crontab : pensez à ntpdate , surv iptables, smartctl etc ...
     

 

7/ dump et restore d'un CT
 

a/ Si vous êtes en layout ploop : 
 

modprobe vzcpt

Créer un snapshot:
vzctl snapshot CTID [--id $UUID] [--name name] [--description desc] [--skip-suspend] [--skip-config]

Lister les snapshots :
vzctl snapshot-list CTID

Mount un snapshot (pour ensuite copier le contenu vers un backup):
vzctl snapshot-mount CTID --id uuid --target directory

Rollback to a snapshot:
vzctl snapshot-switch CTID --id uuid

Delete a snapshot :
vzctl snapshot-delete CTID --id uuid


Voici le source du script vzbackup que vous pourrez utiliser en faisant :   vzbackup 101 /destination/

#!/bin/bash

if [ -z "$1" -o -z "$2" ]
then
echo "Usage: vzbackup CTID BACKUP-PATH"
exit 1
fi
 
CTID=$1
FOLDER=$2
BACKUPPATH=$FOLDER/$CTID-$( date +%F_%H_%M )
 
#create BACKUP-PATH
mkdir -p $BACKUPPATH
 
# Known snapshot ID
ID=$(uuidgen)
VE_PRIVATE=$(VEID=$CTID; source /etc/vz/vz.conf; source /etc/vz/conf/$CTID.conf; echo $VE_PRIVATE)
 
# Take a snapshot without suspending a CT and saving its config
vzctl snapshot $CTID --id $ID --skip-suspend --skip-config
 
# Perform a backup using your favorite backup tool
# (cp is just an example)
cp $VE_PRIVATE/root.hdd/* $BACKUPPATH/
 
# Delete (merge) the snapshot
vzctl snapshot-delete $CTID --id $ID
 
# remove old backups
rm -rf $( find $FOLDER -type d -name "$CTID*" -exec ls -d1rt "{}" + | head -n-15  )

cf http://openvz.org/Ploop/Backup

 

 

b/ Avec VZdump :

yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm


yum install http://download.openvz.org/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm


dump :

vzdump --mailto root --bwlimit KBPS --dumpdir DIR CTid

(il va essayer le mode "snapshot" sans coupure de service si vous êtes en LVM, sinon "suspend" pour une coupure minimale, sinon "stop" ) 

ou pour préciser / forcer un mode (ici stop),  débrider la limite de bande passante (bw) et forcé le dossier de sauvegarde (attention à l'espace disk)  :
vzdump  --dumpdir /save --mailto root --bw 0 --maxfiles 7 --stop 102

fichier produit 1,7Go  :
/save/vzdump-openvz-102-2013_12_15-12_55_15.tar
 

restore :

vzrestore /save/vzdump-openvz-102-2013_12_15-12_55_15.tar  104

 

ASTUCE Container HS suite à un disque full 100 % ?

error : Image is clean but unable to fix the header on ro image
error : Dirty flag is set

faites un check -f -d en manuel des ploop de vos snapshots :

ploop check --check -f  -d  "/vz/private/106/root.hdd/root.hdd.{66374898-d130-4ac0-921e-b3aba7b0b4f2}"

 

 

8/ Mount transverse ou  dossiers partagés entre CT :

Il est possible de partager un dossier entre tous les CT

depuis le CT maitre (host), créer les dossiers de partage par exemple /web /echange /videos, puis dans /etc/vz/conf il suffit de créer un fichier CTID.mount  , par exemple 101.mount :

#!/bin/bash
. /etc/vz/vz.conf
. ${VE_CONFFILE}


for REP in /web /echange /videos;do
 if [ ! -e ${VE_ROOT}${REP} ]; then mkdir -p ${VE_ROOT}${REP}; fi
 mount --bind ${REP} ${VE_ROOT}${REP}
done

 

 

 


9/ A connaitre aussi :

  • modprobe vzrst; modprobe vzcpt; (à faire des 2 cotés)
    vzmigrate -v -t  --live --keep-dst remote-host  CTid

    --live permet de faire un transfert sans coupure de service,
    --keep-dst permettra de reprendre la sync des datas en cas de coupure : on laisse les datas copiés sur le remote en cas d'erreur
    -t pour times infos
     
  • alternative avec coupure de service :
    vzctl stop CTid ; vzmigrate -v remote-host CTid
     
  • vzquota

    Et la config :
     
  • /etc/sysconfig/vz
  • /etc/vz et /etc/vz/vz.conf
  • le daemon : chkconfig --list vz
     
  • rpm -qa |grep vz

     

 Références générales sur openVZ :


 


10/ A voir aussi, les Hyperviseurs :  Proxmox (debian), SolusVM (centos) , openvz web panel (de google)

Vous pouvez utiliser Proxmox (gratuit et payant) ou Solusvm (payant à 10$/mois) : ils offrent une interface graphique web, une vue globale de vos containers, les ressources utilisées et la plupart des fonctions de réglages et création utiles.

Ils gèrent les containers OpenVZ mais aussi d'autres comme Xen, kvm etc

Le plus simple c'est au départ d'installer une distribution linux Centos, puis vous installer SolusVM qui va lui même installer le noyau OpenVZ modifié et faire toutes les configs utiles décrites ci dessus

Si vous louez votre serveur chez ovh, vous pouvez aussi opter pour une distrib clef en main type ovh Proxmox ou ovh SolusVM (cf ovh / serveur / réinstall / proxmox ou solusvm) qui va vous dispenser de cette étape (à vérifier pour l'ovh solusvm un bug est référencé sur la doc solusvm)

J'ai testé pour vous : ça peut vraiment simplifier la vie surtout si vous préférez la souris au clavier.
C'est également intéressant pour des grosses infra car vous aurez un tableau de bord de tous vous serveurs physiques et des VM et CT installés dessus , une vue globale de vos IP etc ... mais attention, SolusVM est tres complet, si vous êtes un habitué du clavier et que vous avez un seul serveur physique, je ne suis pas certain que vous allez gagner du temps (c'est mon cas) ...

Un autre challenger très intéressant : openvz web panel de Google code, une interface web gratuite à installer sur votre serveur maitre .



11/ Vous êtes une web agency ? l'isolation des sites web de vos clients vous intéresse ?


vous avez besoin d'un coup de main pour préparer et/ou administrer votre serveur ?
vous pensez comme moi qu'à chacun son métier ?

Bouilleur de Code (AERL)
Consultant Redhat, Centos et Fedora - Redhat Certified Engineer since 2004
www.bouilleur-de-code.fr

 

 

 

 

12/ Problem reseau on centos 7.1 (avril 2015)

on host: modify /etc/vz/dists/scripts/redhat-add_ip.sh by adding ARPCHECK="no" in function create_config()

function create_config()
{
local ip=$1
local netmask=$2
local ifnum=$3
local file=${IFCFG_DIR}/bak/${VENET_DEV_CFG}:${ifnum}

echo "DEVICE=${VENET_DEV}:${ifnum}
ONBOOT=yes
IPADDR=${ip}
NETMASK=${netmask}"
ARPCHECK="no" > $file ||
error "Can't write to file $file" ${VZ_FS_NO_DISK_SPACE}
}

then restart containers 



11 233 clics - Créé le 17/10/2013 par Tito - Modifié le 01/07/2015



Réagissez, commentez, discutez ...

Info2 réactions.

  • par tito (Zaclynaute) - 29/10/2013 09:33

    merci!

  • par Léo (Zaclynaute) - 26/10/2013 23:04

    Bravo. Merci pour cet article.



(sert uniquement à vous signaler les réactions)




Partager ?

diaspora  G+  facebook  twitter  Digg  Yahoo  Delicious  Technorati  myspace


Voir d'autres articles en rapport avec celui-ci ?



Stats des clics sur cet article : cliquez ici »



Vous voulez contribuer et publier un article dans cette rubrique ?

InfoMerci de vous identifier ou de vous créer un compte si ce n'est pas déjà fait.


icone user Me connecter :

InfoMerci de saisir vos identifiants.




Me reconnecter automatiquement à chaque visite sur ce navigateur :
               





retour






Plan du site | Aide | Mentions légales et CGU | RGPD | Travaux et incidents | Budget | Faire un don | Chouchen | Z pub | Logo et prospectus

© Association la mère Zaclys 1998-2019  - Zaclys v2.5

Suivez nous sur Diaspora, Mastodon, Google+, FaceBook ou Twitter