Longhorn
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
- Kubernetes — orchestrateur cible de Longhorn
- Documentation officielle : https://longhorn.io/docs/
- GitHub : https://github.com/longhorn/longhorn
- Chart Helm : https://github.com/longhorn/charts