Longhorn
Longhorn 是一款专为 Kubernetes 设计的轻量级、云原生的分布式块存储系统,由 Rancher Labs 开发并开源(现为 CNCF 孵化项目)。它完美解决了传统存储方案在 K8s 环境中的复杂度问题,特别适合中小规模生产集群。以下是深度解析:
1. Longhorn 的核心特性
(1)架构精简
- 微服务化设计:每个卷都是一个独立的微控制器(Engine),故障隔离性强。
- 无中心节点:直接利用工作节点的本地磁盘,无需专用存储服务器。
- 100% 容器化:通过 DaemonSet 部署,与 K8s 深度集成。
(2)企业级功能
| 功能 | 实现方式 |
|---|---|
| 数据高可用 | 每个卷默认 3 副本(可调),分散在不同节点 |
| 增量快照 | 基于 COW(写时复制),支持定时快照策略 |
| 备份到 S3 | 自动将快照上传到 AWS S3/MinIO 等对象存储 |
| 卷扩容 | 支持在线扩容(需文件系统配合) |
| 加密传输 | 支持 TLS 证书加密节点间通信 |
(3)运维友好
- Web UI 可视化:内置 Dashboard 实时监控卷状态和性能。
- 一键灾难恢复:从 S3 备份快速重建整个存储集群。
- 无缝升级:支持滚动升级存储引擎而不中断服务。
2. 与 Ceph/Rook 的对比
| 维度 | Longhorn | Ceph/Rook |
|---|---|---|
| 部署复杂度 | ⭐️ 单命令部署 | ⭐️⭐️⭐️ 需配置 OSD/MON/MGR 等组件 |
| 资源占用 | 每个副本约 1GB 内存 | 每个 OSD 至少 2-4GB 内存 |
| 适用规模 | 建议 ≤50 节点 | 支持 1000+ 节点 |
| 性能 | 中等(适合常规应用) | 高性能(需调优) |
| 学习曲线 | 简单(K8s 原生思维) | 陡峭(需 Ceph 专业知识) |
3. 工作原理图解
graph LR
A[Pod] -->|PVC| B[Longhorn Volume]
B --> C[Engine Controller-1]
B --> D[Engine Controller-2]
B --> E[Engine Controller-3]
C & D & E --> F[节点1的 /var/lib/longhorn]
C & D & E --> G[节点2的 /var/lib/longhorn]
C & D & E --> H[节点3的 /var/lib/longhorn]
- 每个卷:由多个副本(默认 3 个)组成,分布在不同节点
- 自动修复:当某个副本所在节点故障时,自动在新节点重建副本
4. 快速部署实践
步骤 1:安装 Longhorn
# 添加 Helm 仓库
helm repo add longhorn https://charts.longhorn.io
helm repo update
# 安装(使用本地磁盘)
helm install longhorn longhorn/longhorn \
--namespace longhorn-system \
--create-namespace \
--set defaultSettings.defaultDataPath="/var/lib/longhorn"
步骤 2:创建 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn
provisioner: driver.longhorn.io
allowVolumeExpansion: true
volumeBindingMode: Immediate
parameters:
numberOfReplicas: "3" # 副本数
staleReplicaTimeout: "30" # 副本超时时间(分钟)
fsType: "ext4" # 文件系统类型
步骤 3:使用示例(动态创建 PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: longhorn
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
5. 生产环境调优建议
(1)硬件配置
- 磁盘:优先使用 SSD,避免 HDD(性能差 10 倍以上)
- 网络:至少千兆网络,节点间延迟 <5ms
- 内存:每 1TB 存储预留 1GB 内存
(2)关键参数
# values.yaml 调优示例
defaultSettings:
backupTarget: "s3://backup-bucket@us-east-1/" # 配置 S3 备份
backupTargetCredentialSecret: "aws-credentials"
guaranteedEngineCPU: "0.5" # 每个引擎预留 0.5 核 CPU
replicaSoftAntiAffinity: "false" # 强制副本分散在不同节点
(3)监控告警
# 集成 Prometheus
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn-prometheus.yaml
6. 适用场景案例
-
案例 1:中小团队数据库存储
- 运行 MySQL/PostgreSQL,利用 Longhorn 快照实现每日备份
- 节点故障时自动恢复,RTO <5 分钟
-
案例 2:CI/CD 构建缓存
- 动态创建临时卷用于构建环境,完成后自动删除
- 比 NFS 更快的 IO 性能
-
案例 3:边缘集群存储
- 在资源受限的边缘设备上提供持久化能力
- 最小化依赖,单节点也可运行
7. 局限性
- 不适合超大规模:超过 100 节点时性能下降明显
- 无原生多协议支持:仅提供块存储(iSCSI),不支持文件系统共享
- 功能不如 Ceph 全面:缺少纠删码、分层存储等高级特性
总结
Longhorn 是 Kubernetes 原生存储的"瑞士军刀",特别适合:
- 资源有限但需要高可用的团队
- 追求极简运维的云原生环境
- 快速验证分布式存储的场景
如果您的集群规模超过 50 节点或需要极致性能,仍建议考虑 Ceph。其他情况下,Longhorn 能大幅降低存储复杂度。
浙公网安备 33010602011771号