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 :
- Pas de réplication : Si le disque meurt, les données sont perdues
- Single node : Les PVCs sont liés à un node spécifique
- 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 :
- Liste les PVCs
- Tar les dossiers correspondants
- 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.