Note : le document original est plus récent que cette traduction.
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 en utilisant "CGroups" et "namespaces". Cela permet à une unité d'en faire fonctionner plusieurs virtuelles simultanément. Ces unités, similaires aux chroots, sont isolées et se répartissent efficacement les ressources disponibles puisqu'elles tournent sur le même noyau.
Visitez : https://linuxcontainers.org/ pour toutes informations supplémentaires
Le support complet pour LXC (y compris les outils de gestion d'espace utilisateurs) sont disponibles depuis la sortie de Debian 6.0 "Squeeze".
Vous pouvez aussi consulter ces quelques pages :
/LibVirtDefaultNetwork /SimpleBridge /VlanNetworking |
Contents
- Versions supportées de LXC
- Points communs
- Installation
- Préparer l' hôte
- Création du RootFS
- Configuration réseaux des containers
- Démarrer et arrêter des containers
- Relier les points de montage à l'intérieur du container
- Incompatibilités avec systemd
- Support
- Références
- Bugs connus et "problèmes connus"
- Voir aussi
Versions supportées de LXC
Il y a deux versions des outils LXC, situés en espaces utilisateurs, supportés par upstream :
- LXC 1.0 (supporté jusqu'au 1er Juin 2019)
- LXC 2.0 (supporté jusqu'au 1er Juin 2021)
LXC 1.0 est disponible dans Jessie. LXC 2.0 is disponible dans Stretch et dans les backports de Jessie.
Quand vous cherchez de la documentation, des manuels et des tutoriels, pensez à vérifier à quelle version ils s'appliquent, les choses peuvent avoir changées.
Le reste de cette page essayera de faire le distinguo entre les informations qui s'appliquent aux deux versions et celles qui s'appliquent seulement à l'une d'entre elles.
Points communs
Mot de passe root
Certains modèles(templates) vont créer un container avec un mot de passe aléatoire, certains avec un pré-défini (comme "root" ou "toor") et certains sans mot de passe du tout.
L'objectif d'upstream est qu'a terme les modèles n'aient plus de mot de passe, comme il n'est plus nécessaire d'avoir un mot de passe pour rattacher un container localement via lxc-attach -n <container>.
Si vous avez besoin de paramétrer le mot de passe d'un container (parce que vous avez oublié celui donné aléatoirement ou pour modifier celui par défaut), vous pouvez faire cela avec lxc-attach -n <container> passwd.
<Il reste un gros block à traduire à partir d'ici>
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
Créer un bridge (pont) sur l'hôte (NAT/Routé), LXC/SimpleBridge
Description de la configuration VLAN + bridge, voir LXC/VlanNetworking
Utiliser le paquet libvirt pour une configuration facile du réseau LXC/LibVirtDefaultNetwork
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'utilitaire screen (émulateur de terminal) et qu'il a aussi le 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 systemd 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
Pour discuter à propos de LXC et Debian : LXC mailing list (Sur Gmane)
Références
LXC sur Debian Squeeze (Publié le 2010-05-01)
Configurer LXC sur Debian squeeze (Publié le 06/11/2011)
Comment utiliser les Linux containers (lxc) sous Debian Squeeze
Voir aussi :
https://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.
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
Autres Systèmes de virtualisation