Differences between revisions 6 and 7
Revision 6 as of 2015-05-03 08:46:47
Size: 15165
Editor: kao
Comment: Sync with English master
Revision 7 as of 2015-05-16 16:01:35
Size: 15165
Editor: kao
Comment: spellchecking
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:
Le support complet pour LXC (y compris les outils de gestion d'espace utilisateurs) sont disponible depuis la sortie de Debian 6.0 "Squeeze". Le support complet pour LXC (y compris les outils de gestion d'espace utilisateurs) sont disponibles depuis la sortie de Debian 6.0 "Squeeze".
Line 44: Line 44:
Essayez de le monter (un re-démarrage résoudra un éventuel "ressource busy problem" dans tout les cas). Essayez de le monter (un re-démarrage résoudra un éventuel "ressource busy problem" dans tous les cas).
Line 84: Line 84:
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). 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).
Line 90: Line 90:
Comme pour Debian 7 (voir plus bas), mais si vous voulez spécifier la suite ou le miroir , utilisez ces variables d'environnement : Comme pour Debian 7 (voir plus bas), mais si vous voulez spécifier la suite ou le miroir, utilisez ces variables d'environnement :
Line 165: Line 165:
 * 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 : {{{  * 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 petite information : {{{
Line 167: Line 167:
 * 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.
 * Si vous utilisez 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.
Line 216: Line 216:
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 DebianBug:766233. DebianBug:762194. Quand on met à 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 DebianBug:766233. DebianBug:762194.
Line 293: Line 293:
 * http://blog.rot13.org/2010/03/lxc-watchdog_missing_bits_for_openvz_-_linux_containers_migration.html qui décrit un outils pour contrôler le démarrage et l'arrêt des invités à l'aide d'un signal d'allumage, et aussi plus de paramètres pour la console.  * http://blog.rot13.org/2010/03/lxc-watchdog_missing_bits_for_openvz_-_linux_containers_migration.html qui décrit un outil pour contrôler le démarrage et l'arrêt des invités à l'aide d'un signal d'allumage, et aussi plus de paramètres pour la console.

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 disponibles 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 tous 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 petite information :

    Taper <Ctrl+a q> pour sortir de la console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
  • Si vous utilisez 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 met à 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"

La création de nouveaux containers Jessie ne devrait pas rencontrer de problème.

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