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 能大幅降低存储复杂度。

posted on 2025-05-29 19:55  Leo-Yide  阅读(264)  评论(1)    收藏  举报