LXC signifie Conteneurs Linux.
Les conteneurs Linux sont des méthodes de "virtualisation" légères qui exécutent plusieurs unités virtuelles simultanément sur un seul hôte de contrôle sur un seul noyau Linux.
Le noyau Linux contient des cgroups pour l'isolation des ressources (CPU, mémoire, bloc d'E/S, réseau, etc.), qui ne nécessite le démarrage d'aucune machine virtuelle.
Cgroups fournit également une isolation d'espace de noms pour isoler complètement l'application vue de l'environnement d'exploitation, y compris les arborescences de processus, les réseaux, les ID utilisateur et les systèmes de fichiers montés.
LXC est un logiciel open source et sous licence GNU LGPLv2.1+.
Les conteneurs utilisent en fait des fonctionnalités du noyau appelées espaces de noms, cgroups et chroots, pour découper une zone confinée.
Ainsi, le résultat final de LXC ressemble beaucoup à une machine virtuelle, mais sans aucun hyperviseur.
1. Prérequis pour l'installation de LXC
Avant d'installer LXC, assurez-vous que votre système est à jour en utilisant yum update comme indiqué ci-dessous.
# yum update
LXC dépend de deux bibliothèques ; libpcap et libcgroup. Cela nécessite également les utilitaires busybox et bridge.
Installez les packages requis suivants pour notre installation LXC.
# yum install libcap-devel libcgroup busybox wget bridge-utils
Assurons-nous d'avoir tous les compilateurs et outils de développement associés nécessaires pour compiler et installer n'importe quel logiciel à partir du code source.
# yum groupinstall "Development tools"
Pour plus d'informations sur les groupes yum, consultez notre article sur les commandes yum.
2. Télécharger les conteneurs Linux LXC
Téléchargez la dernière version de LXC à partir de Linux Containers Project.
Utilisez wget pour télécharger l'archive tar de la dernière version stable de LXC sur votre machine, comme indiqué ci-dessous.
# cd / # wget http://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
Si vous obtenez un message d'erreur lié au certificat lors de l'utilisation du wget ci-dessus, utilisez l'option no-check-certificate comme indiqué ci-dessous.
# wget --no-check-certificate https://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
Alternativement, si vous préférez, vous pouvez également utiliser git clone pour télécharger la dernière version de développement ou la version stable, comme indiqué ci-dessous.
git clone git://github.com/lxc/lxc -b {branch}
Dans la commande ci-dessus, la {branche} peut être soit "maître" pour la branche de développement actuelle, soit "stable-1.0" pour la branche de mise à jour stable de la version 1.0.
3. Configurer l'adaptateur ponté
Ensuite, créez un adaptateur ponté et configurez l'adresse IP statique sur l'adaptateur ponté comme indiqué dans l'exemple ifcfg-eth0 suivant. Assurez-vous que votre adaptateur physique pointe vers cet adaptateur ponté dans ifcfg-eth0.
# cd /etc/sysconfig/network-scripts # vi ifcfg-br0 DEVICE="br0" BOOTPROTO="static" IPADDR="xxx.xxx.xxx.xxx" NETMASK="255.255.255.xxx" ONBOOT="yes" TYPE="Bridge" NM_CONTROLLED="no"
Remplacez tous les "xxx" dans le fichier ci-dessus par les valeurs qui correspondent à votre adresse IP et à votre masque de réseau. Par exemple, remplacez la valeur IPADDR dans le fichier ci-dessus par l'adresse IP de votre machine.
4. Installer le conteneur Linux LXC
Ensuite, décompressez la boule de goudron LXC, que nous avons téléchargée précédemment, exécutez le ./configure, et faites make et make install, pour installer le LXC sur votre système comme indiqué ci-dessous.
Par défaut, cela installera tous les binaires lxc sous le répertoire /usr/local/bin.
# cd / # tar xvfz lxc-1.1.5.tar.gz # cd lxc-1.1.5/ # ./configure # make && make install
Voici quelques-unes des dernières lignes de la sortie de la commande ./configure ci-dessus.
# ./configure ... ... config.status: creating src/python-lxc/setup.py config.status: creating src/lua-lxc/Makefile config.status: executing depfiles commands config.status: executing default commands ---------------------------- Environment: - compiler: gcc - distribution: centos - init script type(s): sysvinit - rpath: no - GnuTLS: no - Bash integration: yes Security features: - Apparmor: no - Linux capabilities: yes - seccomp: no - SELinux: no - cgmanager: no Bindings: - lua: no - python3: no Documentation: - examples: yes - API documentation: yes - user documentation: no Debugging: - tests: no - mutex debugging: no Paths: - Logs in configpath: no
Voici les dernières lignes de la sortie de la commande make ci-dessus.
# make ... Building full member lists recursively... Adding members to member groups. ... Generating style sheet... Generating index page... Generating page index... Generating example documentation... Generating file sources... Generating code for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxccontainer.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxclock.h... Generating file documentation... Generating docs for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... ... Generating file member index... make[2]: Leaving directory `/usr/save/lxc-1.1.5/doc/api' make[2]: Entering directory `/usr/save/lxc-1.1.5/doc' ... Making all in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' make[1]: Nothing to be done for `all'. ...
Voici les dernières lignes de la sortie de la commande make install ci-dessus.
# make install ... Making install in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' /bin/mkdir -p '/usr/local/share/lxc/hooks' /usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks' ... /bin/mkdir -p /usr/local/var/lib/lxc /bin/mkdir -p /usr/local/var/cache/lxc /bin/mkdir -p '/usr/local/lib/pkgconfig' /usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig' ...
5. Créer un lien symbolique pour les bibliothèques partagées LXC
Exécutez lxc-info pour vérifier que LXC est installé avec succès. Si tout est installé correctement, nous verrons un message indiquant que le nom du conteneur donné (par exemple, test) n'existe pas. Nous n'avons créé aucun conteneur à ce stade. Nous voulons simplement nous assurer que cette commande ne génère aucune erreur liée à la bibliothèque partagée.
# lxc-info --name test test doesn't exist
Selon la configuration de votre système, vous pouvez également obtenir le message d'erreur suivant lié à la bibliothèque liblxc.so.1.
# lxc-info --name test lxc-info: error while loading shared libraries: liblxc.so.1: cannot open shared object file: No such file or directory
Dans ce cas, pour résoudre ce problème, créez un lien appelé libxc.so.1 comme indiqué ci-dessous, qui pointera vers la version correcte du fichier liblxc.so.x.x.x.
# ln -s /usr/local/lib/liblxc.so.1.1.5 /lib64/liblxc.so.1 # ls -l /lib64/liblxc.so.1 lrwxrwxrwx. 1 root root 30 Jan 20 09:17 /lib64/liblxc.so.1 -> /usr/local/lib/liblxc.so.1.1.5
6. Vérifier l'installation et la configuration de LXC
Ensuite, vous pouvez également exécuter lxc-checkconfig pour vérifier que votre environnement lxc est correctement configuré.
Les éléments suivants auront une sortie dans quatre sections différentes :1) Espaces de noms, 2) Groupes de contrôle 3) Divers et 4) Point de contrôle/restauration. La sortie partielle est illustrée ci-dessous.
# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-2.6.32-431.el6.x86_64 --- 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 .. --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled .. --- Checkpoint/Restore --- CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled .. Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig
Si tout est correctement configuré sur votre système, dans la sortie ci-dessus, toutes les options des groupes ci-dessus doivent indiquer "activé".
Demain, dans la prochaine partie de la série d'articles LXC, nous expliquerons comment créer, démarrer et utiliser des conteneurs Linux lxc à l'aide de diverses commandes lxc.