Qu’est-ce que LXD ? Gestion des conteneurs avec le Linux Container Daemon

LXD, le « Linux Container Daemon », est un outil de gestion des conteneurs du système d’exploitation Linux. Il a été développé par Canonical, la société à l’origine d’Ubuntu Linux. Canonical poursuit le développement de LXD jusqu’à aujourd’hui et dirige le projet.

LXD est une technologie sœur de LXC, les « Linux Containers ». LXC est une technologies de virtualisation basée sur les conteneurs au niveau du système d’exploitation. Techniquement, LXC combine des espaces de noms isolés et les « cgroups » du noyau Linux pour créer des environnements isolés pour l’exécution du code. Historiquement, LXC a également été à la base de la technologie de virtualisation largement utilisée Docker.

L’un des objectifs fondamentaux du développement de LXD était de rendre la gestion des conteneurs LXC aussi pratique que celle des machines virtuelles. Toutefois, par rapport à l’utilisation d’une machine virtuelle, l’approche basée sur les conteneurs offre des performances supérieures.

LXD permet de configurer et de contrôler les conteneurs du système d’exploitation Linux via un ensemble défini de commandes. LXD est donc adapté à l’automatisation de la gestion des conteneurs de masse et utilisé dans l’informatique en cloud et les centres de données.

Quelles sont les caractéristiques de LXD ?

  • Sécurité : les conteneurs fonctionnent dans des espaces de noms isolés et ne peuvent accéder qu’à des ressources définies.
  • Évolutivité : LXD vous permet de gérer d’un seul conteneur sur votre ordinateur portable à des milliers de conteneurs dans des environnements distribués.
  • Utilisation intuitive : LXD fournit une API simple et claire et un client en ligne de commande correspondant.
  • Basé sur des images Linux : LXD fonctionne avec n’importe quelle image Linux et bénéficie ainsi du grand nombre de distributions Linux existantes.
  • Contrôle sophistiqué des ressources : des restrictions sont définies pour un conteneur pour le CPU, la mémoire, l’utilisation du réseau, l’utilisation du stockage de masse et les ressources du noyau.
  • Accès au matériel du système : si la configuration le permet, les conteneurs peuvent accéder à des périphériques USB, à des GPU et à des supports de stockage de masse, entre autres.
  • Gestion du réseau : les ponts et tunnels du réseau peuvent être créés par configuration.
  • Gestion du stockage de masse : LXD prend en charge divers backends, pools de stockage et volumes de stockage.

Quels sont les avantages et les inconvénients de LXD ?

Le principal avantage est que LXD permet la virtualisation d’un système d’exploitation Linux complet sur une base de conteneur. LXD combine ainsi le confort des machines virtuelles avec la performance des conteneurs.

Contrairement à la plupart des cas d’utilisation basés sur Docker, LXD ne se concentre pas sur la virtualisation d’une seule application (« app virtualization »). C’est plutôt une image du système Linux qui sert de base à chaque conteneur LXD (« virtualisation du système »). Cette solution est avantageuse pour l’administrateur, car elle donne accès à un grand nombre de distributions Linux librement disponibles et permet l’utilisation d’un large éventail d’outils existants.

Toutefois, LXD présente un inconvénient par rapport aux autres technologies de virtualisation : comme tous les conteneurs fonctionnant sur un hôte accèdent au même noyau Linux, LXD Deamond n’est disponible que sous Linux. En outre, LXD ne peut virtualiser Linux qu’en tant que système d’exploitation invité. Toutefois, le client en ligne de commande fonctionne également sur des systèmes d’exploitation non Linux.

L’API REST du démon LXD est accessible sur le réseau. Cela permet de déplacer ou de copier les conteneurs entre les machines. En outre, LXD soutient la création de grappes de machines qui combinent de nombreuses unités de calcul individuelles en un superordinateur virtuel.

Comment fonctionne LXD ?

L’élément central de LXD est le démon privilégié, qui attribue des noms et fonctionne sur le système hôte Linux. Le démon LXD fournit un API REST est disponible via une socket Linux locale. Le démon peut également être accessible sur le réseau par des paramètres de configuration. En parallèle, LXD accède à LXC comme backend via la bibliothèque liblxc et ses go-bindings.

Un client interagit avec le démon via l’API REST. L’API définit un langage avec lequel les conteneurs peuvent être créés, contrôlés et modifiés. Le client le plus simple est l’outil officiel de la ligne de commande. Le client en ligne de commande fournit des commandes pour de nombreuses opérations courantes et accède à l’API REST en interne.

Dans ce qui suit, nous avons compilé quelques commandes LXD de base. Ne vous y trompez pas : le nom de la ligne de commande LXD est lxc, et non lxd. Vous pouvez essayer les commandes vous-même sans avoir à installer le client en ligne de commande sur votre système. Il suffit d’utiliser l’interface basée sur le Web sur le projet linuxcontainers.org.

# Afficher les commandes et les options LXD
lxc
# Afficher les images Ubuntu existantes page par page
lxc image list ubuntu: | less
# Démarrer une instance d’Ubuntu 18.04 en tant que conteneur nommé « Ubuntu »
lxc launch images:ubuntu/18.04 ubuntu
# Lister les conteneurs générés
lxc list
# Configuration de l’affichage pour le conteneur nommé "Ubuntu
lxc config show ubuntu 

Dans quel contexte LXD est-il utilisé ?

En principe, LXD peut être installé sur tout système Linux moderne. D’une part, LXD peut être utilisé sur des ordinateurs privés, d’autre part, le LXD est également utilisé dans les plateformes de cloud computing et les centres de données distribués. L’objectif premier de LXD est de virtualiser un système d’exploitation Linux complet et durable à l’usage. LXD est à l’opposé de Docker, qui se concentre davantage sur les conteneurs à courte durée de vie qui encapsulent une seule application Selon les mots du développeur LXD Stéphane Graber :

Citation

«Those containers will typically be long running and based on a clean distribution image. Traditional configuration management tools and deployment tools can be used with LXD containers exactly as you would use them for a VM, cloud instance or physical machine.

In contrast, Docker focuses on ephemeral, stateless, minimal containers that won’t typically get upgraded or re-configured but instead just be replaced entirely. That makes Docker and similar projects much closer to a software distribution mechanism than a machine management tool.» Stéphane Graber, Source : https://stgraber.org/2016/03/11/lxd-2-0-introduction-to-lxd-112/

Traduction :

ces conteneurs sont généralement durables et basés sur une image standard du système Linux. Les outils traditionnels de gestion de la configuration et du déploiement peuvent être utilisés avec les conteneurs LXD de la même manière que les machines virtuelles, les instances en cloud et les machines physiques.

En revanche, Docker se concentre sur les conteneurs périssables, apatrides et minimaux qui ne sont pas reconfigurés, mais complètement remplacés au besoin. Les projets Docker et similaires ressemblent donc davantage à un mécanisme de distribution de logiciels qu’à un outil de gestion d’une machine entière. (Traduction de IONOS)

Ces conteneurs ont généralement une longue durée de vie et sont conçus pour contrôler un petit nombre de conteneurs, le client en ligne de commande fourni avec le logiciel est adapté. Cependant, il n’est pas prévu pour gérer un grand nombre de conteneurs sur un grand nombre d’hôtes distribués. Pour ces cas d’utilisation, des connexions aux plateformes OpenStack et OpenNebula sont utilisées.

Quels sont les composants de LXD ?

Les principaux composants de LXD sont le démon, l’API REST fournie par ce dernier et le client en ligne de commande. Dans ce qui suit, nous examinerons les entités qui sont principalement utilisées lorsque l’on travaille avec LXD.

Conteneur

Le conteneur est l’abstraction de base fournie par LXD. Un conteneur LXD présente les propriétés suivantes :

  • Un système de fichiers Linux
  • Les paramètres de configuration tels que les limites de ressources, les variables d’environnement, les options de sécurité, etc.
  • Des dispositifs de stockage de masse et de réseau
  • Des profils de configuration dont le conteneur hérite des paramètres
  • Des propriétés générales telles que l’architecture du conteneur, le nom et le fait que le conteneur soit de courte ou de longue durée de vie
  • Les états d’exécution tel que le débit du réseau, l’utilisation de la mémoire, etc.

Instantanés

Comme souvent avec les technologies de virtualisation, des instantanés (« snapshots ») peuvent être créés à partir d’un conteneur. Un instantané est identique au contenant sous-jacent. Les clichés sont « immuables » et ne peuvent être modifiés. Ils ne peuvent être que renommés et supprimés. À partir d’un instantané, il est possible de restaurer l’état exact d’un conteneur.

Images

Bien que LXD soit une technologie basée sur un conteneur, une image du système Linux est utilisée pour créer le conteneur. Par définition, chaque conteneur LXD provient d’une image.

Les images sont généralement des distributions Linux non modifiées comme celles utilisées pour les machines virtuelles ou les instances de cloud. Une image est identifiée de manière unique par son hachage SHA256. Pour rendre l’affectation plus conviviale pour les utilisateurs humains, un nom d’alias peut être défini pour une image.

Les images Linux à utiliser avec LXD peuvent être obtenues en ligne auprès de diverses sources. Les serveurs d’images suivants sont prédéfinis en LXD :

  • Ubuntu : fournit des images Ubuntu stables
  • ubuntu-daily : fournit des ensembles quotidiens d’images Ubuntu
  • Image s : fournit une variété d’images d’autres distributions Linux (géré par la communauté elle-même)

Les images téléchargées par le démon LXD sont automatiquement mises en cache afin qu’elles soient disponibles sans délai pour un usage répété. Sauf configuration contraire, LXD vérifie la version des images téléchargées et télécharge les nouvelles versions si nécessaire. Comme pour le concept de la « Vagrant Box », LXD peut publier un conteneur existant sous la forme d’une nouvelle image.

Profils

Un profil LXD regroupe divers paramètres de configuration des conteneurs. Un profil peut être appliqué à plusieurs conteneurs et plusieurs profils peuvent être appliqués à un conteneur l’un après l’autre. Enfin, la configuration locale des conteneurs est importée. Au cours de ce processus, les valeurs de configuration qui ont été définies plusieurs fois peuvent être écrasées. Cela permet de créer facilement des familles de conteneurs. LXD est livré avec deux profils existants :

  • Le profil défaut est automatiquement appliqué à un conteneur, à moins qu’un profil alternatif ne soit spécifié. Ce profil comprend des paramètres de configuration de base, tels que le dispositif de réseau eth0 du conteneur.
  • Le profil docker est utilisé pour configurer un conteneur LXD qui doit contenir des conteneurs de docker. Le profil fait en sorte que le conteneur LXD charge les modules de noyau nécessaires et règle les paramètres du dispositif. Il permet également l’emboîtement des conteneurs.

Serveurs à distance

LXD est un démon de réseau : le client en ligne de commande peut communiquer avec plusieurs serveurs LXD et serveurs d’images distants. Plusieurs serveurs peuvent être définis comme serveurs à distance par configuration. Ceci permet de copier et de déplacer les conteneurs existants entre les serveurs LXD et d’accéder aux serveurs d’images via les télécommandes. En plus des serveurs d’images déjà présentés dans la section « Images », le client en ligne de commande connaît également le serveur à distance « local » par défaut. Il est utilisé pour communiquer avec le démon LXD local via une socket UNIX.

Quelles sont les alternatives à LXD ?

Aujourd’hui, il existe un large éventail de technologies de virtualisation qui peuvent en principe être utilisées comme alternatives à LXD. Ceux-ci diffèrent en fonction de plusieurs critères, et peuvent être divisés en deux grands groupes. En plus des outils de virtualisation traditionnels basés sur les machines virtuelles, les technologies basées sur les conteneurs sont de plus en plus acceptées. Ici, LXD se distingue et utilise une approche hybride dans laquelle un système d’exploitation Linux entier est virtualisé sur la base d’un conteneur.

Certains outils de virtualisation ont besoin de Linux comme système hôte, tandis que d’autres fonctionnent sur tous les systèmes d’exploitation courants. De même, certains environnements de virtualisation ne supportent que Linux en tant que système invité, alors que d’autres en supportent plusieurs. De nombreuses technologies basées sur les conteneurs se concentrent principalement sur la virtualisation des applications, tandis que les machines virtuelles sont toujours basées sur un système d’exploitation complet.

Comme LXD est basé sur LXC, il est possible d’utiliser une installation LXC « nue » en tant qu’alternative à LXD. Dans ce cas, l’utilisation peut toutefois être moins confortable. Comme aucun démon n’est utilisé sans LXD, la virtualisation ne peut être contrôlée sur le réseau. En outre, il manque alors l’interface uniforme REST-API.

Parmi les outils de virtualisation courants, containerd est probablement le plus comparable à LXD. Ainsi, containerd fonctionne également comme un démon qui fournit une API. Comme LXD, il permet de gérer les conteneurs sur le réseau. La technologie est intégrée dans Docker et est utilisée fréquemment.

En général, il est conseillé de choisir la technologie appropriée en fonction des exigences spécifiques. Voici un aperçu des technologies de virtualisation fréquemment utilisées :

Virtualiseur Type Système d’hébergement Système invité
LXD Conteneur Seulement Linux Seulement Linux
LXC Conteneur Seulement Linux Seulement Linux
containerd Conteneur Linux, Windows Divers / App
Docker Conteneur Linux, macOS, Windows Divers / App
Kubernetes Conteneur Linux, macOS, Windows Divers / App
KVM Machine virtuelle Seulement Linux Linux, Windows
VirtualBox / VMware Machine virtuelle Linux, macOS, Windows Divers