Podman et Docker dans cloonix

Posté par  (site web personnel) . Édité par Ysabeau 🧶 🧦, Pierre Jarillon et palm123. Modéré par Julien Jorge. Licence CC By‑SA.
Étiquettes :
20
11
jan.
2023
Virtualisation

Cloonix est un logiciel de virtualisation basé principalement sur openvswitch dont le but est de faciliter la construction graphique d’un réseau virtuel avec visualisation de la topologie et interaction par IHM graphique sur cette topologie.

Lors de l’une des dernières dépêches de titre « Cloonix et les conteneurs » du 17/01/22, je vous ai parlé du nouvel objectif d’amélioration de cloonix, commencé en fin 2021 : l’intégration de la techno des conteneurs dans cloonix.

En vue d’atteindre ce but et d’en comprendre les mécanismes internes, il fallait commencer par intégrer dans cloonix la techno de base des conteneurs, et pour cela en premier lieu trouver le bout de code le plus léger ou encore le plus dépouillé qui soit capable de faire tourner un conteneur.

Pour Docker, la brique de base la plus proche des fondations dont l’action se limite à faire tourner un conteneur se nomme génériquement « low level runtime » et le nom de son implémentation est « runc ». Il s’avère que runc n’est pas en C et comme cloonix est en C et n’utilise que des open sources en C, j’ai préféré chercher un « low level runtime » de même fonctionnalité que runc mais en C. C’est ainsi que je suis tombé sur crun qui est exactement cela.

Une fois que crun a tourné correctement dans cloonix, autour du mois d’octobre 2022, il était logique de commencer à s’attaquer à des plus grands noms dans le domaine des conteneurs.

Le code de cloonix supportant crun prend en charge trois blocs fonctionnels qui transforment crun en conteneur :

  1. génération d’un fichier de configuration suivant le format OCI (Open Container Initiative),
  2. gestion des montages permettant à crun d’avoir un système de fichier racine à partir d’une image et,
  3. création des interfaces ethernet fournies au conteneur, ces interfaces étant ensuite gérées par l’openvswitch intégré à cloonix.

Pour ce qui est de Docker/Podman, le fichier de configuration OCI et les montages des images sont déjà gérés par Docker/Podman, la prise en charge par cloonix de Docker/Podman se limite donc à assurer la gestion des interfaces ethernets, pour cela, le code déjà construit pour crun a été tout à fait adapté pour gérer aussi les 2 autres types de conteneurs. Profitons de cette dépêche pour donner un aperçu de cette gestion des interfaces ethernets dans le cas des conteneurs.

Cloonix n’est guère qu’un configurateur évolué qui utilise la richesse apportée par l’écosystème de l’open-source et qui tire profit principalement d’openvswitch.

Cloonix est lancé avec un nom de réseau, openvswitch utilise ce nom comme « net namespace », c’est-à-dire que le logiciel openvswitch est plongé dans un espace réseau privé. Quand il faut créer les interfaces d’un conteneur, la première étape est la création par une commande Linux d’une paire de ports dans le système, voila la commande pour faire deux interfaces pairées « ip link add name paire1 type veth peer paire2 ». Cette commande étant effectuée, un paquet Ethernet émis dans paire1 est reçu par paire2 et réciproquement.

En seconde étape, paire1 est plongée dans l’espace privé réseau d’openvswitch et paire2 est plongée dans l’espace privé réseau du conteneur, ces plongeons dans différents espaces n’affectent pas le passage d’un paquet Ethernet d’une paire vers l’autre, c’est un « trou de ver » entre deux univers.

En troisième étape, quand l’utilisateur veut connecter l’interface du conteneur, cloonix demande à openvswitch de le faire à travers un bridge de son espace réseau privé, c’est ainsi que la magie d’openvswitch peut se faire.

Pour terminer, quelques chiffres de performance mesurées par iperf3 sur un Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz : kvm à kvm : 20 Gigabits/seconde et conteneur à conteneur: 50 Gigabits/seconde.

Aller plus loin

  • # Trucs et infos manquantes

    Posté par  . Évalué à 5.

    L'auteur a modestement oublié d'indiquer la license et un tas de petits trucs sympas :

    • Cloonix est en AGPL3.
    • Vous devez installer à partir des sources, aucune distribution n'empaquête Cloonix, mais le script d'installation est bien fait : il télécharge les paquets de votre distribution puis compile et installe dans /usr/local
    • La doc qui-n'est-pas-à-jour est à jour.
    • La doc est installée aussi.
  • # En C

    Posté par  (site web personnel) . Évalué à 1.

    "Il s’avère que runc n’est pas en C et comme cloonix est en C et n’utilise que des open sources en C"

    Wouw.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.