LXD 6.x : orchestration de conteneurs Linux avec profils et clustering

27 mai 2026 — par admin_libra

LXD est un gestionnaire de conteneurs système et de machines virtuelles de nouvelle génération, développé par Canonical. À la différence des conteneurs applicatifs Docker ou Podman, LXD instancie des systèmes Linux complets : chaque conteneur embarque son propre espace utilisateur, son processus init, ses services systemd — à l’instar d’une machine virtuelle, mais avec les performances natives d’un conteneur. La version 6.8, publiée en 2026, est aujourd’hui la référence stable pour les environnements de production Debian et Ubuntu.

Cet article présente deux piliers essentiels de l’orchestration LXD : les profils, qui définissent des configurations réutilisables pour les instances, et le clustering, qui distribue la charge sur plusieurs nœuds physiques avec une base de données distribuée Dqlite. Ces deux mécanismes combinés offrent une infrastructure conteneurisée homogène, scalable et résiliente.

Que vous gériez un parc de conteneurs sur un serveur unique ou que vous construisiez un cluster de plusieurs dizaines de nœuds, LXD fournit une interface unifiée — la commande lxc — et une API REST cohérente pour piloter l’ensemble de l’infrastructure.

Installation et initialisation de LXD

Installation via snap

LXD est distribué via snap, ce qui garantit une version à jour et isolée des dépendances système. Sur Ubuntu, snap est préinstallé. Sur Debian :

# Installer snapd sur Debian
sudo apt install snapd
sudo snap install core

# Installer LXD
sudo snap install lxd

# Vérifier la version installée
lxd --version

Ajoutez votre utilisateur au groupe lxd pour éviter de préfixer chaque commande avec sudo :

sudo usermod -aG lxd $USER
newgrp lxd

Initialisation de base

La commande lxd init guide l’initialisation. Pour une configuration non interactive avec un fichier preseed (recommandé pour l’automatisation) :

cat <<EOF | lxd init --preseed
config: {}
networks:
- name: lxdbr0
  type: bridge
  config:
    ipv4.address: 10.10.10.1/24
    ipv4.nat: "true"
    ipv6.address: none
storage_pools:
- name: default
  driver: zfs
  config:
    size: 50GiB
profiles:
- name: default
  devices:
    eth0:
      name: eth0
      network: lxdbr0
      type: nic
    root:
      path: /
      pool: default
      type: disk
EOF

# Vérifier l'état de l'installation
lxc info

ZFS est le backend de stockage recommandé pour LXD en production : il offre snapshots atomiques, clones rapides et compression native. Pour une présentation approfondie de ZFS, consultez l’article ZFS sur Linux : snapshots, clones et RAID-Z en pratique.

Gestion des profils LXD

Les profils sont des modèles de configuration réutilisables. Chaque instance hérite d’un ou plusieurs profils appliqués dans l’ordre déclaré. Le profil default est assigné automatiquement à toute nouvelle instance.

Anatomie d’un profil

Un profil se compose de deux sections : config (paramètres de l’instance : limites CPU, mémoire, options kernel) et devices (périphériques attachés : réseau, disque, GPU).

# Afficher le profil default
lxc profile show default

Sortie typique :

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

Créer et configurer un profil

Exemple : un profil web limitant CPU et mémoire, adapté aux serveurs applicatifs :

# Créer le profil
lxc profile create web

# Limiter à 2 vCPU et 1 Go de RAM
lxc profile set web limits.cpu 2
lxc profile set web limits.memory 1GiB

# Ajouter une interface réseau
lxc profile device add web eth0 nic network=lxdbr0 name=eth0

# Disque racine avec quota de 20 Go
lxc profile device add web root disk path=/ pool=default size=20GiB

# Vérifier le résultat
lxc profile show web

Pour éditer un profil directement en YAML (ouvre $EDITOR) :

lxc profile edit web

Exemple de profil db pour un serveur de base de données, à haute mémoire :

lxc profile create db
lxc profile set db limits.cpu 4
lxc profile set db limits.memory 8GiB
# Modules kernel requis par certains moteurs SQL
lxc profile set db linux.kernel_modules "ip_tables,ip6_tables"

Appliquer des profils aux instances

Les profils peuvent être combinés — le dernier profil qui définit une clé est prioritaire. Les paramètres définis directement sur l’instance écrasent toujours les profils.

# Lancer une instance Ubuntu 24.04 avec les profils default + web
lxc launch ubuntu:24.04 mon-site --profile default --profile web

# Ajouter un profil à une instance existante
lxc profile add mon-site web

# Retirer un profil d'une instance
lxc profile remove mon-site web

# Dupliquer un profil pour créer une variante
lxc profile copy web web-heavy
lxc profile set web-heavy limits.memory 4GiB
lxc profile set web-heavy limits.cpu 8

# Lister tous les profils
lxc profile list

Clustering LXD multi-nœuds

Architecture d’un cluster

Un cluster LXD est constitué d’un nœud bootstrap et d’au moins deux membres supplémentaires. En production, trois membres minimum sont requis pour garantir le quorum Raft — un cluster à deux nœuds ne peut pas survivre à la perte d’un membre.

L’état du cluster est stocké dans une base Dqlite, une implémentation distribuée de SQLite répliquée via l’algorithme Raft. Tous les membres partagent la même configuration globale, tandis que certaines options (pools de stockage, interfaces réseau) restent locales à chaque nœud.

Prérequis réseau : tous les nœuds du cluster doivent pouvoir se joindre sur le port 8443/TCP. Synchronisez leurs horloges via NTP (systemd-timesyncd ou chrony) — un écart de temps provoque des erreurs d’authentification Raft.

Initialisation du nœud bootstrap

# Sur node1 (192.168.1.10) — futur bootstrap
lxd init

Réponses aux questions clés :

Would you like to use LXD clustering? (yes/no) [default=no]: yes
What IP address or DNS name should be used to reach this server? [default=192.168.1.10]: 192.168.1.10
Are you joining an existing cluster? (yes/no) [default=no]: no
What name should be used to identify this server in the cluster? [default=node1]: node1
# Vérifier l'état initial du cluster
lxc cluster list

Ajouter des membres avec un join token

LXD utilise un système de tokens à usage unique pour sécuriser l’adhésion au cluster :

# Sur node1 — générer un token pour node2
lxc cluster add node2
# → Affiche un token base64 long. Copiez-le.

# Sur node2 — rejoindre le cluster
lxd init
# Répondre "yes" au clustering, "yes" pour rejoindre, coller le token

# Répéter pour node3
lxc cluster add node3
# → Lancer lxd init sur node3 avec le nouveau token
# Vérifier les membres du cluster depuis n'importe quel nœud
lxc cluster list

Gestion quotidienne du cluster

# Détails sur un membre
lxc cluster show node2

# Mettre un nœud en maintenance (déplace ses instances)
lxc cluster evacuate node2

# Restaurer après maintenance
lxc cluster restore node2

# Lancer une instance sur un nœud spécifique
lxc launch ubuntu:24.04 web01 --target node2

# Migrer une instance en live entre nœuds
lxc move web01 --target node3 --live

# Retirer définitivement un membre
lxc cluster remove node3

Groupes de placement (LXD 6.7+)

Les groupes de placement permettent de regrouper des nœuds par rack, zone ou usage pour contraindre l’emplacement des instances — utile pour la tolérance aux pannes rack :

# Créer un groupe par rack physique
lxc cluster group create rack-A
lxc cluster group assign node1 rack-A
lxc cluster group assign node2 rack-A

lxc cluster group create rack-B
lxc cluster group assign node3 rack-B

# Lancer une instance sur un groupe de placement
lxc launch ubuntu:24.04 db01 --target @rack-B

Bonnes pratiques pour la production

Snapshots automatiques : configurez des snapshots périodiques pour chaque instance ou via un profil :

# Snapshot toutes les 6 heures, expiration après 7 jours
lxc config set mon-site snapshots.schedule "0 */6 * * *"
lxc config set mon-site snapshots.expiry "7d"

# Créer un snapshot manuel avant une opération risquée
lxc snapshot mon-site avant-maj
lxc restore mon-site avant-maj

Sécurité et isolation :

# Désactiver le nesting (conteneurs dans conteneurs) par défaut
lxc profile set default security.nesting false

# Forcer les conteneurs non privilégiés (pas de mapping root=root)
lxc profile set default security.privileged false

# Activer AppArmor sur tous les conteneurs
lxc profile set default security.apparmor true

Supervision de la santé du cluster :

# État global du cluster
lxc cluster list

# Ressources disponibles sur un nœud
lxc info --resources node2:

# Lister toutes les instances avec leur nœud d'hébergement
lxc list -c nNsS

Pour les environnements exigeant une haute disponibilité avec stockage partagé, LXD s’intègre nativement avec Ceph pour le stockage distribué et OVN pour le réseau overlay — le complément idéal aux mécanismes vus dans l’article sur Pacemaker et Corosync pour la haute disponibilité Linux.

À lire également

Références

Index complet

Tous les articles (35)

Date Article Tags
27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs