Virtualisation

KVM ou LXC sur Proxmox : quand choisir une VM, quand choisir un conteneur

Guide décisionnel pour arrêter de tâtonner. Différences d'isolation, conséquences sécurité du noyau partagé, piège Docker dans LXC, profils AppArmor et privilèges, empreinte mémoire comparée et grille de décision en 5 questions.

Rack serveur séparé en deux moitiés visuellement contrastées : à gauche des machines virtuelles compactes et isolées, à droite des conteneurs légers empilés, ambiance technique
Sommaire (15 sections)
  1. Ce que fait réellement chaque technologie
  2. KVM : virtualisation complète
  3. LXC : conteneurs Linux natifs
  4. Le partage de noyau : avantage et risque
  5. Le piège Docker dans LXC
  6. Privileged vs unprivileged et AppArmor
  7. Unprivileged (recommandé par défaut)
  8. Privileged (à éviter sauf cas exceptionnel)
  9. Empreinte mémoire et CPU : chiffres concrets
  10. Vaultwarden (gestionnaire de mots de passe Bitwarden)
  11. Nextcloud (avec PHP-FPM + Nginx + cache OPcache)
  12. PostgreSQL 16 (instance dédiée, shared_buffers 512 Mo)
  13. Grille de décision en 5 questions
  14. Règles de pouce par typologie de service
  15. Conclusion

La grande force de Proxmox VE (et accessoirement sa plus grande source de confusion pour les nouveaux utilisateurs), c'est qu'il propose deux technologies de virtualisation sur le même hôte : les machines virtuelles KVM et les conteneurs Linux LXC. Sur le papier, on pourrait croire que c'est un choix de goût. En pratique, choisir l'un ou l'autre a des conséquences directes sur la sécurité, la densité, les performances et la maintenabilité de votre infrastructure.

Cet article remet à plat ce que fait réellement chaque technologie, où sont les vrais risques de sécurité (notamment le piège classique Docker-dans-LXC), comment configurer un LXC correctement, et donne une grille de décision en 5 questions pour ne plus jamais hésiter.

Ce que fait réellement chaque technologie #

KVM : virtualisation complète #

KVM (Kernel-based Virtual Machine) crée une machine virtuelle au sens strict : chaque VM a son propre noyau Linux (ou Windows, ou BSD), son propre kernel space, ses propres pilotes, sa propre table de processus. L'hyperviseur Proxmox parle au matériel via les extensions matérielles VT-x ou AMD-V, et la VM ne « voit » qu'un matériel virtualisé qui lui est dédié. L'isolation est binaire : ce qui se passe dans la VM ne déborde pas sur l'hôte, sauf vulnérabilité critique de QEMU/KVM (rarissime et patchée immédiatement).

LXC : conteneurs Linux natifs #

LXC (Linux Containers) ne crée pas une machine virtuelle. Il crée un environnement isolé qui partage le noyau Linux de l'hôte Proxmox via les mécanismes natifs du kernel : namespaces (PID, réseau, mount, user, UTS, IPC) et cgroups. Le conteneur a sa propre table de processus, ses propres interfaces réseau virtuelles, son propre système de fichiers. Mais quand un processus du conteneur fait un appel système, c'est le noyau de l'hôte qui répond.

Schéma comparatif de l'anatomie d'une VM KVM (noyau invité dédié, hyperviseur QEMU, matériel virtualisé) et d'un conteneur LXC (partage du noyau hôte via namespaces et cgroups)
À gauche, la VM KVM avec son propre noyau invité. À droite, le LXC qui partage le noyau de l'hôte via namespaces et cgroups.

Le partage de noyau : avantage et risque #

Le partage du noyau est ce qui rend les LXC si légers. Pas de second OS à booter, pas de RAM réservée pour un kernel invité, pas d'overhead de virtualisation matérielle. Un conteneur Debian minimal démarre en 2 secondes et consomme 50 à 80 Mo de RAM au repos. Sur un hôte 32 Go, on peut faire tourner facilement 30 services indépendants dans 30 LXC distincts.

Le piège Docker dans LXC #

C'est probablement la mauvaise pratique la plus répandue dans l'écosystème Proxmox amateur : créer un LXC Debian, y installer Docker, puis y faire tourner toute la stack applicative en Docker Compose. Techniquement, ça marche. Officiellement, ce n'est ni supporté ni recommandé par les développeurs Proxmox.

Pourquoi ? Parce qu'on empile alors deux couches de partage de noyau (LXC + Docker), ce qui multiplie les vecteurs d'évasion. De plus, Docker a besoin de capabilities Linux que les LXC unprivileged ne donnent pas : il faut donc soit utiliser un LXC privileged (mauvaise idée sécurité), soit activer des lxc.cap.keep qui élargissent la surface d'attaque, soit jouer avec fuse-overlayfs qui dégrade les performances I/O.

Privileged vs unprivileged et AppArmor #

Unprivileged (recommandé par défaut) #

  • Le root du conteneur (UID 0) est mappé sur un UID non-privilégié de l'hôte (typiquement 100000).
  • Une évasion vers l'hôte ne donne aucun privilège réel.
  • Profil AppArmor restrictif appliqué automatiquement.
  • Limitation : certains montages exotiques (NFS root, FUSE) demandent une configuration supplémentaire.

Privileged (à éviter sauf cas exceptionnel) #

  • Le root du conteneur reste UID 0 sur l'hôte.
  • Une vulnérabilité dans un service en root du LXC donne directement le contrôle root de l'hôte.
  • À réserver aux conteneurs système où vous contrôlez 100 % du code et acceptez le risque.
  • Ne jamais utiliser pour héberger une application publique exposée à Internet.
Bash
# Verifier le mode d'un LXC existant (extrait de /etc/pve/lxc/100.conf)
cat /etc/pve/lxc/100.conf | grep -E 'unprivileged|features'

# Sortie attendue pour un unprivileged :
# unprivileged: 1
# features: nesting=0

Empreinte mémoire et CPU : chiffres concrets #

Les comparaisons théoriques restent abstraites. Voici quelques mesures réelles prises sur un hôte Proxmox 8 avec Debian 12 comme guest, au repos après initialisation complète des services.

Vaultwarden (gestionnaire de mots de passe Bitwarden) #

  • LXC unprivileged Debian : 80 à 130 Mo RAM, 0,1 % CPU au repos. Démarrage en 3 secondes.
  • VM KVM Debian : 480 à 600 Mo RAM (dont 350 pour le noyau et systemd invités), 0,3 % CPU. Démarrage en 25 secondes.

Nextcloud (avec PHP-FPM + Nginx + cache OPcache) #

  • LXC unprivileged : 250 à 400 Mo RAM au repos, monte à 1,2 Go en charge sur 10 utilisateurs simultanés.
  • VM KVM : 700 Mo à 1 Go RAM au repos, 1,8 Go en charge équivalente.

PostgreSQL 16 (instance dédiée, shared_buffers 512 Mo) #

  • LXC : 550 à 700 Mo RAM. Mais isolation faible : à éviter pour un Postgres critique multi-tenant.
  • VM KVM : 1,1 à 1,3 Go RAM. Isolation totale, recommandée pour la production.
Comparaison de densité sur un même serveur Proxmox 32 Go : à gauche 6 VMs KVM, à droite 25 conteneurs LXC, illustrant l'écart d'empreinte mémoire
Sur un même hôte 32 Go, on tient confortablement 6 VMs KVM ou 25 LXC bien dimensionnés. Le choix conditionne directement la densité applicative.

Grille de décision en 5 questions #

  1. Le service va-t-il manipuler des données critiques ou être exposé à Internet ? → VM KVM (isolation forte).
  2. Avez-vous besoin de faire tourner Docker, Kubernetes, ou un OS autre que Linux ? → VM KVM obligatoire.
  3. Le service est-il un démon Linux simple, contrôlé par vous, à empreinte mémoire faible ? → LXC unprivileged.
  4. Cherchez-vous à maximiser la densité (20+ services sur un même hôte) ? → LXC unprivileged, en assumant le risque kernel.
  5. Le service va-t-il nécessiter un passthrough matériel (GPU, USB, carte PCIe) ? → VM KVM, le seul mode supporté proprement.

Règles de pouce par typologie de service #

  • Base de données productive (Postgres, MySQL, MongoDB) : VM KVM dédiée.
  • Reverse proxy / WAF (Nginx, Traefik, Caddy) : LXC unprivileged, ou VM si en frontal Internet exposé.
  • Application web stateless (Nextcloud, Vaultwarden, BookStack, Outline) : LXC unprivileged.
  • Services réseau d'infrastructure (DNS, DHCP, RADIUS) : LXC unprivileged.
  • Médias et transcodage (Jellyfin, Plex avec accélération matérielle GPU) : VM KVM avec passthrough.
  • Domotique critique (Home Assistant avec Zigbee USB) : VM KVM avec passthrough USB.
  • Environnement de dev ou test à isoler fort : VM KVM jetable.
  • Tout ce qui demande Docker : VM KVM, jamais LXC.

Conclusion #

KVM et LXC ne sont pas concurrents : ils sont complémentaires. Un hôte Proxmox bien architecturé mélange typiquement quelques VMs lourdes (bases de données, services Docker, plateformes critiques) avec une majorité de LXC unprivileged pour tout ce qui est démon Linux léger et contrôlable. C'est cette dualité, et la facilité avec laquelle Proxmox permet de basculer de l'un à l'autre, qui en fait un outil au-dessus de la concurrence pour bâtir un cloud privé souverain.

Une fois la bonne technologie choisie pour chaque service, la priorité suivante devient la sauvegarde, qui ne pardonne aucune erreur d'architecture. Le guide PBS détaille comment protéger l'ensemble du parc, VMs comme LXC, avec déduplication, rétention multi-niveaux et résistance aux ransomware.

À propos
À lire ensuite

Articles liés

Sécurité

Pare-feu Proxmox : le piège du firewall=1 qui ne filtre rien

Un audit de notre propre parc l'a montré : des machines avec le pare-feu « activé » sur leur interface étaient en réalité ouvertes au monde. Le pare-feu Proxmox exige deux conditions, pas une, et les règles du datacenter ne protègent jamais les invités. Anatomie du piège, vérification en une commande, et la recette complète.

proxmoxfirewall
Sécurité

Subscription bombing : autopsie d'un formulaire newsletter détourné en relais de spam

Une nuit, quatorze mails de confirmation sont partis d'un site que nous hébergeons vers des adresses qui n'avaient rien demandé. Le captcha était résolu, le plafond par destinataire contourné, le rate-limit inutile, CrowdSec aveugle. Reconstitution complète depuis les logs : ce que le robot faisait, comment on l'a reconnu, et pourquoi la seule vraie parade a été de lui retirer son arme.

sécuritébots
Infrastructure

Autopsie d'une panne NVMe : les condensateurs morts qui ralentissaient tout

Pendant deux mois et demi, un hyperviseur a accumulé des timeouts de réplication sans qu'aucun disque ne soit « mort ». Le coupable : les condensateurs de Power Loss Protection d'un NVMe, tombés en panne en silence. Autopsie complète : du symptôme au smartctl, du remplacement OVH au resilver qui a révélé 20 000 erreurs latentes.

nvmeplp

Une infrastructure infogérée et supervisée 24/7 ?

Bastion, SIEM, correctifs décidés, sauvegardes testées : ce que nous appliquons à nos clients. Premier échange gratuit.

Premier échange gratuit · réponse sous 24 h ouvrées