LXC: une virtualisation de type isolateur.

Temps de lecture approximatif : 6 minutes

LXC: Linux Containers

LXC est actuellement le système de virtualisation que je privilégie et dont j’ai eu l’occasion d’intégrer dans mon activité professionnelle.

Définition

(Sources: Wikipédia et http://blog.blaisethirard.com)

LXC, contraction de l’anglais Linux Containers  est un système de virtualisation, utilisant l’isolation comme méthode de cloisonnement au niveau du système d’exploitation.

Ce système est similaire aux autres systèmes de virtualisations au niveau du système d’exploitation comme openVZ, Linux-VServer sur Linux ou comme les BSD jails de FreeBSD, ou encore les zones Solaris.
Une solution de virtualisation de type isolateur permet la virtualisation par container au niveau du noyau. LXC est très récent et remplace Linux-VServer et OpenVZ.  Aussi, LXC est dès à présent intégré au noyau, ce qui n’a jamais été le cas des deux solutions citées précédemment.
Le conteneur apporte une virtualisation de l’environnement d’exécution (Processeur, Mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de machine virtuelle.

L’isolateur (conteneur) tire avantage de la possibilité, unique sous UNIX et Linux, de partager le noyau avec d’autres processus du système ainsi qu’ une plus ou moins grande partie du système hôte. Cette virtualisation à noyau partagé utilise une fonctionnalité nommée chroot. Cette fonctionnalité modifie le système de fichiers racine d’un processus pour l’isoler de manière à fournir une certaine sécurité. On parle alors de « prison » chroot (change root).
Un programme, ensemble de programmes ou système dans le cas de virtualisation à noyau partagé fonctionnant dans un environnement chroot est protégé en faisant croire au système emprisonné qu’il fonctionne sur une machine réelle avec son propre système de fichiers.
Le mécanisme de chroot a été amélioré pour mimer un système de fichiers entier, de sorte qu’un système entier peut fonctionner dans un chroot, ce qui constitue une machine virtuelle.

LXC repose sur les fonctionnalités des Cgroups du noyau Linux disponibles depuis la version 2.6.24 du noyau. Il repose également sur d’autres fonctionnalités de cloisonnement comme le cloisonnement des espaces de nommage du noyau, permettant d’éviter à un système de connaître les ressources utilisées par le système hôte ou un autre conteneur.  Docker est un gestionnaire de conteneurs initialement basé sur LXC.
La technologie de virtualisation par isolation est très performante du fait du peu d’overhead puisque les environnements virtualisés se partagent le code du noyau.
Le schéma ci-dessous représente  cette technologie:
Linux Containers

Petit focus sur les fonctionnalités Cgroups du noyau Linux

(Sources: Wikipédia)

cgroups (control groups) est une fonctionnalité du noyau Linux pour limiter, compter et isoler l’utilisation des ressources (processeur, mémoire, utilisation disque, etc.).

Ce travail a été initié par des ingénieurs de Google (d’abord Paul Menage et Rohit Seth) en 2006 sous le nom « conteneur de processus» ; à la fin 2007, il a été renommé Control Groups (à cause de la confusion causée par les différentes significations du terme « conteneur » dans le noyau Linux) et intégré à la version 2.6.24 du noyau Linux. Depuis lors, de nombreuses nouvelles fonctionnalités et contrôleurs ont été ajoutés.

Linux_kernel_unified_hierarchy_cgroups_and_systemd

 Fonctionnalités

L’un des buts de la conception de cgroups a été de fournir une interface unifiée à différents cas d’utilisation, en allant du contrôle de simples processus (comme nice) à la virtualisation au niveau du système d’exploitation (comme OpenVZ, Linux-VServer, LXC). Cgroups fournit :

  • Limitation des ressources : des groupes peuvent être mis en place afin de ne pas dépasser une limite de mémoire — cela inclut aussi le cache du système de fichier (en). L’article original a été présenté au Linux Symposium et s’intitule Containers: Challenges with the memory resource controller and its performance
  • Priorisation : certains groupes peuvent obtenir une plus grande part de ressources processeur  ou de bande passante d’entrée-sortie.
  • Comptabilité : permet de mesurer la quantité de ressources consommées par certains systèmes en vue de leur facturation par exemple.
  • Isolation : séparation par espace de nommage pour les groupes, afin qu’ils ne puissent pas voir les processus des autres, leurs connections réseaux ou leurs fichiers.
  • Contrôle : figer les groupes ou créer un point de sauvegarde et redémarrer.

Utilisation

Un groupe de contrôle est une suite de processus qui sont liés par le même critère. Ces groupes peuvent être organisés hiérarchiquement, de façon à ce que chaque groupe hérite des limites de son groupe parent.  Le noyau fournit l’accès à plusieurs contrôleurs (sous-systèmes) à travers l’interface cgroup.  Par exemple, le contrôleur « memory » limite l’utilisation de la mémoire, « cpuacct » comptabilise l’utilisation du processeur, etc.

Les Control groups peuvent être utilisés de plusieurs façons :

  • En accédant au système de fichier virtuel cgroup manuellement
  • En créant et gérant des groupes à la volée en utilisant des outils tels que cgcreate, cgexec, cgclassify (de libcgroup)
  • Le « démon de moteur de règles » qui peut automatiquement déplacer les processus de certains utilisateurs, groupes ou commandes vers un cgroup en respectant ce qui est spécifié dans la configuration.
  • Indirectement à travers d’autres logiciels qui utilisent cgroups, tels que la virtualisation LXC, libvirt, systemd, Open Grid Scheduler/Grid Engine.

La documentation du noyau Linux  contient de nombreux détails sur l’installation et l’utilisation des groupes de contrôle.

Isolation par espace de nommage

Bien que ne faisant pas techniquement partie du travail des groupes de contrôle, une fonctionnalité liée est l’isolation par espace de nommage, dans laquelle des ensembles de processus sont séparés de telle façon qu’ils ne puissent pas « voir » les ressources des autres groupes. Par exemple, un espace de nommage par identifiant de processus (PID) fournit un ensemble distinct d’identifiants de processus dans chaque espace de nommage. Sont aussi disponibles des espaces de nommage par mount, UTS, réseau et SysV IPC. Très tôt dans le développement des groupes de contrôle, le sous-système « ns » a été ajouté, pour intégrer les espaces de nommage et les groupes de contrôle. Si le groupe de contrôle « ns » était monté, chaque espace de nommage aurait dû aussi créer un nouveau groupe dans la hiérarchie des groupes de nommage. Ce fut une tentative qui fut jugée plus tard peu adaptée pour l’API cgroups, et supprimée du noyau.

  • L’espace de nommage par identifiant de processus (PID namespace) fournit l’isolation pour l’allocation des identifiants de processus (PIDs), la liste des processus et de leurs détails. Tandis que le nouvel espace de nom est isolé de ses adjacents, les processus dans son espace de nommage « parent » voient toujours tous les processus dans les espaces de nommage enfants — quoique avec des numéros de PID différents.
  • L’espace de nommage réseau (Network namespace) isole le contrôleur de l’interface réseau (physique ou virtuel), les règles de pare-feu iptables, les tables de routage, etc. Les espaces de nommage réseau peuvent être connectés les uns avec chacun des autres en utilisant le périphérique virtuel Ethernet « veth ».
  • L’espace de nommage « UTS » (“UTS” namespace) permet le changement de nom d’hôte.
  • L’espace de nommage de montage (Mount namespace) permet de créer différents modèles de systèmes de fichiers, ou de créer certains points de montage en lecture-seule.
  • L’espace de nommage IPC (IPC namespace) isole le System V de communication inter-processus entre les espaces de nommage.

Les espaces de nom sont créés avec la commande « unshare » ou un appel système, ou en tant que nouveaux marqueurs dans un appel système « cloné »

Les différences entre LXC et Docker

(source: http://www.flockport.com/lxc-vs-docker/)

lxc-vs-docker1

 Mon scrapbook sur LXC

Pour rappel, ce paragraphe « scrapbook » me permet de partager avec vous les liens sur différents articles qui m’ont aidés ou que j’ai trouvé intéressants.
Merci de me signaler tous liens devenus obsolètes.
Pour certains articles je met à disposition une capture « pdf » des pages Web au cas où le lien viendrait à disparaître ( si si…ça arrive ( ͡~ ͜ʖ ͡°) ).
Je profite au passage pour remercier les auteurs et contributeurs de tous ces sites pour leurs articles très intéressants qui m’ont permis de progresser.

Généralitées

Mes notes en vracs

Page suivante:  Création et utilisation d’un container LXC (mon expérience)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.