Differences between revisions 3 and 4
Revision 3 as of 2015-02-28 18:01:29
Size: 15885
Editor: kao
Comment: [[LXC/SimpleBridge]] to [[fr/LXC/SimpleBridge|LXC/SimpleBridge]]
Revision 4 as of 2015-03-01 09:16:57
Size: 15891
Editor: kao
Comment: change [[LXC/VlanNetworking]] to [[fr/LXC/VlanNetworking|LXC/VlanNetworking]]
Deletions are marked like this. Additions are marked like this.
Line 159: Line 159:
 * Description de la configuration VLAN + bridge, voir [[LXC/VlanNetworking]] ''(en Anglais)''  * Description de la configuration VLAN + bridge, voir [[fr/LXC/VlanNetworking|LXC/VlanNetworking]]

Translation(s): English - Français

(!) ?Discussion


Les containers Linux (LXC) fournissent un système libre de virtualisation de logiciels pour des ordinateurs fonctionnant grâce à un GNU/Linux. Cela est accompli à l'aide des niveaux d'isolation du noyau. Cela permet à une unité d'en faire fonctionner plusieurs virtuelles simultanément. Ces unités, similaires aux chroots, sont suffisamment isolées pour garantir la sécurité requise, et se répartissent efficacement les ressources disponibles puisqu'elles tournent sur le même noyau.

Pour toutes informations supplémentaires visitez : http://lxc.sourceforge.net/

Le support complet pour LXC (y compris les outils de gestion d'espace utilisateurs) sont disponible depuis la sortie de Debian 6.0 "Squeeze".

Problèmes connus sur Debian 7 "Wheezy":

Vous pouvez aussi lire quelques sous-pages :

  • ?LXC/Squeeze-Backport (en Anglais)

Installation

  • Paquets requis pour l'installation

aptitude install lxc
  • Paquets optionnels pour l'installation

aptitude install bridge-utils libvirt-bin debootstrap

Préparer l' hôte

Ajoutez cette ligne à /etc/fstab (Ne pas faire ceci sous Jessie avec SystemD, depuis qu'il monte les cgroups. Cela n'est pas nécessaire si libvirt-bin est installé comme init.d/libvirt-bin montera /sys/fs/cgroup automatiquement)

cgroup  /sys/fs/cgroup  cgroup  defaults  0   0

Essayez de le monter (un re-démarrage résoudra un éventuel "ressource busy problem" dans tout les cas).

mount /sys/fs/cgroup
  • En option : Activez le support des mémoires cgroups (CONFIG_CGROUP_MEM_RES_CTLR, 534964, embarqué depuis 2.6.39-bpo60-2 pour Squeeze). Il est désactivé par défaut. Vous avez besoin de l'activer dans les paramètres du noyau. Quand on utilise Grub2, cela peut être fait facilement en paramétrant GRUB_CMDLINE_LINUX="cgroup_enable=memory" dans /etc/default/grub puis en lançant update-grub2.
    Même chose pour le swap et la memory (CONFIG_CGROUP_MEM_RES_CTLR_SWAP), paramètre du noyau "swapaccount=1" - voir http://lists.debian.org/debian-kernel/2012/01/msg00804.html .

Vérifiez la configuration du noyau :

# lxc-checkconfig 
Kernel config /proc/config.gz not found, looking in other places...
Found kernel config file /boot/config-2.6.32-5-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: missing
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Au dessus du programme lxc-checkconfig est indiqué "Cgroup memory controller: missing". Si vous voulez le contrôle de la mémoire via les cgroups, vous aurez besoin de recompiler le noyau ( ou seulement ajouter cgroup_enable=memory à la ligne de commande du noyau sur Jessie ou supérieure).

Création du RootFS

Debian 8 "Jessie"/testing

Comme pour Debian 7 (voir plus bas), mais si vous voulez spécifier la suite ou le miroir , utilisez ces variables d'environnement :

SUITE=wheezy MIRROR=http://ftp.fr.debian.org/debian lxc-create -n monContainer -t debian

Alternativement vous pouvez utiliser cette ligne de commande:

lxc-create -n monContainer -t debian -- -r jessie

Mais vous aurez systemd à l'intérieur du container, ce qui ne fonctionne pas correctement pour le moment. Pensez à prendre note du mot de passe root du container. Pour démarrer le container, basculez à sysvinit et arrêtez le une nouvelle fois.

lxc-start -n monContainer 
# login
apt-get -y install sysvinit-core
# logout et tuer le container
lxc-stop -n monContainer -k

Pensez à regarder la section "Incompatibilités avec systemd".

Debian 7 "Wheezy"

LXC s'installe correctement sur "Wheezy" (y compris sur un template Debian en fonctionnement depuis 7.4).

Utilisation:

lxc-create -n monContainer -t debian

Ce qui retournera sur quelle distribution l'installer.

Puis adaptez la configuration réseau dans /var/lib/lxc/monContainer/config, par exemple pour le connecter sur le bridge de libvirt :

lxc.utsname = monContainer
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.ipv4 = 0.0.0.0/24
lxc.network.hwaddr = 00:1E:62:CH:NG:ME

D'autres templates peuvent être téléchargés, avant la 7.4 nous recommandons celui qui est référencé sur la mailing list LXC container:

lxc-create -n monContainer -t debian-wheezy
# ou pour un container 32-bit:
linux32 lxc-create -n monContainer -t debian-wheezy

Debian 6.0 "Squeeze"

  • En théorie vous pouvez utiliser n'importe quel outil pour créer un rootfs (debootstrap, multistrap, rootstock) tant que vous êtes sûr, que le résultat fonctionnera dans un container.
  • Pour la première fois et à titre d'exemple, utilisez le script de création fourni par le paquet lxc.

cp -a /usr/lib/lxc/templates/lxc-debian /usr/lib/lxc/templates/lxc-squeeze
  • (lxc-debian est configuré pour installer lenny, qui n'est plus accessible depuis les archives spécifiées.) Editez lxc-squeeze, en remplaçant "lenny" avec "squeeze" et "dhcp-client" par "isc-dhcp-client"

lxc-create -n monContainer -t squeeze -f /usr/share/doc/lxc/examples/lxc-veth.conf
  • Ici, nous utilisons le fichier de configuration lxc-veth.conf

Configuration réseaux des containers

Démarrer et arrêter des containers

Notes/Mise en garde sur le démarrage et l'arrêt de containers :

  • Quand vous vous connectez à la console d'un container, lxc vous indiquera comment le quitter. Mais lors de votre première connexion, la gestion du tty effacera l'écran, vous risquez donc de manquer cette petit information :

    Taper <Ctrl+a q> pour sortir de la console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
  • Si vous utilsez l'écran et aussi la raccourcis Ctrl+a, tapez <Ctrl+a a q> pour sortir de la console.

  • <!> Quand vous démarrez le container en mode premier plan (sans -d), il n'y a apparemment aucun moyen pour quitter le terminal (<Ctrl+a q> ne fonctionne pas). Assurez vous de démarrer les containers en mode "arrière plan" avec -d, à moins que vous ayez besoin de débugger avec un container qui n'a pas démarré.

  • lxc-halt retourne telinit: timeout opening/writing control channel /run/initctl - à la place, faite un 'poweroff' depuis le container, (Ceci est un mauvais conseil - cela éteindra l'hôte) et éteignez le avec un lxc-stop. Méthode de contournement : utilisez lxc.cap.drop = sys_admin dans le fichier de configuration.

Commandes actuelles :

  • Pour démarrer un container en arrière plan et plus tard l'attacher à la console à n'importe quel moment, lancez (par défaut, l'identifiant et le mot de passe sont root/root) :

    lxc-start -n  -d
    lxc-console -n 
  • Pour démarrer un container en arrière plan et pour qu'il reste attaché à la console, lancez (voir mise en garde plus bas) :
    lxc-start -n monContainer
  • Pour éteindre un container proprement à l'aide de initv-system (voir la note sur le timeout ci-dessous) :

    lxc-halt -n monContainer
  • Pour stopper un container sans arrêt propre :

    lxc-stop -n monContainer
  • Pour lancer automatiquement les containers au démarrage de l'hôte, lier leurs fichiers de configuration /etc/lxc/auto/:

    ln -s /var/lib/lxc/mycontainer/config /etc/lxc/auto/mycontainer

Relier les points de montage à l'intérieur du container

Par défaut seule le système de fichier du container est monté dans le container (même si sur l'hôte, /var/lib/lxc/mycontainer/rootfs n'a pas d'autres points de montage).

Pour monter un autre système de fichier dans le container, ajoutez à /var/lib/lxc/mycontainer/config :

lxc.mount.entry=/path/in/host/mount_point /var/lib/lxc/mycontainer/rootfs/mount_point none bind 0 0

et relancez le container. Le point de montage sera maintenant visible depuis le container.

Les deux peuvent être identique si nécessaire.

Incompatibilités avec systemd

Avec 0.8.0~rc1-8+deb7u2 ("Wheezy") et 1:1.0.6-4 ("Unstable") le lxc de Debian n'est pas compatible avec le fait de faire tourner systemd dans le container. Voir 766216.

Scénarios

Mettre à jour le container de "Wheezy" à "Jessie"

Quand on mets à niveau un invité lxc "Wheezy" vers "Jessie", la machine virtuelle lxc s'arrêtera de fonctionner, parce qu'à l'heure ou l'on parle (23.11.2014) le systéme va migrer automatiquement vers systemd. Voir le 766233. 762194.

Solutions:

Revenir à sysv

Si la machine virtuelle a migré automatique vers systmed via une mise à jour, alors vous pouvez revenir à sysvinit :

lxc-stop -n monContainer               # stop la vm
                               # ou si cela ne fonctionne pas utilisez lxc-kill

# la prochaine étape demande à la VM d'être montée sur  /var/lib/lxc/monContainer/root

chroot /var/lib/lxc/monContainer/root  # chroot dans la vm
apt-get install sysvinit-core # re-installe l'ancien sysvinit

Alternativement vous pouvez essayer de démarrer le container en arrière plan et faire la même chose via la console du container comme cela est décrit dans la section Debian 8 "Jessie"/testing.

Empêcher votre système de migrer vers systemd lors de la mise à jour

Avant la mise à niveau, lancez :

apt-get install sysvinit-core

ou lancez la commande suivante à la place du dist-upgrade habituel :

apt-get dist-upgrade sysvinit-core

Reconfigurer les VM mises à jour

Notez que la solution suivante fonctionne uniquement sur les hôtes fonctionnant sous Jessie. Cela ne fonctionnera pas sur les hôtes qui tournent encore sous Wheezy.

Ajoutez ceci à la configuration de votre container :

lxc.autodev = 1
lxc.kmsg = 0

Et dans l'invité

Ajustez getty@.service:

cp /lib/systemd/system/getty@.service /etc/systemd/system
# Décommentez la ligne ConditionPathExists=/dev/tty0 dans la copie de getty@.service

Masquez udev.service et systemd-udevd.service:

systemctl mask udev.service systemd-udevd.service

Créer de nouvelles VM "Jessie"

Si vous tentez de créer une VM fraîche de "Jessie", le patch qui suit pourrait vous être utile. Notez que le patch n'est pas complément testé, donc une confirmation que le patch fonctionne serait la bienvenue. Lisez aussi la discussion associé au billet, puisque à l'heure actuelle (23.11.2014) le patch est encore en évaluation et il n'est toujours pas appliqué.

Le patch d'Antonio Terceiro

Aussi, quand vous vous lancez des VM lxc, vous devriez régler "lxc.autodev = 1" dans votre "/var/lib/lxc/monContainer/config". Voir aussi 761197 dans 'Bugs connus et "problèmes connus"' ci-dessus, et ceci Problèmes LXC dans Github.

Support

Références

Voir aussi :

Bugs connus et "problèmes connus"

  • 600466 - "Respawning too fast" messages and can't connect to console due to missing tty(1234) nodes in generated container rootfs. Workaround: remove from container's /etc/inittab or start container in interactive mode and mknod -m 660 dev/tty1 c 5 1 for each required tty.

  • Quelques bugs qui peuvent s'appliquer à des containers non-officiels.

  • "telinit: /run/initctl: No such file or directory" en lançant un lxc-halt?

    mknod -m 600 /var/lib/lxc/monContainer/rootfs/run/initctl p

    et ajoutez "sys_admin" à la ligne lxc.cap.drop dans /var/lib/lxc/monContainer/config? Voir http://wiki.deimos.fr/LXC_:_Install_and_configure_the_Linux_Containers#telinit:_.2Frun.2Finitctl:_No_such_file_or_directory

  • 761197 - "systemd-journald surcharge le CPU dans un container lxc jessie"
    Comme noté dans le rapport de bug, paramétrez "lxc.kmsg=0" dans "/var/lib/lxc/monContainer/root" et supprimez "/dev/kmsg" dans le container semble régler le problème.

Voir aussi