La première version du projet Incus a été présentée, au sein duquel la communauté Linux Containers développe un fork du système de gestion de conteneurs LXD, créé par l'ancienne équipe de développeurs qui avaient initialement conçu LXD. Le code d'Incus est écrit en Go et distribué sous la licence Apache 2.0.
Rappelons que la communauté des conteneurs Linux a supervisé le développement de LXD avant que la société Canonical ne décide de développer LXD séparément en tant que projet commercial. L'objectif du fork est de fournir une alternative gérée par la communauté indépendante au projet LXD, contrôlé par la société Canonical. Dans le cadre du projet Incus, il est également prévu de corriger certaines erreurs conceptuelles survenues lors du développement de LXD qui n'avaient auparavant pas pu être corrigées sans compromettre la rétrocompatibilité.
Incus fournit des outils pour la gestion centralisée des conteneurs et des machines virtuelles, déployés tant sur un hôte unique que dans un cluster de plusieurs. serveurs. Le projet est réalisé sous la forme d'un processus en arrière-plan qui reçoit des requêtes par réseau via une API REST et prend en charge différents backends de stockage (arborescence de répertoires, ZFS, Btrfs, LVM), des instantanés avec capture d'état, la migration en direct des conteneurs actifs d'une machine à une autre et des outils de stockage d'images de conteneurs. En tant qu'exécutable pour le lancement des conteneurs, l'outil LXC est utilisé, qui comprend la bibliothèque liblxc, un ensemble d'utilitaires (lxc-create, lxc-start, lxc-stop, lxc-ls, etc.), des modèles pour construire des conteneurs et un ensemble de liaisons pour divers langages de programmation. L'isolation est réalisée à l'aide des mécanismes intégrés du noyau Linux (espaces de noms, cgroups, Apparmor, SELinux, Seccomp).
En termes de fonctionnalités, la première version d'Incus correspond à la mise à jour récemment publiée de LXD 5.18, axée principalement sur le renommage et la réorganisation de la base de code, ainsi que sur la suppression des fonctionnalités obsolètes. Dans cette nouvelle version, des changements spécifiques à Incus sont également remarqués dans l'interface de ligne de commande et l'API, qui n'ont pas pu être intégrés dans LXD en raison des exigences de compatibilité descendante. À l'avenir, les développeurs prévoient de transférer des améliorations et corrections utiles depuis la base de code de LXD, tout en ajoutant également leurs innovations originales, qui pourraient, si Canonical le souhaite, être portées dans LXD.
Les changements les plus notables :
- La transition vers le moteur SQL intégré Cowsql a été réalisée — un fork de Dqlite, créé par l'auteur original de Dqlite pour les mêmes raisons que celles ayant conduit à la création d'Incus (se libérer de l'influence de Canonical). Cowsql est compatible avec SQLite, prend en charge la réplication des données, la récupération automatique après des pannes et assure la résilience en séparant les gestionnaires sur plusieurs nœuds.
- Une commande « incus snapshot » a été ajoutée à l'interface de ligne de commande pour gérer les instantanés (remplace les commandes lxc séparées snapshot et restore). Avec « incus snapshot », il est possible d'effectuer des opérations de création, suppression, affichage de la liste, renommage et restauration d'un instantané.
- La logique de traitement des commandes « incus config trust add » et « incus cluster add » a été modifiée, acceptant désormais un argument au nom et retournant un jeton correct. Les opérations liées aux certificats via la commande « incus config trust add » ont été déplacées vers une commande distincte « incus config trust add-certificate ».
- Une commande « incus admin » a été ajoutée, exemptant l'administrateur de la nécessité de faire appel directement aux commandes lxc et lxd. Les sous-commandes suivantes sont disponibles :
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- Les points d'accès obsolètes à l'API /1.0/containers et /1.0/virtual-machines ont été supprimés et remplacés par /1.0/instances.
- Le dispositif /dev/lxd a été remplacé par /dev/incus, les mentions de lxd dans le code ont été remplacées par incus.
- Type configuration du serveur remplacé de «map[string]any» à «map[string]string». L'ancienne méthode d'authentification core.trust_password a été abandonnée (elle a été remplacée par l'authentification basée sur les tokens), ce qui gênait l'utilisation du type «map[string]string».
- Les fonctions obsolètes *Container ont été supprimées de l'API, et ont été remplacées par les fonctions *Instance après la mise en œuvre de la gestion des machines virtuelles (par exemple, utilisez CreateInstance au lieu de CreateContainer).
- Ajout de l'utilitaire lxd-to-incus pour la migration de LXD vers Incus (la conversion automatique des fichiers de configuration est prise en charge, à partir de la version LXD 4.0 jusqu'à 5.18). Le transfert de clusters n'est actuellement pas pris en charge.
- La version minimale prise en charge du langage Go est maintenant 1.20.
- La prise en charge de certaines fonctionnalités liées à Ubuntu ou dépendant d'un logiciel obsolète ou non pris en charge a été arrêtée :
- La prise en charge des enveloppes Ubuntu Fan (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), qui dépendent des patches du noyau utilisés uniquement dans Ubuntu, a été supprimée.
- La prise en charge de shiftfs, lié aux paquets avec noyau pour le système de fichiers virtuel Ubuntu pour le mappage des points de montage avec des espaces de noms d'identifiants utilisateurs (user namespace), a été supprimée.
- La prise en charge du système d'authentification Candid, spécifique aux produits Canonical, a été supprimée.
- La prise en charge de l'implémentation propriétaire du mécanisme d'authentification RBAC (Contrôle d'accès basé sur les rôles), créée par Canonical à partir de Macaroons et Candid, a été supprimée.
- Les composants pour l'intégration avec MAAS (Metal-as-a-Service), un outil pour le déploiement rapide de configurations Ubuntu, ont été supprimés.
- Le concept d'accès au serveur par un mot de passe de confiance (core.trust_password) a été supprimé.
Source : opennet.ru
