3. CSI 规范版本演进:v0.x → v1.x → v2.x 关键变化与特性对比

CSI(Container Storage Interface)规范自发布以来,经历了从 v0.x 原型验证到 v1.x 生产就绪,再到 v2.x 功能增强的演进过程。理解各版本之间的关键差异,有助于开发者在选择 CSI 驱动基线版本、设计存储插件架构时做出正确决策。

3.1 版本演进路线图

CSI 规范由 Kubernetes SIG-Storage 与容器社区共同推动,其版本演进遵循语义化版本控制(SemVer)原则。下图展示了从 v0.x 到 v2.x 的核心里程碑与关键特性变化。

CSI 规范版本演进路线图 CSI v0.x 原型验证阶段 CSI v1.x 生产就绪阶段 CSI v2.x 功能增强阶段 v0.x 关键特性 • 首次定义 RPC 接口 • 仅支持静态 Provisioning • 无卷快照/克隆 • 无拓扑感知 • 无卷扩展能力 v1.x 关键特性 • 稳定 GA 接口 • 动态 Provisioning • 卷挂载/卸载 • 节点级卷操作 • 基础卷扩展 v2.x 关键特性 • 卷快照/恢复 • 卷克隆 • 拓扑感知调度 • 卷扩展增强 • 卷健康监控
版本选择建议:当前生产环境应优先使用 CSI v1.x 或 v2.x 规范。v0.x 仅用于历史兼容或学习参考,不建议在新项目中采用。

3.2 v0.x → v1.x:从原型到生产就绪

CSI v0.x 是社区早期探索阶段发布的版本,主要用于验证接口设计的可行性。v1.0.0 于 2018 年正式发布,标志着 CSI 进入生产就绪阶段。两者之间的变化是颠覆性的,主要体现在以下方面:

对比维度 CSI v0.x CSI v1.x
接口稳定性 实验性,频繁变更 GA(General Availability),向后兼容
RPC 分组 Identity、Controller、Node 三组 保留三组,但接口签名重新设计
动态 Provisioning 不支持 支持 CreateVolume/DeleteVolume
卷挂载 仅支持预挂载 支持 NodePublishVolume/NodeUnpublishVolume
卷扩展 不支持 支持 ControllerExpandVolume
错误处理 错误码不完整 标准化 gRPC 错误码与重试语义
gRPC 版本 v1.0.x v1.1.x+
迁移要点:从 v0.x 迁移到 v1.x 时,几乎所有 RPC 接口的请求/响应消息结构都发生了变化。建议直接基于 v1.x 重新实现 CSI 驱动,而非尝试增量修改。

3.3 v1.x → v2.x:功能增强与生态扩展

CSI v2.0 于 2019 年发布,在保持 v1.x 核心接口稳定的基础上,引入了多项关键功能扩展。v2.x 并非对 v1.x 的颠覆,而是兼容性增强版本。

3.3.1 新增核心功能

  • 卷快照(Volume Snapshot):新增 CreateSnapshot/DeleteSnapshot/ListSnapshots 接口,支持从快照恢复卷。
  • 卷克隆(Volume Clone):通过 CreateVolume 的 volume_content_source 参数,支持从已有卷创建克隆。
  • 拓扑感知调度(Topology-aware Scheduling):新增 topology 字段,允许存储系统向调度器暴露拓扑约束。
  • 卷扩展增强(Volume Expansion):支持在线扩展(无需卸载卷)和离线扩展。
  • 卷健康监控(Volume Health):新增 NodeGetVolumeStats 接口,提供卷使用量与健康状态。

3.3.2 接口变更清单

RPC 接口 v1.x 状态 v2.x 变化
CreateVolume 已有 新增 volume_content_source 参数(支持克隆)
CreateSnapshot 不存在 新增
DeleteSnapshot 不存在 新增
ListSnapshots 不存在 新增
ControllerExpandVolume 已有 新增 volume_capability 验证增强
NodeGetVolumeStats 不存在 新增
ValidateVolumeCapabilities 已有 返回信息扩展

3.4 版本兼容性矩阵

CSI 规范版本与 Kubernetes 版本之间存在对应关系。下表列出了主流 CSI 版本与 Kubernetes 的兼容性:

CSI 规范版本 最低 Kubernetes 版本 推荐 Kubernetes 版本 备注
v0.3 1.9 1.10 Alpha 特性,需显式启用
v1.0 1.13 1.14+ GA,默认启用
v1.1 1.14 1.15+ 卷扩展支持
v1.2 1.15 1.16+ 拓扑感知支持
v2.0 1.17 1.18+ 卷快照/克隆支持
v2.1 1.19 1.20+ 卷健康监控支持
注意:CSI 驱动实现时,应声明其支持的规范版本范围。Kubernetes 侧通过 CSIDriver 对象的 version 字段进行版本协商。不匹配的版本可能导致卷操作失败。

3.5 版本选择决策树

在实际项目中,选择 CSI 规范版本应综合考虑存储后端能力、Kubernetes 集群版本以及所需功能。下图提供了版本选择的决策参考:

CSI 规范版本选择决策树 K8s 集群版本 ≥ 1.17? 否:使用 CSI v1.x 是:需要快照/克隆? 否:CSI v1.x 即可 是:使用 CSI v2.x 提示 v2.x 完全向后兼容 v1.x 接口,升级时无需修改已有 RPC 实现

3.6 关键版本特性总结

下表汇总了 CSI 各主要版本的核心能力差异,便于快速对比:

特性 v0.x v1.0 v1.1 v1.2 v2.0 v2.1
动态 Provisioning ✗ ✓ ✓ ✓ ✓ ✓
卷挂载/卸载 部分 ✓ ✓ ✓ ✓ ✓
卷扩展 ✗ ✗ ✓ ✓ ✓ ✓
拓扑感知 ✗ ✗ ✗ ✓ ✓ ✓
卷快照 ✗ ✗ ✗ ✗ ✓ ✓
卷克隆 ✗ ✗ ✗ ✗ ✓ ✓
卷健康监控 ✗ ✗ ✗ ✗ ✗ ✓
最佳实践:新开发的 CSI 驱动应至少基于 v1.2 规范实现,以获得拓扑感知能力。若存储后端支持快照/克隆功能,建议直接采用 v2.0+ 规范。所有 v1.x 驱动均可通过增量添加新接口的方式升级到 v2.x,无需重构。