LXC : avantages et inconvénients des conteneurs Linux

Grâce à leur convivialité, les conteneurs Linux jouissent d’une grande popularité et sont désormais une composante importante de la sécurité informatique. La plateforme de conteneurs LXC (Linux Container) est utilisée pour isoler plusieurs processus les uns des autres et du reste du système. Pour cela, une image est créée grâce à la virtualisation qui permet de conserver la portabilité et la cohérence de chaque conteneur, du développement à l’exploitation en passant par la phase d’essai. Ainsi les applications individuelles possèdent chacune un environnement virtuel, tout en utilisant collectivement le noyau du système hôte.

Que permettent les LXC (Linux Container) ? La simplicité est-elle toujours un avantage et quelle quantité de mémoire de machine virtuelle se cache dans un conteneur Linux ?

Linux Container, qu’est-ce que c’est ?

Le terme Linux Container (LXC) désigne à la fois les applications virtualisées basées sur Linux et la plateforme et la technologie de conteneur sous-jacente. Il est nécessaire de garder ceci à l’esprit, notamment lorsqu’on parle de plateformes de conteneurs alternatives qui utilisent également les Linux Container comme technologie.

LXC est une plateforme de conteneurs open source qui promet une utilisation simple, ce qui est plutôt rare pour un système de conteneurs, et une expérience utilisateur intuitive et moderne. Pour cela, la plateforme offre différents outils, langues, modèles et bibliothèques. En outre, l’environnement de virtualisation peut s’installer et s’utiliser sur toutes les distributions courantes de Linux.

Conseil

Les conteneurs sont des outils uniques utiles au développement et à la gestion des applications d’une manière qu’on a longtemps jugée impossible : ils permettent aux applications d’être isolées du système, sans avoir à les exécuter dans un système isolé. Elles peuvent donc continuer à échanger des informations avec le monde extérieur. Leur arrivée a été l’équivalent d’une révolution et depuis la technologie de conteneurs s’est développée et de nombreux fournisseurs sont en concurrence sur le marché. Les principaux fournisseurs de container-as-a-service sont Amazon, Microsoft et Google. Cependant, la plateforme la plus connue est Docker, une extension du projet Linux Container (LXC) qui prend en charge avant tout les fournisseurs CaaS.

C’est en 2001 que nait l’idée de la technologie Linux Container. C’est dans le cadre du projet Vserver, qu’un environnement isolé a été implémenté pour la première fois. Cela a posé les bases de la mise en place de plusieurs espaces de noms contrôlés dans Linux et de ce qui est maintenant appelé le conteneur Linux. D’autres technologies comme les cgroups (Control Groups) qui peuvent contrôler et limiter l’utilisation des ressources d’un processus ou de groupes de processus ont suivi. Avec systemd, un système d’initialisation pour la gestion des espaces de noms et de leurs processus a été ajouté.

Dans la pratique, LXC assure un développement plus rapide des applications. La technique de conteneurs aide notamment pour le portage, la configuration et l’isolation. Lors de la diffusion de données en temps réel, les conteneurs jouent aussi un rôle majeur en mettant à disposition l’évolutivité nécessaire aux applications. Les Linux Containers s’adaptent à l’infrastructure ce qui les rend hautement indépendants et permet donc de les utiliser aussi bien en local que sur un Cloud ou dans un environnement hybride.

Note

La raison du franc succès de la technologie de conteneurs peut s’expliquer en partie comme suit : chaque application d’un système d’exploitation a ses tâches et les effectue précisément dans cet environnement. Elles se basent sur les configurations existantes du programmeur et dépendent donc de certaines bibliothèques, contextes et fichiers. Les conteneurs sont eux utilisés pour tester les nouvelles applications de manière simple, rapide et sûre : cela permet à une nouvelle application d’être utilisée dans un environnement virtuel sans réécriture, débogage et problèmes. Le contenu d’un conteneur est modelé sur une installation d’une distribution Linux, en contient tous les fichiers de configuration, mais est beaucoup plus facile à mettre en place que le système d’exploitation réel.

Les objectifs et fonctionnalités de la technologie LXC

Au premier abord, il est difficile de saisir ce qui différencie LXC des systèmes de virtualisation classiques. C’est en prenant du recul que la différence saute aux yeux. Elle peut être résumée comme suit : les conteneurs fonctionnent au niveau du système d’exploitation, les machines virtuelles au niveau du matériel. Les conteneurs se partagent le système d’exploitation et isolent les processus d’application du reste du système tandis que les systèmes de virtualisation classique permettent l’exécution de plusieurs systèmes d’exploitation sur un seul système.

Note

Pour permettre le fonctionnement simultané de plusieurs systèmes d’exploitation dans un système d’exploitation, il est possible d’utiliser un hyperviseur pour émuler un système hardware, mais cela demande une grande quantité de ressources. L’utilisation de conteneurs d’application exécutés nativement sur le système d’exploitation, c’est-à-dire sans émulation, est beaucoup plus économe en ressources.

Les conteneurs Linux nécessitent en général moins de ressources qu’une machine virtuelle et possèdent une interface standard qui permet de gérer facilement plusieurs conteneurs simultanément. Une plateforme avec LXC peut d’ailleurs être organisée sur plusieurs Clouds, ce qui assure la portabilité et garantit que les applications qui fonctionnent correctement sur le système du développeur fonctionneront sur n’importe quel autre système. Grâce à l’interface Linux Container, il est possible de démarrer, arrêter ou modifier les variables d’environnement même celles de grosses applications.

Pour résumer, l’objectif de LXC est de créer un environnement qui ressemble le plus possible à une installation Linux standard sans avoir besoin d’un noyau séparé.

La plateforme de conteneurs Linux actuelle utilise les fonctionnalités de noyau suivantes pour « enfermer » les applications et processus dans un conteneur :

  • Espaces de noms des noyaux (ipc, uts, mount, pid,réseau et utilisateur)
  • Profil Apparmor et SELinux
  • Directives Seccomp
  • Chroots (à l’aide de pivot_root)
  • Capacité de noyau
  • cgroups (groupes de contrôle)

Les conteneurs Linux doivent rester compacts. C’est pourquoi ils sont composés de peu de composants indépendants :

  • La bibliothèque liblxc
  • Plusieurs liens de langage pour l’API :
    • python3 (support à long terme en 2.0.x)
    • lua (support à long terme en 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • Une gamme d’outils standards pour le contrôle du conteneur
  • Modèles pour les distributions

Comment fonctionne LXC ?

L’isolation et la virtualisation sont aussi importantes, car elles aident à gérer efficacement les ressources et les questions de sécurité. Elles allègent la surveillance, notamment pour la détection d’erreurs dans le système qui n’ont souvent rien à voir avec les nouvelles applications. Mais comment cela fonctionne-t-il avec LXC ? Autrement dit : comment fonctionnent les Linux Containers ?

La manière la plus simple et la plus judicieuse d’utiliser Linux Container est de connecter chaque conteneur avec un processus. Cela permet d’obtenir un contrôle complet. Pour chaque processus, les espaces de noms qui mettent des ressources à la disposition d’un ou plusieurs processus qui utilisent le même espace de noms sont particulièrement importants. En outre, les processus servent de contrôle d’accès pour sécuriser les conteneurs.

Pour utiliser un environnement LXC, les caractéristiques et leurs fonctions doivent être claires. Les cgroups (groupes de contrôle du noyau) limitent et isolent les ressources des processus telles que l’unité centrale, les E/S, la mémoire et les ressources réseau. En outre, le contenu d’un groupe de contrôle peut être administré, surveillé, priorisé et modifié.

Note

Dans Linux tout est dans un dossier. Pour cette raison, chaque cgroup est un ensemble de fichiers (/sys/fs/cgroup). Pour gérer ce type de fichier, il existe différents outils tels que cgmnager.

Les fonctions sont claires et la plateforme LXC est donc très conviviale, ce qui est un avantage non négligeable notamment pour les débutants. Découvrez ci-dessous les inconvénients de cette méthode.

Aperçu des avantages et inconvénients des Linux Container

La facilité d’utilisation des Linux Container est un gros avantage comparé aux techniques de virtualisation classiques. Cependant, la très large diffusion de LXC, l’écosystème presque complet et les outils innovants sont principalement dus à la plateforme Docker, qui a mis en place les conteneurs Linux. Comparé à d’autres systèmes de conteneurs tels que rkt, OpenVZ, Cloud Foundry Garden, qui sont beaucoup plus limités dans leur utilisation, LXC bénéficie de ses liens étroits avec le pionnier des plateformes de conteneurs.

Un administrateur système qui a déjà travaillé avec une virtualisation basée sur un hyperviseur comme Hyper-V n’aura aucun problème pour faire fonctionner LXC. L’ensemble du dispositif, de la création des modèles de conteneurs et leur déploiement et la configuration du système d’exploitation à la mise en réseau en passant par le déploiement des applications, reste le même. Tous les scripts et les flux de travail conçus pour les machines virtuelles peuvent également être utilisés pour les Linux Container. Les développeurs n’ont ainsi pas de nouvelles solutions et de nouveaux outils sur mesure, mais peuvent continuer à travailler sans problème dans un environnement familier et avec leurs propres scripts et flux de travail automatisés.

Un inconvénient majeur de LXC se situe au niveau de la gestion de la mémoire : bien que différents backend de mémoire (ivm, overlayfs, zfs et btrfs) soient pris en charge, par défaut, la mémoire est stockée directement sur le rootfs. Il manque une option d’enregistrement pour les images. D’autres plateformes de conteneurs offrent des solutions plus intelligentes et plus flexibles pour le stockage des conteneurs et la gestion des images.

Quand utilise-t-on LXC ?

LXC est un projet en open source soutenu financièrement par Canonical, l’entreprise derrière la distribution de Linux Ubuntu. Le plus grand soutien à ce projet vient cependant de sa propre communauté qui développe ensemble des versions stables et des mises à jour de sécurité et fait avancer le projet. Différentes éditions de LXC bénéficient d’ailleurs déjà d’un support durable et de mises à jour de sécurité régulières. Les autres versions sont maintenues au mieux, généralement jusqu’à la sortie d’une version plus récente et plus stable.

Dans la plupart des cas, les Linux Containers sont utilisés comme technologie de conteneurs additionnelle de soutien. Toutefois, ce n’est pas inhabituel dans ce domaine, car contrairement aux machines virtuelles, les conteneurs sont encore considérés comme une technologie assez récente. Il faut néanmoins noter que le nombre de fournisseurs de solutions de conteneurs augmente continuellement et avec eux l’écosystème autour de cette technologie.

LXC est aujourd’hui une alternative pertinente aux applications traditionnelles existantes, qui s’adresse plus particulièrement aux administrateurs de machines virtuelles. La transition d’une machine virtuelle à une technologie de conteneurs est plus facile avec Linux Container qu’avec d’autres techniques de conteneurs.

Existe-t-il des alternatives à Linux Container ?

L’alternative la plus populaire à LXC est Docker. La plateforme basée sur les conteneurs Linux a été développée en continu au cours des dernières années et fonctionne désormais sur les systèmes Windows. Ainsi les plus gros fournisseurs Cloud comme Google IBM, AWS et Azure assurent la prise en charge native de Docker.

OpenVZ est une autre alternative de conteneurs (Linux) connue pour la virtualisation intégrale de serveurs. Comme LXC, OpenVZ utilise le noyau du système d’exploitation hôte et met à disposition des utilisateurs les serveurs virtuels dans des environnements isolés.

KVM est une technologie de virtualisation open source déjà intégrée dans Linux. KVM signifie Kernel-based Virtual Machine (machine virtuelle basée sur le noyau). Cela permet de transformer Linux en hyperviseur, ce qui permet à la machine hôte de faire fonctionner plusieurs environnements isolés.

Kubernetes est à l’origine issu de Google qui était l’un des premiers soutiens de la technologie de conteneurs Linux. Cette plateforme open source automatise l’exploitation de conteneurs Linux. Des groupes entiers d’hôtes, sur lesquels fonctionnent les conteneurs, sont regroupés en cluster et peuvent ainsi être gérés facilement.

Note

LXC et LXD sont étroitement liés et il est difficile d’évoquer l’un sans l’autre. Ces deux termes et ces deux technologies sont difficiles à différencier. LXD est un prolongement de LXC qui contient notamment un système daemon.