Skip to main content
πŸŽ“ Claude Code Masterclass Learn AI-assisted development on Udemy β€” plus the companion book on Leanpub & Amazon. Start Learning
Longhorn: Distributed Block Storage for Kubernetes Bare Metal
Platform Engineering

Longhorn: Distributed Block Storage for Kubernetes Bare Metal

Run production storage without cloud provider β€” Longhorn provides replicated volumes, snapshots, backups, and DR across bare-metal Kubernetes nodes.

LB
Luca Berton
Β· 1 min read

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?

StorageCloud ProviderBare Metal
AWS EBSβœ…βŒ
GCE PDβœ…βŒ
Azure Diskβœ…βŒ
Longhornβœ…βœ…
OpenEBSβœ…βœ…
Rook/Cephβœ…βœ… (complex)
FeatureLonghornRook/Ceph
ComplexityLow (Helm install)High (operator + OSDs)
Min nodes33
Min disks1 per node3 per node (dedicated)
Management UIβœ… Built-in⚠️ Ceph Dashboard
DR (cross-cluster)βœ… Native⚠️ Complex
PerformanceGood (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=3

How 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: true

Backup 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: production

Disaster 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
WorkloadReplicasData LocalityIOPS
Database (PostgreSQL)2best-effort15K
General app3disabled10K
Batch/analytics1strict-local25K

Free 30-min AI & Cloud consultation

Book Now