系列导航
本系列从 K8s 存储模型入手,逐步展开到 CSI 插件实现与云原生存储全景。
① 概念 → ② Volume 生命周期 → ③ CSI 架构 → ④ FlexVolume 演进 → ⑤ 对比 → ⑥ 排障 ‖ ⑦ 开发 → ⑧ 高级特性 → ⑨ 演进展望
重要
存储选型取决于三个维度:部署环境(公有云/私有云/裸机)、性能要求(IOPS/延迟)、运维能力。公有云首选云厂商 CSI,私有云首选 Ceph-CSI 或 Rook,轻量场景选 NFS-CSI 或 Longhorn。
1. 主流 CSI 插件概览
| 插件 | 存储类型 | 部署复杂度 | 性能 | 适用场景 |
|---|
| 云厂商 CSI(EBS/Disk/PD) | 块 | 低 | 高 | 公有云 |
| Ceph-CSI(RBD/CephFS) | 块/文件 | 高 | 高 | 私有云、大规模 |
| Rook + Ceph | 块/文件/对象 | 中(自动化部署) | 高 | 私有云、不想手动运维 Ceph |
| NFS-CSI | 文件 | 低 | 中 | 简单文件共享、小规模 |
| Longhorn | 块 | 低 | 中 | 轻量级分布式存储、Rancher 环境 |
| OpenEBS | 块/文件 | 中 | 中 | 容器原生存储、多后端 |
| TopoLVM | 块 | 中 | 高 | LVM 本地存储、高 IOPS |
| Vitastor | 块 | 中 | 高 | 高性能块存储、Ceph 替代 |
2. 横向对比
2.1 功能对比
| 功能 | Ceph-CSI | Longhorn | OpenEBS | NFS-CSI | TopoLVM |
|---|
| 动态供应 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 快照 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 克隆 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 在线扩容 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 拓扑感知 | ✅ | ❌ | ❌ | ❌ | ✅ |
| 多节点读写(RWM) | ✅(CephFS) | ❌(RWO) | ❌(RWO) | ✅ | ❌(RWO) |
| 数据冗余 | ✅(多副本) | ✅(多副本) | 取决后端 | ❌(依赖 NFS) | ❌(单节点) |
2.2 性能对比
| 插件 | 延迟 | IOPS | 吞吐 | 说明 |
|---|
| Ceph RBD | 低 | 高 | 高 | 块设备,接近裸盘性能 |
| Ceph CephFS | 中 | 中 | 高 | 文件系统,有元数据开销 |
| Longhorn | 中 | 中 | 中 | 基于网络复制,有额外开销 |
| OpenEBS cStor | 中 | 中 | 中 | ZFS 后端 |
| NFS-CSI | 高 | 低 | 中 | NFS 协议开销 + 网络延迟 |
| TopoLVM | 极低 | 极高 | 高 | 本地 LVM,无网络开销 |
2.3 运维对比
| 维度 | Ceph-CSI | Rook+Ceph | Longhorn | OpenEBS | TopoLVM |
|---|
| 部署 | 手动装 Ceph 集群 | Rook 自动部署 | Helm 一键 | Helm 一键 | Helm 一键 |
| 监控 | Prometheus + Ceph Dashboard | 内置 | 内置 UI | 内置 | 需自行配 |
| 升级 | Ceph 版本升级复杂 | Rook 管理 | 简单 | 简单 | 简单 |
| 灾备 | Ceph 多集群同步 | Rook 支持 | 备份到 S3 | 取决后端 | 需自行处理 |
| 数据恢复 | Ceph 自愈 | Rook 自愈 | 自动副本重建 | 取决后端 | 无(本地) |
3. 选型决策树
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 部署环境?
├─ 公有云
│ └─ 云厂商 CSI(EBS CSI / Azure Disk CSI / GCE PD CSI)
│
└─ 私有云 / 裸机
├─ 需要多节点读写(RWM)?
│ ├─ 是 → Ceph CephFS(Rook 部署)
│ └─ 否
│ ├─ 需要数据冗余?
│ │ ├─ 是
│ │ │ ├─ 运维能力强 → Ceph RBD(Rook 部署)
│ │ │ └─ 运维能力一般 → Longhorn
│ │ └─ 否
│ │ ├─ 需要极高性能 → TopoLVM(本地 LVM)
│ │ └─ 简单文件共享 → NFS-CSI
|
4. 按场景推荐
| 场景 | 推荐方案 | 理由 |
|---|
| 公有云生产环境 | 云厂商 CSI | 原生集成,性能最优 |
| 私有云大规模生产 | Rook + Ceph | 全功能(块/文件/对象),数据冗余 |
| 私有云中等规模 | Longhorn | 部署简单,内置 UI,Rancher 原生 |
| 数据库(高 IOPS) | TopoLVM | 本地 LVM,无网络开销 |
| 简单文件共享 | NFS-CSI | 最简方案,无需额外集群 |
| CI/CD 临时存储 | OpenEBS(localpv) | 轻量,Pod 删除即回收 |
| 跨集群灾备 | Ceph-CSI(多集群同步) | Ceph 原生支持多集群 |
5. 常见坑
| 坑 | 说明 | 解决方案 |
|---|
| RWO 误用为 RWM | 块存储只支持 RWO,多 Pod 挂载同一 PV 会导致数据损坏 | 需要共享读写用 CephFS 或 NFS |
| Local PV 无冗余 | 节点故障数据丢失 | 只用于可重建的数据(缓存、日志) |
| Ceph PG 不均衡 | PG 数量未按 OSD 比例配置,导致部分 OSD 过载 | 根据 OSD 数量计算 PG(pgcalc 工具) |
| NFS 性能瓶颈 | NFS 单点 + 网络开销,高并发时延迟剧增 | 用 CephFS 或 Longhorn 替代 |
| 快照占用空间 | 快照不是零成本,Ceph 快照会占用 OSD 空间 | 定期清理旧快照,设置保留策略 |
| 扩容后文件系统未扩展 | ControllerExpand 成功但 NodeExpand 未执行 | 确认 CSI 插件支持 NodeExpand,kubelet 版本 ≥ 1.16 |
参考链接