Longhorn
概念
Longhorn 是 Rancher Labs(被 SUSE 收购)开发的 K8s 原生分布式块存储,2019 年 CNCF incubating。
- 设计:每个 volume 是一个微服务(replica 每个一个 pod),完全 K8s 化
- 数据面:微服务 + iSCSI(默认)/ NVMe-oF(实验)
- 复制:默认 3 副本,跨节点 / 跨 zone
- 部署:一个 DaemonSet,所有节点都跑 longhorn-engine
架构
┌────────────── K8s cluster ──────────────────┐
│ │
│ Longhorn Manager (Deployment ×3) │
│ - 创建 / 删除 / 调度 volume │
│ - 监控副本健康 │
│ │
│ Longhorn Engine (DaemonSet, 每节点一个) │
│ - 每个 replica 一个 longhorn engine 进程 │
│ - 通过 iSCSI 暴露块设备给 kubelet │
│ │
│ Longhorn UI / CSI Driver (Deployment) │
└──────────┬───────────────────────────────────┘
▼
节点本地盘 / RAID0 / 整块裸盘
- 每个 volume 在 K8s 里是一个 PV + 多个 engine pod(replica 数)
- 副本同步:write-back,先写主副本,异步同步到从副本
- 快照:CRUSH-style 的差分快照,存储在 Longhorn 自己盘上
关键能力
- K8s 原生:每个 volume 是 K8s 对象,kubectl 看得见
- 跨节点 / 跨 zone 副本
- 增量快照 + 备份:快照存 S3 / NFS / Azure Blob
- 在线扩容:扩 PV 容量,Longhorn 自动扩底层文件系统
- 克隆:从快照克隆 volume(秒级)
- 节点 / 盘故障自动恢复
- UI:自带 web 控制台,可看所有 volume 状态
- Backup:定时备份到 S3(NFS 也行),跨集群恢复
部署
Helm:
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace
StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 小时无心跳认为副本失效
volumeBindingMode: Immediate
优缺点
- ✅ K8s 原生:每个 volume 一组 pod,kubectl / prometheus / log 全可观测
- ✅ 部署简单:一个 Helm 命令就能起
- ✅ 自带 UI
- ✅ 备份到 S3 简单
- ✅ 单 volume 性能不错(每副本一个引擎)
- ❌ 写延迟比物理盘高(多副本 + iSCSI)
- ❌ 默认 iSCSI 协议,需要节点支持(Linux 自带 iscsi-initiator-utils)
- ❌ 单个节点盘不能太多(每盘一个 longhorn engine)
- ❌ 不支持 RWX(除非用 Longhorn NFS,单独组件)
- ❌ 跨集群复制不原生
适用场景
- K8s 上通用块存储,最常用替代 Rook / Ceph 之外的方案
- 中小规模(<500 节点,<5PB)
- 不需要 RWX(除非用 NFS subdir)
- 想要 K8s 原生管理体验
- Rancher / SUSE 用户
监控 / 排查
# UI
kubectl -n longhorn-system port-forward svc/longhorn-frontend 8080:80
# CLI
kubectl -n longhorn-system exec -ti longhorn-manager-0 -- longhornctl
# 看 volume
kubectl get pv
# 看 engine
kubectl -n longhorn-system get pods -l app=longhorn-engine
# 关键 metrics
longhorn_volume_read_bytes_total
longhorn_volume_write_bytes_total
longhorn_volume_actual_size_bytes
一句话
K8s 原生分布式块存储,部署最简单,体验最 K8s,中小规模首选。