系列导航
本系列从 K8s 存储模型入手,逐步展开到 CSI 插件实现与云原生存储全景。
① 概念 → ② Volume 生命周期 → ③ CSI 架构 → ④ FlexVolume 演进 → ⑤ 对比 → ⑥ 排障 ‖ ⑦ 开发 → ⑧ 高级特性 → ⑨ 演进展望
| 顺序 | 文章 | 定位 |
|---|---|---|
| ① | 概念与入门 | 基础——K8s 存储模型、PV/PVC/StorageClass |
| ② | Volume 生命周期全解析 | 全貌——两阶段处理、动态/静态供应 |
| ③ | CSI 架构详解 | 标准——gRPC 三服务、Sidecar 模式 |
| ④ | FlexVolume 与 CSI 演进 | 演进——FlexVolume 原理、CSI 设计思想 |
| ⑤ | 存储方案对比与选型 | 选型——主流 CSI 插件横向对比 |
| ⑥ | 排障思路与常用命令 | 运维——工具链 + 场景排查 |
| — | 核心路径 ↑ | 扩展展望 ↓ |
| ⑦ | CSI 插件开发指南 | 扩展——从零开发一个 CSI 插件 |
| ⑧ | 高级特性详解 | 进阶——快照、克隆、扩容、拓扑感知 |
| ⑨ | 本篇 - 云原生存储演进与展望 | 展望——容器原生存储、DPU 卸载、未来方向 |
重要
云原生存储正从"为容器适配外部存储"向"为容器设计原生存储"演进。三个方向:容器原生存储(Longhorn/Mayastor)、硬件卸载(DPU/SmartNIC)、Serverless 存储(无 Pod 感知)。
1. 容器原生存储
1.1 传统 CSI 的问题
传统 CSI 插件(Ceph-CSI、NFS-CSI)是把外部存储系统适配到 K8s。存储集群独立部署、独立运维,CSI 只做"翻译层"。
问题:
| 问题 | 说明 |
|---|---|
| 运维复杂 | 需要分别维护 K8s 集群和存储集群 |
| 资源浪费 | 存储节点可能只跑存储服务,资源利用率低 |
| 故障域不统一 | 存储故障和 K8s 故障定位割裂 |
1.2 容器原生方案
| 方案 | 说明 | 特点 |
|---|---|---|
| Longhorn | 每个 Volume 由一组 Pod 管理副本 | 轻量、Rancher 原生 |
| OpenEBS Mayastor | 基于 SPDK 的高性能块存储 | 用户态 I/O,绕过内核 |
| Rook + Ceph | Ceph 作为 K8s CRD 管理 | 自动化运维 Ceph |
| Linstor/DRBD | 内核态块复制 | 低延迟、高性能 |
2. 硬件卸载:DPU / SmartNIC
2.1 问题
CSI 插件的 Node Service 运行在节点上,执行 mount/umount/格式化等操作,消耗 CPU。高密度节点(100+ Pod)的存储操作开销不可忽视。
2.2 DPU 卸载
| 维度 | 传统(CPU 处理) | DPU 卸载 |
|---|---|---|
| I/O 路径 | 应用 → 内核 → 网卡 | 应用 → DPU → 网络 |
| CPU 消耗 | mount/格式化/加密消耗 CPU | DPU 专用核心处理 |
| 延迟 | 内核协议栈开销 | 用户态/硬件直通 |
| 产品 | 厂商 | 说明 |
|---|---|---|
| NVIDIA BlueField | NVIDIA | DPU + SmartNIC,支持 NVMe-oF 卸载 |
| Intel IPU | Intel | 类似 DPU,支持存储卸载 |
| AMD Pensando | AMD | DPU + 可编程网络 |
2.3 CSI 与 DPU 的结合
CSI 插件的 Node Service 可以运行在 DPU 上,而不是节点的 CPU 上。Volume 的 Attach/Mount 操作由 DPU 完成,节点 CPU 零消耗。
3. 存储与 Serverless
3.1 趋势
Serverless / FaaS(如 Knative、OpenFaaS)不管理 Pod 生命周期,存储挂载由平台自动处理。传统 CSI 的两阶段处理(Attach + Mount)对 Serverless 来说太慢。
3.2 方向
| 方向 | 说明 |
|---|---|
| 快路径 Attach | 预 Attach 到所有节点,Pod 启动时只做 bind mount |
| 网络文件系统优先 | NFS/CephFS 无需 Attach,直接 Mount,适合 Serverless |
| Volume Cache | 在节点本地缓存远程 Volume,减少冷启动延迟 |
4. 当前未解决的问题
| 问题 | 现状 | 影响 |
|---|---|---|
| 跨集群 Volume 迁移 | 无标准方案,需手动操作 | 多集群灾备困难 |
| RWM 块存储 | 块存储原生只支持 RWO | 共享读写需文件系统层 |
| 存储 QoS | CSI Spec 无 QoS 接口 | 无法限制单 Pod IOPS |
| 快照一致性组 | 多 Volume 同时快照无标准 | 数据库主从一致性备份难 |
| Volume 细粒度计费 | CSI 不返回 IOPS/吞吐指标 | 存储成本分摊困难 |
5. 未来方向
| 方向 | 说明 | 预计成熟时间 |
|---|---|---|
| NVMe-oF 原生 CSI | 直接使用 NVMe-oF 协议,绕过 iSCSI/FC | 1-2 年 |
| DPU 存储卸载 | CSI Node Service 运行在 DPU 上 | 2-3 年 |
| Volume Replica(跨节点副本) | CSI Spec 原生支持多副本(类似 Longhorn) | 讨论中 |
| 存储服务网格 | 类似 Service Mesh,Sidecar 代理存储 I/O | 3-5 年 |
| ZNS(Zoned Namespace)SSD | 按区域写入,减少 GC 开销 | 2-3 年 |
6. 系列总结
本系列从 K8s 存储模型出发,覆盖了以下内容:
| 文章 | 核心内容 |
|---|---|
| ① 概念与入门 | PV/PVC/StorageClass 三层抽象、Volume 分类树 |
| ② Volume 生命周期 | 两阶段处理(Attach+Mount)、动态供应、回收策略 |
| ③ CSI 架构 | gRPC 三服务、Sidecar 模式、完整调用链 |
| ④ FlexVolume 与 CSI | 三代演进、FlexVolume 局限、CSI 优势 |
| ⑤ 对比与选型 | 8 个主流插件横向对比、选型决策树 |
| ⑥ 排障 | 按 PVC Pending / Pod ContainerCreating / PV 无法删除 等场景排查 |
| ⑦ 开发指南 | Go 骨架代码、三服务实现、部署模式 |
| ⑧ 高级特性 | 快照、克隆、扩容、拓扑感知 |
| ⑨ 演进与展望 | 容器原生存储、DPU 卸载、Serverless 存储、未解决问题 |
核心路径串起来就是:存储怎么工作 → Volume 怎么挂载 → CSI 怎么实现 → 怎么演进 → 怎么选 → 怎么查。
扩展篇适合读完核心路径后,有兴趣再深入:自己开发 → 高级特性 → 未来方向。