深色模式
常见 CSI 驱动选型(云盘 / NFS / Ceph)
摘要:本文面向平台工程师,系统讲解 Container Storage Interface(CSI)的架构与边车组件,并对比四类主流存储后端的 CSI 驱动——AWS EBS、阿里云盘、NFS、Rook-Ceph(RBD/CephFS)。给出选型决策维度:访问模式、拓扑约束、性能、运维复杂度与成本。适用 Kubernetes v1.28+;in-tree 插件已在 v1.27 全面移除,统一走 CSI。
适用版本与前提
- Kubernetes:v1.28+(in-tree
awsElasticBlockStore等已 v1.27 移除,须用对应 CSI) - 工具:
kubectl、集群管理员权限 - 前提:已理解 StorageClass 与动态供给
背景与问题
早期 Kubernetes 把每个存储后端写成 in-tree 插件,导致代码臃肿、发布与 K8s 强绑定、厂商无法独立迭代。CSI 把"存储怎么接"标准化为一套 gRPC 接口,Kubernetes 只负责调用,厂商独立发版。结果:in-tree 插件(如 awsElasticBlockStore v1.19 弃用、v1.27 移除,gcePersistentDisk 重定向到 CSI)全面退役。
CSI 架构
边车组件(厂商驱动自带,标准化):
external-provisioner:监听 PVC,调用CreateVolume/DeleteVolume;external-attacher:管理VolumeAttachment的 Attach/Detach;external-resizer:处理扩容(需allowVolumeExpansion);external-snapshotter:处理卷快照(需 CRD + snapshot-controller);node-driver-registrar:向 kubelet 注册驱动,暴露CSINode信息;livenessprobe:健康检查。
TIP
一个快照控制器(snapshot-controller)服务集群内所有 CSI 驱动;而 external-snapshotter 边车需每个驱动各一份。CRD 与控制器由发行版或管理员安装一次。
主流驱动对比
| 维度 | AWS EBS CSI | 阿里云盘 CSI | NFS CSI | Rook-Ceph (RBD/CephFS) |
|---|---|---|---|---|
| provisioner | ebs.csi.aws.com | disk.csi.alibabacloud.com | csi-driver-nfs(sig-storage) | rook-ceph.rbd.csi.ceph.com / ...cephfs... |
| 类型 | 块(RWO) | 块(RWO) | 文件(RWX) | 块 RBD(RWO)/文件 CephFS(RWX) |
| 拓扑约束 | 强(单 AZ) | 强(单可用区) | 无(网络可达即可) | 弱(可跨节点,依赖 CRUSH) |
| 快照 | 支持 | 支持 | 不支持(文件系统级另算) | 支持(RBD) |
| 扩容 | 支持 | 支持 | 取决于后端 | 支持 |
| 运维复杂度 | 低(托管) | 低(托管) | 低-中(需自建 NFS) | 高(自运维分布式存储) |
| 适用 | 云上数据库/有状态 | 云上数据库/有状态 | 共享配置/媒体/多读 | 私有云/混合云统一存储 |
AWS EBS CSI
- 块存储,单卷单节点(RWO),强 AZ 约束:卷只能挂到同 AZ 的节点。
- 支持
gp3/io2、加密、快照、扩容。 - StorageClass 必设
volumeBindingMode: WaitForFirstConsumer,并用topology.ebs.csi.aws.com/zone约束。
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
parameters:
type: gp3
encrypted: "true"
csi.storage.k8s.io/fstype: xfs
allowedTopologies:
- matchLabelExpressions:
- key: topology.ebs.csi.aws.com/zone
values:
- us-east-2c1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
厂商特定
EBS CSI 参数(如 type、iopsPerGB)随驱动版本变化,落地前核对 AWS 官方 EBS CSI 文档。节点故障时 EBS 不会自动跨节点挂载,需依赖 排障篇 的 detach 流程。
阿里云盘 CSI
- provisioner
disk.csi.alibabacloud.com,能力类似 EBS:cloud_ssd/cloud_essd、加密、快照、扩容。 - 同样单可用区约束,须
WaitForFirstConsumer。 - 阿里云另有 NAS CSI(
nas.csi.alibabacloud.com)提供文件存储(类 NFS,支持 RWX)。
厂商特定
阿里云盘与 NAS 的参数命名、可用区拓扑 key(topology.disk.csi.alibabacloud.com/zone)与 AWS 不同,混用云时切勿直接复制 StorageClass。集团内部 ACK 版本的 CSI 组件由阿里云托管,升级节奏独立于社区。
NFS CSI(csi-driver-nfs)
- 由 sig-storage 维护的外部驱动,对接已有 NFS 服务器。
- 无拓扑约束、天然 RWX,适合多 Pod 共享只读配置、媒体资源、CI 缓存。
- 不支持 CSI 快照(NFS 本身无块级快照语义);备份需在 NFS 服务端做(rsync/存储快照)。
- 性能受单 NFS 服务器瓶颈限制,不适合高 IOPS 数据库。
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: csi-driver-nfs
reclaimPolicy: Retain
parameters:
server: 10.0.0.20
share: /export/k8s1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
INFO
NFS 没有 in-tree provisioner,必须部署 csi-driver-nfs 并预先有可用的 NFS 服务。RWOP/RWO 在 NFS 上意义有限,主要价值在 RWX。
Rook-Ceph(RBD / CephFS)
- Rook 是 CNCF 毕业项目,用 Operator 在 K8s 上交付自管理的 Ceph。
- RBD(块,RWO)与 CephFS(文件,RWX)两种 CSI;适合私有云/裸金属统一存储栈。
- 官方支持版本:Rook v1.18 支持 K8s v1.29–v1.34(版本相关,部署前核对矩阵)。
- 至少 3 个 worker 节点、每节点一块裸盘(无分区/无文件系统)作 OSD。
yaml
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
image: quay.io/ceph/ceph:v18.2.0
dataDirHostPath: /var/lib/rook
mon:
count: 3
allowMultiplePerNode: false
storage:
useAllNodes: false
nodes:
- name: worker-1
devices: [{ name: "sdb" }]
- name: worker-2
devices: [{ name: "sdb" }]
- name: worker-3
devices: [{ name: "sdb" }]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
版本相关 / 厂商特定
Rook v1.20 起 Ceph-CSI Operator 成为配置 CSI 驱动的唯一支持方式,Rook 不再直接部署 CSI 驱动,所有变更须走 Operator CR。生产部署前务必核对目标 Rook 版本与 Ceph 镜像、内核 rbd/ceph 模块的兼容要求 [未实测]。
选型决策树
生产实践与权衡
- 云上有状态:优先托管云盘 CSI(EBS/阿里云盘),运维最省、SLA 最好;配合
Retain+ 快照。 - 共享文件:NFS/NAS 最省心;但它是单点,需做 HA(NFS 服务端主备)与容量监控。
- 私有云统一存储:Rook-Ceph 能力全(块/文件/对象),但运维复杂度高,需要专职存储团队与监控(Prometheus + Ceph exporter)。
- 性能:云盘 IOPS 靠规格购买;NFS 受网络与单服务端限制;Ceph 靠 OSD 数量与网络(建议独立 RDMA/万兆)。
安全与合规
- CSI 驱动常需云厂商 IAM/AccessKey 或 RBAC Secret,密钥用
Secret+csi.storage.k8s.io/provisioner-secret-name注入,避免硬编码。 - 限制谁能创建 PVC/StorageClass(RBAC),防止任意挂载敏感后端。
升级
- CSI 驱动与 K8s 解耦,可独立升级;升级前核对驱动支持的 K8s 版本矩阵与 sidecar 镜像版本。
- Rook/Ceph 升级是高风险操作,需先
ceph status健康、做好备份,灰度一个 OSD/mon 后再全量[未实测,建议先在 staging 验证]。
常见坑
- 把 in-tree 卷类型(
awsElasticBlockStore)写进新集群——v1.27+ 已移除,必须用 CSI。 - 云盘 StorageClass 忘设
WaitForFirstConsumer,导致跨 AZ 调度死锁。 - NFS 上期望快照——CSI 不支持,需在服务端另行备份。
- Rook 裸盘被误格式化宿主机数据——部署前严格确认
devices列表。
参考资料
- Kubernetes 官方文档 - Volumes (CSI),访问日期:2026-10-08。
- Kubernetes CSI 文档(驱动能力/边车),访问日期:2026-10-08。
- Rook 官方文档 - Quickstart,访问日期:2026-10-08。
- AWS EBS CSI Driver,访问日期:2026-10-08。
- csi-driver-nfs (sig-storage),访问日期:2026-10-08。