Featured image of post Les artefacts OCI comme base de machines LXC sur Proxmox 9.1, enfin ?

Les artefacts OCI comme base de machines LXC sur Proxmox 9.1, enfin ?

Ecrit par ~ zwindler ~

Contexte

Il y a quelques jours, la dev team de Proxmox VE a annoncé une nouvelle version (la 9.1) dont la nouvelle fonctionnalité majeure est l’ajout du support des artefacts OCI comme base pour créer des containers LXC.

Une fonctionnalité attendue depuis TREEEEES longtemps, puisqu’en théorie cela ouvre enfin la porte au lancement de containers de type “Docker” dans Proxmox, ce que les devs de Proxmox avaient toujours refusé.

C’est d’ailleurs la raison pour laquelle un de mes articles de blog cartonne le plus sur Google (snif, bientôt la fin de la gloire) :

Create LXC containers from OCI images

Proxmox VE 9.1 integrates support for Open Container Initiative (OCI) images, a standard format for container distribution. Users can now download widely-adopted OCI images directly from registries or upload them manually to use as templates for LXC containers. Depending on the image, these containers are provisioned as full system containers or lean application containers.

On teste ? D’abord les prérequis

Du coup, je suis curieux, comment ça fonctionne ?

D’abord, il faut aller pré-télécharger l’image qui vous intéresse dans votre stockage (pouvant accueillir des “CT Templates”).

Truc fun, il y a un bouton qui s’appelle “Query tags”, qui j’imagine permet de récupérer une liste des tags. Bon ben, ça commence mal, ça ne fonctionne pas (en tout cas pas sur docker.io…).

command 'skopeo list-tags docker://docker.io/zwindler/prime-calculator' failed: exit code 1 (500)

D’ailleurs, skopeo est justement une des dépendances utilisées dans mon article “hack proxmox+docker” et qui permet de manipuler (télécharger surtout) des containers depuis des registries distantes.

On ne perd pas de temps et on essaie de pull en mettant le tag manuellement, ça fonctionne :

Création du container LXC

Maintenant que le template (l’image OCI) est disponible sur notre stockage, on peut créer un container LXC comme d’habitude. On clique sur “Create CT”, on donne un CT ID, un password :

Pour le template, on choisit notre artefact OCI :

Et on valide. Proxmox devrait créer notre container :

Ça ne marche pas (encore)

Au-delà du premier petit bug pas grave, je n’ai pas encore réussi à démarrer un container LXC sur base OCI avec Proxmox VE 9.1 car je suis tombé sur 2 bugs.

Premier bug : image “from scratch”

D’abord, mon image prime-calculator n’est même pas créée.

TASK ERROR: unable to create CT 106 - Error while extracting OCI image: Unknown layer digest sha256:2bc4d17e1eb16f6b52acbafeb6d86c8f3eaf9588a5e2a7a245b6bb1d85e93396 found in rootfs.diff_ids: Unknown layer digest sha256:2bc4d17e1eb16f6b52acbafeb6d86c8f3eaf9588a5e2a7a245b6bb1d85e93396 found in rootfs.diff_ids

Bon, admettons. Mon image, c’est un binaire “from scratch”, sans rien à part le binaire, et je me suis peut-être trompé quelque part…

Deuxième bug : impossible de démarrer

Cependant, même avec des images connues, le container est bien créé :

Mais impossible de le démarrer :

problem with monitor socket, but continuing anyway: got timeout

TASK ERROR: unable to get PID for CT 104 (not running?)

Même erreur avec la ligne de commande

pct start 151 --debug
problem with monitor socket, but continuing anyway: got timeout

lxc_start_main: 257 Container is already running
- Read uid map: type u nsid 0 hostid 100000 range 65536
INFO     confile - ../src/lxc/confile.c:set_config_idmaps:2295 - Read uid map: type g nsid 0 hostid 100000 range 65536
ERROR    lxc_start - ../src/lxc/tools/lxc_start.c:lxc_start_main:257 - Container is already running

unable to get PID for CT 151 (not running?)

Après investigation (laborieuse), il se trouve que c’est un problème AppArmor. Je ne sais pas si c’est moi qui l’ai causé avec mes bidouilles ou si c’est un bug plus généralisé pour l’instant (probablement l’option 1, mais 2 n’est pas impossible non plus…)

Nov 23 10:37:26 beauharnois01 systemd[1]: Started pve-container-debug@151.service - PVE LXC Container: 151.
Nov 23 10:37:27 beauharnois01 kernel: audit: type=1400 audit(1764067047.008:175): apparmor="DENIED" operation="create" class="net"
Nov 23 10:37:27 beauharnois01 kernel: audit: type=1400 audit(1764067047.008:176): apparmor="DENIED" operation="create" class="net"
Nov 23 10:37:27 beauharnois01 systemd[1]: pve-container-debug@151.service: Deactivated successfully.
Nov 23 10:37:37 beauharnois01 pct[21369]: unable to get PID for CT 151 (not running?)

Le workaround temporaire (et cracra) est de désactiver le profil appArmor pour lxc-start, et supprimer les éventuels fichiers / process zombies.

apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start

ps aux | grep "lxc-start" | grep "151" | awk '{print $2}' | xargs -r kill -9
rm -f /var/lib/lxc/151/config.lock
rm -f /run/lxc/lock/var/lib/lxc/151

Note : On peut aussi le désactiver de manière permanente, mais c’est évidemment quelque chose à ne pas faire.

À partir de là, le container est accessible, parfois en console (ça dépend du container)

Conclusion

À voir si les problèmes que j’ai rencontrés venaient uniquement de mes serveurs, ou si d’autres utilisateurs rencontrent les mêmes.

En bonus, un autre article en anglais qui m’a fait persévérer quand j’ai compris que ça marchait chez certains :

Note : l’article m’a permis de redécouvrir la commande pct enter CTID qui permet de se logger au container.

En attendant, vous avez toujours mon hack ;-)

Licensed under CC BY-SA 4.0

Vous aimez ce blog ou cet article ? Partagez-le avec vos amis !   Twitter Linkedin email Facebook

Vous pouvez également vous abonner à la mailing list des articles ici

L'intégralité du contenu appartenant à Denis Germain (alias zwindler) présent sur ce blog, incluant les textes, le code, les images, les schémas et les supports de talks de conf, sont distribués sous la licence CC BY-SA 4.0.

Les autres contenus (thème du blog, police de caractères, logos d'entreprises, articles invités...) restent soumis à leur propre licence ou à défaut, au droit d'auteur. Plus d'informations dans les Mentions Légales

Généré avec Hugo
Thème Stack conçu par Jimmy