What Is Longhorn?
Longhorn provides distributed block storage for Kubernetes β no cloud provider required. Built for bare-metal clusters, edge deployments, and on-prem infrastructure. CNCF Incubating, 6K+ stars.
Why Longhorn for Bare Metal?
| Storage | Cloud Provider | Bare Metal |
|---|---|---|
| AWS EBS | β | β |
| GCE PD | β | β |
| Azure Disk | β | β |
| Longhorn | β | β |
| OpenEBS | β | β |
| Rook/Ceph | β | β (complex) |
| Feature | Longhorn | Rook/Ceph |
|---|---|---|
| Complexity | Low (Helm install) | High (operator + OSDs) |
| Min nodes | 3 | 3 |
| Min disks | 1 per node | 3 per node (dedicated) |
| Management UI | β Built-in | β οΈ Ceph Dashboard |
| DR (cross-cluster) | β Native | β οΈ Complex |
| Performance | Good (replicated) | Excellent (erasure coded) |
Installation
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn \
--namespace longhorn-system \
--create-namespace \
--set defaultSettings.defaultReplicaCount=3How It Works
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Longhorn Manager β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
βββββΌβββββ ββββββΌββββ ββββββΌββββ
β Node 1 β β Node 2 β β Node 3 β
ββββββββββ ββββββββββ ββββββββββ
ββReplicaββ ββReplicaββ ββReplicaββ
ββ 1 ββ ββ 2 ββ ββ 3 ββ
ββββββββββ ββββββββββ ββββββββββ
β /dev/sdbβ β /dev/sdbβ β /dev/sdbβ
ββββββββββ ββββββββββ ββββββββββEach volume has 3 replicas across different nodes. If a node dies, data survives.
StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-fast
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880"
diskSelector: "ssd" # Target SSD disks only
nodeSelector: "storage"
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: trueBackup to S3/MinIO
# Backup target configuration
apiVersion: longhorn.io/v1beta2
kind: Setting
metadata:
name: backup-target
namespace: longhorn-system
value: "s3://longhorn-backups@us-east-1/"
---
apiVersion: longhorn.io/v1beta2
kind: Setting
metadata:
name: backup-target-credential-secret
value: "longhorn-s3-secret"Schedule automatic backups:
apiVersion: longhorn.io/v1beta2
kind: RecurringJob
metadata:
name: daily-backup
namespace: longhorn-system
spec:
cron: "0 2 * * *"
task: backup
retain: 7
concurrency: 2
labels:
tier: productionDisaster Recovery (Cross-Cluster)
ββββββββββββββββ ββββββββββββββββ
β Primary β backup β DR Site β
β Cluster ββββββββββΆβ Cluster β
β β (S3) β β
β Longhorn β β Longhorn β
β Volumes β β (standby) β
ββββββββββββββββ ββββββββββββββββVolumes replicated to S3; DR cluster restores from same bucket. RPO depends on backup frequency (hourly = 1h RPO).
Performance Tuning
# High-performance settings
defaultSettings:
guaranteedInstanceManagerCPU: 12 # Dedicated CPU for I/O
storageOverProvisioningPercentage: 200
storageMinimalAvailablePercentage: 15
replicaAutoBalance: best-effort
# For database workloads
parameters:
numberOfReplicas: "2" # Trade durability for performance
dataLocality: "best-effort" # Prefer local replica| Workload | Replicas | Data Locality | IOPS |
|---|---|---|---|
| Database (PostgreSQL) | 2 | best-effort | 15K |
| General app | 3 | disabled | 10K |
| Batch/analytics | 1 | strict-local | 25K |