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 集群中的数据路径和组件关系:
3.4 选型决策流程
根据应用特征和运维能力,推荐按以下步骤进行存储选型:
- 判断延迟需求:应用是否对 P99 延迟有严格限制(如 < 1ms)?是 → 本地 NVMe;否 → 进入下一步。
- 判断共享需求:是否需要多个 Pod 同时读写同一卷?是 → 网络存储或云存储(ReadWriteMany);否 → 云存储或本地存储。
- 判断运维能力:团队是否有能力维护 Ceph/Rook 集群?是 → 网络存储(成本可控);否 → 云托管存储。
- 判断数据持久性:数据丢失是否可接受?是 → 本地存储(高性能低成本);否 → 多副本网络存储或云存储。
常见陷阱: 不要在生产环境将 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 约束,实现存储性能的精细化控制。