Le stockage sur Talos


Le stockage persistant sur Kubernetes, c’est un sujet. T’as plein d’options, mais sur Talos, certaines marchent pas.

Le problème

Quand tu déploies une app qui a besoin de stocker des données (genre une base de données), tu crées un PVC (PersistentVolumeClaim). Kubernetes doit alors trouver un PV (PersistentVolume) qui correspond.

Sans storage provisioner, les PVCs restent en “pending” indéfiniment.

Ma première idée : Longhorn

Longhorn c’est un système de stockage distribué pour Kubernetes, développé par Rancher. Sur le papier, c’est parfait :

  • Réplication des données
  • Snapshots
  • Backups
  • Interface web

J’ai essayé de l’installer…

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/longhorn.yaml

Et là, problème. Les pods Longhorn crashaient en boucle.

Pourquoi Longhorn marche pas sur Talos

Longhorn a besoin de iSCSI pour fonctionner. C’est un protocole pour accéder à des disques sur le réseau.

Le problème : Talos est un OS minimaliste. Y’a pas iSCSI. Et comme c’est immutable, tu peux pas l’installer.

J’ai passé plusieurs heures à essayer de contourner le problème avant de comprendre que c’était structurel.

La solution : Local Path Provisioner

Local Path Provisioner c’est beaucoup plus simple. Il crée des dossiers sur le node et les utilise comme volumes.

Installation

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.26/deploy/local-path-storage.yaml

Configuration

Par défaut, il stocke les données dans /opt/local-path-provisioner. Sur Talos, ce dossier existe et est writable.

Pour le définir comme storage class par défaut :

kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

Test

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
kubectl get pvc
# NAME       STATUS   VOLUME   CAPACITY   STORAGECLASS
# test-pvc   Bound    pvc-xxx  1Gi        local-path

Ça marche !

Les limites

Local Path c’est pas parfait :

  1. Pas de réplication : Si le disque meurt, les données sont perdues
  2. Single node : Les PVCs sont liés à un node spécifique
  3. Pas de snapshots : Faut faire des backups manuellement

Mais pour un homelab single-node, c’est suffisant.

Où sont les données ?

talosctl -n 192.168.1.100 ls /opt/local-path-provisioner/

Tu vois tous les volumes créés. Chaque PVC a son dossier.

Backup

Pour backup les données, j’utilise un script qui :

  1. Liste les PVCs
  2. Tar les dossiers correspondants
  3. Les envoie sur un NAS

C’est artisanal mais ça marche.

Ce que j’aurais aimé savoir avant

  • Vérifie les prérequis avant d’installer un storage provider
  • Talos est minimaliste : beaucoup de trucs qu’on prend pour acquis n’existent pas
  • Local Path c’est OK pour du homelab single-node
  • Si t’as plusieurs nodes, regarde OpenEBS ou Rook-Ceph (qui ont aussi leurs prérequis)

Prochain article : KubeVirt - des VMs dans Kubernetes, parce que parfois faut une vraie VM.