Tableau de bord de Longhorn
Technologie

Monter un lab Kubernetes chez soi (5) : Longhorn, le stockage distribué

Pourquoi un volume local condamne un pod à un seul nœud, comment Longhorn réplique les données sur trois machines, et les trois réglages qui évitent de remplir un disque système.

Un cluster Kubernetes sait redémarrer une application ailleurs quand un nœud tombe. Encore faut-il que les données suivent. Sans stockage partagé, une base de données déplacée sur un autre nœud retrouve un disque vide — ce qui, du point de vue de l'utilisateur, est indiscernable d'une perte de données. C'est le problème que résout Longhorn.

Le problème du stockage dans Kubernetes

Une application demande du stockage en déclarant un PersistentVolumeClaim : « il me faut 10 Gio ». Quelque chose doit répondre à cette demande en fournissant un volume. Sur un poste isolé, le fournisseur par défaut crée un répertoire local — simple, rapide, et attaché à un seul nœud. Le pod ne pourra plus jamais démarrer ailleurs.

Longhorn répond autrement : il crée un volume bloc répliqué sur plusieurs nœuds. Le pod peut démarrer sur n'importe quelle machine du cluster, ses données l'y attendent.

Ce qu'est Longhorn

Une solution de stockage bloc distribué, native Kubernetes, développée par Rancher et devenue projet de la CNCF. Elle s'installe dans le cluster, sous forme de pods, et ne demande ni matériel dédié ni serveur de stockage externe. Chaque nœud fournit un morceau de disque ; Longhorn se charge de la réplication, des instantanés et de la reconstruction.

Installation

Un prérequis souvent oublié : Longhorn expose ses volumes via le protocole iSCSI, donc chaque nœud doit disposer de l'initiateur correspondant.

apt install -y open-iscsi
systemctl enable --now iscsid

Le déploiement lui-même tient en une commande :

kubectl create namespace longhorn-system
kubectl apply -n longhorn-system \
  -f https://raw.githubusercontent.com/longhorn/longhorn/v1.7.1/deploy/longhorn.yaml

Une trentaine de pods se déploient : les managers sur chaque nœud, les composants CSI qui font le lien avec Kubernetes, les gestionnaires d'instances, l'interface web. Il faut plusieurs minutes avant que tout passe en Running — c'est normal, et surveiller la progression est plus sain que de relancer la commande.

kubectl -n longhorn-system get pods

L'interface, et les trois réglages qui comptent

L'interface de Longhorn n'est pas exposée par défaut. Le temps de la configuration, une redirection de port suffit :

kubectl -n longhorn-system port-forward --address 0.0.0.0 svc/longhorn-frontend 8080:80

Tableau de bord de Longhorn

L'état du stockage en un écran : espace disponible, volumes sains, dégradés ou en reconstruction.

1. Retirer le disque système de l'ordonnancement

Par défaut, Longhorn propose de stocker les volumes sur le disque système du nœud. C'est exactement ce qu'il ne faut pas : un volume applicatif qui grossit finirait par remplir la partition racine et emporter le nœud. Sur chaque nœud, on désactive donc l'ordonnancement sur le disque système.

2. Déclarer le disque de données

On ajoute à la place le second disque, monté sur /opt/data — celui préparé lors de l'installation des nœuds. Type « File System », ordonnancement activé. À faire sur les trois machines.

3. Trois réplicas, et rien d'automatique

  • Default Replica Count : 3 — chaque volume aura une copie complète sur chacun des trois nœuds ;
  • Create Default Disk : désactivé — pour que Longhorn n'aille pas réutiliser le disque système d'un nouveau nœud ;
  • Node Drain Policy : BlockIfContainsLastReplica — refuse de vider un nœud s'il porte la dernière copie d'un volume. Ce réglage, discret, est celui qui empêche de perdre des données pendant une maintenance.

Volumes Longhorn et leurs réplicas

Chaque volume, son état, sa taille et la répartition de ses trois réplicas sur les nœuds du cluster.

Ce que la réplication change vraiment

Une écriture applicative est propagée simultanément aux trois réplicas ; elle n'est confirmée que lorsque les copies sont cohérentes. En cas de perte d'un nœud, les deux réplicas restants assurent le service sans interruption, et Longhorn reconstruit automatiquement la troisième copie dès qu'un nœud redevient disponible.

Il faut en avoir conscience : cette garantie a un coût. Trois réplicas, c'est trois fois l'espace disque et une latence d'écriture supérieure à celle d'un disque local. Sur une base de données très sollicitée, ça se mesure. C'est un compromis, pas un repas gratuit.

Instantanés et sauvegardes : à ne pas confondre

Longhorn sait figer l'état d'un volume à un instant donné. Un instantané permet de revenir en arrière après une erreur applicative — une migration ratée, une suppression malheureuse — et se restaure en réattachant le volume, sans toucher au reste du cluster.

Mais un instantané vit dans le cluster. Il ne protège pas contre la perte du cluster lui-même. Pour cela, Longhorn sait exporter des sauvegardes vers une cible externe (NFS ou compatible S3) — et c'est un exercice à faire avant d'en avoir besoin, pas après.

Utiliser le stockage

Une fois en place, tout cela devient invisible : une application déclare simplement sa classe de stockage.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wikijs-postgres-pvc
  namespace: wikijs
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: longhorn
  resources:
    requests:
      storage: 10Gi

Le volume est créé, répliqué et attaché automatiquement. Et si le nœud qui l'héberge tombe, l'application redémarre ailleurs — avec ses données.

Le pas à pas détaillé est sur le wiki

Cet article ne remplace pas la documentation : il en explique les choix. L'intégralité de la démarche — commandes, sorties d'écran, vérifications et captures — est publiée sur mon wiki, dans la section Datacenter / Cluster K3S. Pages correspondant à cet article :

La série « Lab Kubernetes maison »

Cet article fait partie d'une série qui monte, pas à pas, un cluster Kubernetes complet sur une seule machine physique :

  1. 1. L'architecture avant les commandes
  2. 2. KVM et libvirt, le socle de virtualisation
  3. 3. La passerelle : routage, NAT, DHCP et DNS
  4. 4. Le cluster K3S en haute disponibilité
  5. 5. Longhorn, le stockage distribué — vous y êtes
  6. 6. MetalLB et Traefik : exposer les services
  7. 7. Déployer une application et superviser
Retour au blog