L’objectif de ce petit billet est de Déployer sous Proxmox une distribution Linux « immuable » (et vous la présenter au passage), de la récupération de l’image ISO jusqu’à la connexion à la machine.
Un peu comme Talos Linux, que je t’avais présenté il y a quelques semaines, voici Flatcar Container Linux : une distribution minimale conçue pour Docker utilisant le runtime containerd. Son originalité ? Elle se déploie uniquement via le système « Butane » (qui prend en entrée un YAML lisible par un humain, selon la terminologie Flatcar), avant de générer, via un outil publié en Docker (aussi), un fichier de configuration YAML bien plus « machine-friendly » (et bien moins lisible, sauf pour les barbus qui font ça quotidiennement 😉).
La procédure sous Proxmox est relativement simple et repose en grande partie sur Cloud-Init (que vous allez découvrir dans ce tutoriel si ce n’est pas déjà le cas). Cloud-init, c’est l’outil universel pour configurer les distributions Linux compatibles : IP, DNS, passerelle… le strict minimum pour commencer à interagir avec la machine en somme.
Contrairement à Talos Linux, qui est une distribution pilotable et modifiable après son instalation, Flatcar est plutot destinée au déploiement initial, genre « Fire and forget ». Par ailleurs les mises à jour sont totalement automatiques. Je n’ai pas eu l’occasion de tester leur procédure, mais je vous mets tout de même un extrait de leur FAQ pour comprendre :
« If the image is immutable, how does it get updated? Flatcar uses the USR-A and USR-B update mechanism, first introduced by ChromeOS. There are two partitions where the /usr/ filesystem can be deployed. One of them is used as the active /usr filesystem, while the other stays in stand-by. When a new Flatcar Container Linux version is released, the update payload is deployed to the inactive /usr/ partition. The next time the machine reboots, it mounts this other partition and boots into a fully updated system. If for any reason something goes wrong during the boot process, the system automatically falls back to the previous /usr/ partition. »
Pour simplifier, il existe deux partitions /user, une active et une inactive. Lorsqu’une nouvelle mise à jour est présentée, la partition inactive actuelle est déployée avec la nouvelle image, ensuite un reboot plus tard, la partition /usr est swappée avec la précédente.
Bon, on l’install cette mini distro ? On va principalement travailler avec la cli qemu même si l’essentiel peut être réalisé en interactif.
Vous téléchargez l’image officielle de production et par ailleurs, vous créez votre enveloppe de VM sans disque avec le minimum de spécifications :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
root@lancelot:~ wget https://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_proxmoxve_image.img --2026-06-02 11:00:22-- https://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_proxmoxve_image.img Resolving stable.release.flatcar-linux.net (stable.release.flatcar-linux.net)... 139.144.160.76 Connecting to stable.release.flatcar-linux.net (stable.release.flatcar-linux.net)|139.144.160.76|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://flatcar.cdn.cncf.io/stable/amd64-usr/4593.2.2/flatcar_production_proxmoxve_image.img [following] --2026-06-02 11:00:23-- https://flatcar.cdn.cncf.io/stable/amd64-usr/4593.2.2/flatcar_production_proxmoxve_image.img Resolving flatcar.cdn.cncf.io (flatcar.cdn.cncf.io)... 172.67.163.59, 104.21.50.129, 2606:4700:3035::6815:3281, ... Connecting to flatcar.cdn.cncf.io (flatcar.cdn.cncf.io)|172.67.163.59|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 500301824 (477M) [application/octet-stream] Saving to: ‘flatcar_production_proxmoxve_image.img’ flatcar_production_proxmoxve_image.img 100%[==================================================================================================>] 477.12M 36.2MB/s in 14s 2026-06-02 11:00:39 (34.4 MB/s) - ‘flatcar_production_proxmoxve_image.img’ saved [500301824/500301824] root@lancelot:~ qm create 119 --cores 2 --memory 4096 --net0 "tag=200,virtio,bridge=vmbr0" root@lancelot:~ |
Ensuite, on va configurer la VM pour qu’elle soit pile poil à notre gout 🙂 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@lancelot:~ qm disk import 119 flatcar_production_proxmoxve_image.img zfs importing disk 'flatcar_production_proxmoxve_image.img' to VM 119 ... transferred 0.0 B of 12.3 GiB (0.00%) transferred 128.5 MiB of 12.3 GiB (1.02%) transferred 273.4 MiB of 12.3 GiB (2.17%) transferred 418.3 MiB of 12.3 GiB (3.32%) (...) transferred 12.3 GiB of 12.3 GiB (100.00%) unused0: successfully imported disk 'zfs:vm-119-disk-0' root@lancelot:~ qm set 119 --scsi0 zfs:vm-119-disk-0 update VM 119: -scsi0 zfs:vm-119-disk-0 root@lancelot:~ qm disk resize 119 scsi0 +30G root@lancelot:~ qm set 119 --boot order=scsi0 update VM 119: -boot order=scsi0 root@lancelot:~ qm set 119 --ide2 zfs:cloudinit update VM 119: -ide2 zfs:cloudinit ide2: successfully created disk 'zfs:vm-119-cloudinit,media=cdrom' generating cloud-init ISO root@lancelot:~ qm set 119 --serial0 socket update VM 119: -serial0 socket root@lancelot:~ |
Enfin, on va paramétrer le réseau :
|
1 2 3 4 5 |
root@lancelot:~ qm set 119 --ipconfig0 ip=dhcp update VM 119: -ipconfig0 ip=dhcp root@lancelot:~ qm set 119 --sshkey .pubkey update VM 119: -sshkeys ssh-rsa%20AAAAB3NzaC1yc2Exxxxxxxxx root@lancelot:~ |
… si vous préférez vous pouvez choisir les IP en manuel ainsin que la paramtrage de la stack IPv6 (référez-vous à la documentation cloud-init ou proxmox).
Enfin, il vous suffit de booter votre VM : celle-ci va s’initialiser avec les paramètres fournis, redimensionner son disque (qu’on a étendu, rappelez-vous), puis rendre la main. Comme j’ai ajouté une interface série, vous pouvez utiliser la connexion à la console via xterm.js (rappelez-vous mon astuce d’il y a une quinzaine de jours… c’est dingue comme tout est lié ! 😉).
Au final, vous avez accès à la nouvelle VM en SSH avec l’utilisateur « core » et votre clé SSH. Docker est directement disponible, et containerd est prêt à démarrer les conteneurs que vous lui confierez.
Cet article était surtout consacré à Proxmox… même si Flatcar a servi de parfait prétexte pour vous montrer une utilisation plus poussée de la solution. Et, comme vous l’avez compris, ce n’est que le début : je vais me concentrer sur ce sujet pendant plusieurs semaines. 😊
Finalement, jetez un œil à Flatcar, qui me semble être une distribution immuable promue par la CNCF et qui a de l’avenir !
Références :
– Flatcar, une autre distribution Immuable : https://www.flatcar.org
– Talos Linux : https://www.siderolabs.com/talos-linux
– Mon article sur Talos : https://vblog.io/talos-lusine-a-nodes
– La doc de la cli QM (qemu) chez Proxmox : https://pve.proxmox.com/pve-docs/qm.1.html
