惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
博客园_首页
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
腾讯CDC
罗磊的独立博客
IT之家
IT之家
I
InfoQ
V
V2EX
博客园 - 叶小钗
A
About on SuperTechFans
Y
Y Combinator Blog
C
Check Point Blog
量子位
Martin Fowler
Martin Fowler
Vercel News
Vercel News

OneUptime Blog

How to Monitor Azure App Services (PaaS) with OpenTelemetry Grafana Stack vs OneUptime: DIY Observability or Unified Platform? Your AI Workloads Are About to Blow Up Your Observability Bill The Great Observability Consolidation Is Here How to Write Custom Object Classes for Ceph How to Write Custom Ceph Manager Modules How to Write a ceph.conf Configuration File How to Use Rook-Ceph with OpenShift How to Configure Volume Snapshot Class for RBD in Rook How to Configure VolumeReplicationClass Scheduling Intervals in Rook How to Set Up Volume Replication with Rook-Ceph How to Create Volume Group Snapshots with Rook CSI How to Visualize Ceph Network Performance in Grafana How to Enable Virtual Host-Style Bucket Access in Rook How to View Runtime Configuration via Admin Socket How to View Quota Settings and Update Stats in Ceph RGW How to View PG Scaling Recommendations with autoscale-status How to View PG Distribution via Admin Socket How to View Performance Metrics in the Ceph Dashboard How to View OSD Performance Counters in Ceph How to View Connection Status via Admin Socket How to View Ceph Cluster Summary Dashboard via CLI How to Version Control Rook-Ceph Configuration How to Version Control Ceph Infrastructure with Terraform How to Verify Kubernetes Node Requirements for Rook-Ceph Deployment How to Verify Health Before and After Rook Upgrades How to Verify Data Integrity with Deep Scrubbing How to Verify Complete Rook-Ceph Cleanup How to Verify Backup Integrity from Ceph Snapshots How to Use Rook-Ceph with Velero for Kubernetes Backup
How to Use Rook-Ceph with Longhorn for Comparison
Nawaz Dhandala · 2026-03-31 · via OneUptime Blog

Architecture Comparison

Rook-Ceph and Longhorn are two popular Kubernetes-native storage solutions with fundamentally different architectures. Understanding the differences helps you choose the right tool or run them side by side.

flowchart TB
    subgraph RookCeph["Rook-Ceph"]
        ROp["Rook Operator"] --> RMON["MONs (3+)"]
        ROp --> ROSD["OSDs (1 per disk)"]
        ROp --> RCSI["Rook CSI"]
        RCSI --> RBD["RBD Block"]
        RCSI --> CephFS["CephFS Shared"]
        RCSI --> RGW["RGW Object"]
    end
    subgraph Longhorn["Longhorn"]
        LMgr["Longhorn Manager\n(DaemonSet)"] --> LEng["Longhorn Engine\n(per volume)"]
        LEng --> LRep["Replicas (cross-node)"]
        LMgr --> LCSI["Longhorn CSI"]
        LCSI --> LBlk["RWO Block"]
    end

Feature Comparison Table

The two systems differ significantly in scope and complexity:

FeatureRook-CephLonghorn
Block storage (RWO)Yes (RBD)Yes
Shared filesystem (RWX)Yes (CephFS)Yes (NFS-based)
Object storage (S3)Yes (RGW)No
Setup complexityHighLow
Operational overheadHighLow
Minimum hardware3+ nodes, 3+ disks1 node, 1 disk
Snapshot supportYes (CSI)Yes (CSI)
Volume cloningYesYes
Backup integrationVia VeleroBuilt-in (S3/NFS)
Multi-cluster replicationYes (RBD mirroring, RGW)No
Performance ceilingVery high (NVMe tunable)Moderate

Running Rook-Ceph and Longhorn Side by Side

Some teams run both in the same cluster, using each for different workload types.

Install Longhorn first in its own namespace:

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

Verify Longhorn is running:

kubectl -n longhorn-system get pods

With Rook-Ceph already running, you now have two StorageClasses:

kubectl get storageclass

Expected output:

NAME              PROVISIONER                          RECLAIMPOLICY
longhorn          driver.longhorn.io                   Delete
rook-ceph-block   rook-ceph.rbd.csi.ceph.com           Delete
rook-cephfs       rook-ceph.cephfs.csi.ceph.com        Delete

Choosing the Right Storage Class per Workload

Use Rook-Ceph RBD for:

  • Databases (MySQL, PostgreSQL) requiring high IOPS
  • Workloads needing replication factor control
  • Multi-region or DR setups

Use Rook-CephFS for:

  • ReadWriteMany workloads (shared logs, CMS media)
  • Jupyter notebooks needing shared access

Use Rook-Ceph RGW for:

  • S3-compatible object storage
  • Backup repositories
  • ML training data lakes

Use Longhorn for:

  • Simpler setups with fewer nodes
  • Built-in backup to S3/NFS
  • Lower operational complexity

Migrating a Volume from Longhorn to Rook-Ceph

To migrate a PVC from Longhorn to Rook-Ceph, use a data migration pod.

First, create a target PVC in Rook-Ceph:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-app-data-rook
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: rook-ceph-block
  resources:
    requests:
      storage: 10Gi

Scale down the application using the source PVC:

kubectl scale deployment my-app --replicas=0

Run a migration pod that mounts both PVCs and copies data:

apiVersion: v1
kind: Pod
metadata:
  name: migrate-storage
spec:
  containers:
    - name: migrator
      image: alpine
      command: ["sh", "-c", "cp -av /source/. /destination/ && echo 'Done'"]
      volumeMounts:
        - name: source
          mountPath: /source
        - name: destination
          mountPath: /destination
  volumes:
    - name: source
      persistentVolumeClaim:
        claimName: my-app-data-longhorn
    - name: destination
      persistentVolumeClaim:
        claimName: my-app-data-rook
  restartPolicy: Never

After migration completes, update the application to use the new PVC:

kubectl patch deployment my-app \
  -p '{"spec":{"template":{"spec":{"volumes":[{"name":"data","persistentVolumeClaim":{"claimName":"my-app-data-rook"}}]}}}}'
kubectl scale deployment my-app --replicas=1

Performance Benchmarking Both Solutions

Run the same fio benchmark against both storage classes for comparison. Using a PVC from Rook-Ceph:

kubectl run fio-rook --rm -it \
  --image=nixery.dev/shell/fio \
  --overrides='{"spec":{"volumes":[{"name":"data","persistentVolumeClaim":{"claimName":"fio-rook-pvc"}}],"containers":[{"name":"fio-rook","image":"nixery.dev/shell/fio","volumeMounts":[{"mountPath":"/data","name":"data"}]}]}}' \
  -- fio --name=test --ioengine=libaio --direct=1 --rw=randread \
     --bs=4k --numjobs=4 --iodepth=32 --runtime=30 \
     --filename=/data/testfile --size=1G

Run the same test with a Longhorn PVC for comparison:

kubectl run fio-longhorn --rm -it \
  --image=nixery.dev/shell/fio \
  --overrides='{"spec":{"volumes":[{"name":"data","persistentVolumeClaim":{"claimName":"fio-longhorn-pvc"}}],"containers":[{"name":"fio-longhorn","image":"nixery.dev/shell/fio","volumeMounts":[{"mountPath":"/data","name":"data"}]}]}}' \
  -- fio --name=test --ioengine=libaio --direct=1 --rw=randread \
     --bs=4k --numjobs=4 --iodepth=32 --runtime=30 \
     --filename=/data/testfile --size=1G

Summary

Rook-Ceph and Longhorn serve different needs. Rook-Ceph provides a full storage platform (block, file, object) suitable for complex, large-scale, and performance-critical environments, but requires more operational expertise. Longhorn is simpler to deploy and operate, with built-in backup support, making it ideal for smaller clusters or teams without dedicated storage engineers. Both can run side by side in the same cluster, allowing workloads to use the most appropriate storage system. Migration between the two is straightforward using a copy-based migration pod.