3. 底层存储选型:本地存储、网络存储与云存储对比

在 Kubernetes 环境中,底层存储的选择直接决定了工作负载的 IOPS、吞吐量、延迟以及运维复杂度。本章从性能、可靠性、运维成本和适用场景四个维度,对三类主流存储方案进行系统性对比。

3.1 存储分类与核心差异

根据数据访问路径和物理介质位置,K8s 底层存储可分为三大阵营:

  • 本地存储(Local SSD / NVMe):直连物理节点,无网络开销,延迟极低(微秒级),但数据不共享,节点故障时 Pod 迁移困难。
  • 网络存储(NFS / Ceph / Rook):通过 TCP/IP 或 RDMA 网络访问,支持多节点共享,具备数据冗余和自愈能力,但存在网络延迟和带宽瓶颈。
  • 云存储(AWS EBS / GCP PD / Azure Disk):由云厂商托管,提供块存储或持久卷,性能与容量可弹性调整,但受限于云厂商 API 和区域可用区。
选型第一原则: 延迟敏感型有状态应用(如数据库、消息队列)优先考虑本地 NVMe;需要跨节点共享且容忍毫秒级延迟的场景(如文件存储、日志聚合)选择网络存储;云原生弹性扩缩场景首选云厂商托管盘。

3.2 性能参数对比表

存储类型 典型延迟 单盘最大 IOPS 单盘吞吐量 数据持久性 共享访问
本地 NVMe 10–50 µs 1,000,000+ 6–7 GB/s 低(单点故障) 不支持
本地 SATA SSD 100–300 µs 100,000 500–600 MB/s 低(单点故障) 不支持
Ceph (RBD) 1–5 ms 10,000–50,000 200–800 MB/s 高(多副本/EC) 支持
NFS (v4.1) 2–10 ms 5,000–20,000 100–500 MB/s 中(依赖后端) 支持
AWS EBS (gp3) 1–3 ms 16,000 250 MB/s 高(99.999%) 不支持(单挂载)
GCP PD (pd-ssd) 1–3 ms 30,000 400 MB/s 高(99.95%) 支持(ReadOnlyMany)
Azure Disk (Premium SSD) 1–4 ms 20,000 250 MB/s 高(99.9%) 不支持
关键指标解读: 本地 NVMe 的延迟比网络存储低 2–3 个数量级,但数据持久性完全依赖节点可靠性。Ceph 通过多副本(默认 3 副本)或纠删码提供高持久性,但写入放大和网络开销会降低有效吞吐。云存储的 IOPS 和吞吐受磁盘大小和 burst 积分限制,需提前规划容量。

3.3 架构对比:本地 vs 网络 vs 云

下图展示了三种存储方案在 K8s 集群中的数据路径和组件关系:

K8s 底层存储架构对比 三种存储方案架构对比 本地存储 Pod Pod Local PV (NVMe/SSD) 节点故障 → 数据丢失 网络存储 Pod Pod Ceph / NFS 集群 网络延迟 1–5ms 云存储 Pod Pod EBS / PD / Disk API 限速 / 区域绑定 性能排序:本地 NVMe > 本地 SSD > 云存储 > Ceph > NFS 可靠性排序:云存储 > Ceph > NFS > 本地存储

3.4 选型决策流程

根据应用特征和运维能力,推荐按以下步骤进行存储选型:

  1. 判断延迟需求:应用是否对 P99 延迟有严格限制(如 < 1ms)?是 → 本地 NVMe;否 → 进入下一步。
  2. 判断共享需求:是否需要多个 Pod 同时读写同一卷?是 → 网络存储或云存储(ReadWriteMany);否 → 云存储或本地存储。
  3. 判断运维能力:团队是否有能力维护 Ceph/Rook 集群?是 → 网络存储(成本可控);否 → 云托管存储。
  4. 判断数据持久性:数据丢失是否可接受?是 → 本地存储(高性能低成本);否 → 多副本网络存储或云存储。
常见陷阱: 不要在生产环境将 NFS 用于数据库类应用。NFS 的锁机制和协议开销会导致严重的性能抖动和一致性问题。同样,避免将本地存储用于需要跨节点迁移的有状态工作负载——除非你已配置了 Velero 或类似备份方案。

3.5 各存储方案的典型适用场景

存储方案 推荐场景 不推荐场景
本地 NVMe ETCD、Kafka、Redis、AI 训练缓存 需要跨节点共享、无备份策略的有状态应用
本地 SATA SSD 日志收集、临时数据处理、CI/CD 构建缓存 高并发 OLTP 数据库、持久化关键业务数据
Ceph (RBD) OpenStack 集成、大规模块存储池、私有云 延迟敏感型交易系统、小文件密集场景
NFS 静态文件共享、日志聚合、备份存储 数据库、消息队列、高并发随机读写
AWS EBS / GCP PD / Azure Disk 云原生有状态应用、StatefulSet、数据库 跨可用区高可用(需配合 Velero 或备份)

3.6 性能调优前置检查清单

在进入后续章节的 StorageClass 配置和压测之前,请确认以下基础条件:

  • 本地存储:确认节点 NVMe 设备已启用 TRIM,文件系统使用 ext4 或 xfs(noatime 挂载),并预留 10% 空间用于垃圾回收。
  • Ceph:确认 OSD 使用 NVMe 或 SSD 作为后端,网络使用 25GbE 以上,并启用 BlueStore 和异步 I/O。
  • NFS:确认 NFS 版本 ≥ 4.1,启用 pNFS 和 RDMA(如硬件支持),并调整 rsize/wsize 为 1048576。
  • 云存储:确认磁盘类型为 Provisioned IOPS 或 Ultra Disk,并预配置足够的 IOPS 积分(避免 burst 耗尽)。
下一步: 完成底层存储选型后,第 4 章将深入 StorageClass 参数配置,包括 fsType、mountOptions、volumeBindingMode 和 topology 约束,实现存储性能的精细化控制。