Longhorn

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Stockage distribué cloud-native
Cible Kubernetes
Provisioner driver.longhorn.io
Namespace longhorn-system
Site longhorn.io

Longhorn est un système de stockage distribué cloud-native pour Kubernetes qui fournit du stockage persistant hautement disponible. Il répartit chaque volume en plusieurs réplicas sur les nœuds du cluster, et gère snapshots, sauvegardes et restauration via une interface web dédiée.

Installation

Via Helm

# Ajouter le repo Helm
helm repo add longhorn https://charts.longhorn.io
helm repo update

# Installer Longhorn
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace

# Avec des valeurs personnalisées
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --create-namespace \
  --set persistence.defaultClass=true \
  --set persistence.defaultClassReplicaCount=3

Via kubectl

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

Configuration de base

Créer une StorageClass

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: longhorn-fast
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
  numberOfReplicas: "3"
  staleReplicaTimeout: "2880"
  fromBackup: ""
  fsType: "ext4"
  dataLocality: "disabled"

PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: longhorn-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 10Gi

Commandes kubectl utiles

Vérifier l'état de Longhorn

# Vérifier les pods Longhorn
kubectl get pods -n longhorn-system

# Vérifier les volumes
kubectl get pv

# Vérifier les PVC
kubectl get pvc --all-namespaces

# Détails d'un volume spécifique
kubectl describe pv <volume-name>

Gestion des volumes

# Lister les volumes Longhorn
kubectl get volumes.longhorn.io -n longhorn-system

# Détails d'un volume
kubectl describe volume.longhorn.io <volume-name> -n longhorn-system

# Lister les replicas
kubectl get replicas.longhorn.io -n longhorn-system

Accéder à l'UI Longhorn

# Port-forward vers l'UI
kubectl port-forward -n longhorn-system svc/longhorn-frontend 8080:80

# Accès via LoadBalancer (modifier le service)
kubectl edit svc longhorn-frontend -n longhorn-system
# Changer type: ClusterIP en type: LoadBalancer

Opérations de backup

Configuration d'un backup target (S3)

# Via kubectl
kubectl create secret generic -n longhorn-system aws-secret \
  --from-literal=AWS_ACCESS_KEY_ID=<your-access-key> \
  --from-literal=AWS_SECRET_ACCESS_KEY=<your-secret-key>

# Configurer le backup target
kubectl edit settings.longhorn.io backup-target -n longhorn-system
# value: s3://bucket-name@region/folder

Créer un backup

apiVersion: longhorn.io/v1beta2
kind: Backup
metadata:
  name: backup-demo
  namespace: longhorn-system
spec:
  snapshotName: snapshot-demo
  labels:
    app: demo

Restaurer depuis un backup

# Lister les backups disponibles
kubectl get backups.longhorn.io -n longhorn-system

# Créer un volume depuis un backup
kubectl create -f - <<EOF
apiVersion: longhorn.io/v1beta2
kind: Volume
metadata:
  name: restored-volume
  namespace: longhorn-system
spec:
  fromBackup: s3://bucket/backup-url
  numberOfReplicas: 3
EOF

Snapshots

Créer un snapshot

# Via l'API Longhorn
kubectl create -f - <<EOF
apiVersion: longhorn.io/v1beta2
kind: Snapshot
metadata:
  name: snapshot-$(date +%Y%m%d-%H%M%S)
  namespace: longhorn-system
spec:
  volume: <volume-name>
EOF

Politique de snapshot automatique

apiVersion: longhorn.io/v1beta2
kind: RecurringJob
metadata:
  name: snapshot-daily
  namespace: longhorn-system
spec:
  cron: "0 2 * * *"
  task: "snapshot"
  groups:
    - default
  retain: 7
  concurrency: 2

Maintenance

Upgrade de Longhorn

# Via Helm
helm repo update
helm upgrade longhorn longhorn/longhorn --namespace longhorn-system

# Vérifier la version
kubectl get settings.longhorn.io current-longhorn-version -n longhorn-system -o yaml

Nettoyage

# Supprimer les snapshots orphelins
kubectl edit settings.longhorn.io orphan-auto-deletion -n longhorn-system
# value: "true"

# Nettoyer les réplicas en échec
kubectl get replicas.longhorn.io -n longhorn-system | grep Failed

Monitoring

Métriques Prometheus

# Activer les métriques Prometheus
kubectl edit settings.longhorn.io -n longhorn-system
# Chercher et activer: enable-prometheus-metrics

# ServiceMonitor pour Prometheus Operator
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: longhorn-prometheus-servicemonitor
  namespace: longhorn-system
spec:
  selector:
    matchLabels:
      app: longhorn-manager
  endpoints:
  - port: manager
EOF

Principales métriques

Métrique Description
longhorn_volume_actual_size_bytes Taille actuelle du volume
longhorn_volume_capacity_bytes Capacité du volume
longhorn_volume_state État du volume (attached/detached)
longhorn_volume_robustness Robustesse du volume (healthy/degraded/faulted)
longhorn_node_storage_capacity_bytes Capacité totale du nœud
longhorn_node_storage_usage_bytes Utilisation du stockage du nœud

Dépannage

Problèmes courants

Volume bloqué en « Attaching »

# Vérifier les logs du pod longhorn-manager
kubectl logs -n longhorn-system <longhorn-manager-pod>

# Vérifier l'état du volume
kubectl describe volume.longhorn.io <volume-name> -n longhorn-system

# Forcer le detach
kubectl edit volume.longhorn.io <volume-name> -n longhorn-system
# Supprimer la section spec.nodeID

Réplica en échec

# Identifier les replicas en échec
kubectl get replicas.longhorn.io -n longhorn-system | grep Failed

# Supprimer le replica en échec (il sera recréé automatiquement)
kubectl delete replica.longhorn.io <replica-name> -n longhorn-system

Espace disque insuffisant

# Vérifier l'utilisation des nœuds
kubectl get nodes.longhorn.io -n longhorn-system

# Ajuster le seuil de stockage
kubectl edit settings.longhorn.io storage-minimal-available-percentage -n longhorn-system
# value: "10"  # Pourcentage minimum d'espace libre

Logs utiles

# Logs du manager
kubectl logs -n longhorn-system -l app=longhorn-manager -f

# Logs du driver CSI
kubectl logs -n longhorn-system -l app=longhorn-csi-plugin -f

# Logs de l'instance manager
kubectl logs -n longhorn-system -l longhorn.io/component=instance-manager -f

Configuration avancée

Data locality

# Dans la StorageClass
parameters:
  dataLocality: "best-effort"  # disabled, best-effort, strict-local

Taints et tolerations

# Configurer les tolerations pour Longhorn
helm upgrade longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --set longhornManager.tolerations[0].key=storage \
  --set longhornManager.tolerations[0].operator=Equal \
  --set longhornManager.tolerations[0].value=dedicated \
  --set longhornManager.tolerations[0].effect=NoSchedule

Priorité des nœuds

# Définir des tags sur les nœuds
kubectl edit node.longhorn.io <node-name> -n longhorn-system
# Ajouter dans spec.tags: ["ssd", "fast"]

# Utiliser les tags dans la StorageClass
# parameters:
#   diskSelector: "ssd"
#   nodeSelector: "fast"

Commandes rapides

# Installation rapide
helm install longhorn longhorn/longhorn -n longhorn-system --create-namespace

# Accès UI
kubectl port-forward -n longhorn-system svc/longhorn-frontend 8080:80

# Status général
kubectl get all -n longhorn-system

# Volumes
kubectl get volumes.longhorn.io -n longhorn-system

# Backups
kubectl get backups.longhorn.io -n longhorn-system

# Désinstallation
kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/master/uninstall/uninstall.yaml
kubectl delete -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml

Voir aussi