1. Kubernetes 存储概述
1.1 Kubernetes 存储体系全景图
Kubernetes 存储体系并非单一组件,而是一个由 存储介质、接入层、编排层 和 用户接口层 构成的四层模型。理解这一全景图是掌握存储架构的基础。
核心观点:Kubernetes 存储的本质是“声明式存储资源管理”——用户描述存储需求,控制平面负责将需求映射到实际存储后端。
1.2 存储与计算分离的设计哲学
Kubernetes 存储架构最根本的设计原则是 存储与计算分离(Storage-Compute Separation)。这一哲学源自云原生对弹性、可移植性和故障域隔离的追求。
| 维度 | 传统单体架构 | Kubernetes 存储与计算分离 |
|---|---|---|
| 生命周期 | Pod 与存储绑定,Pod 删除则数据丢失 | PV 独立于 Pod 存在,Pod 重建后仍可挂载同一卷 |
| 调度约束 | 应用必须运行在数据所在节点 | 存储通过网络访问,Pod 可调度到任意节点 |
| 故障域 | 计算故障导致存储不可用 | 计算节点宕机不影响持久卷数据 |
| 扩展性 | 存储扩容需同时扩容计算资源 | 存储和计算可独立扩缩容 |
| 可移植性 | 强依赖特定存储硬件 | 通过 CSI 接口抽象,可切换后端存储 |
实践启示:在 Kubernetes 中,
PersistentVolume(PV)是存储资源,Pod 是计算资源。PV 的创建、回收、扩容完全独立于 Pod 生命周期。这是“存储与计算分离”在 API 层面的直接体现。
1.3 存储架构在 K8s 中的核心地位
存储并非 Kubernetes 的“附加功能”,而是与控制平面、调度器、kubelet 并列的 核心子系统。其核心地位体现在以下三个层面:
- 有状态应用的基础设施:数据库(MySQL、PostgreSQL)、消息队列(Kafka)、缓存(Redis)等有状态工作负载完全依赖 Kubernetes 存储能力。没有成熟的存储架构,Kubernetes 只能运行无状态应用。
- 控制平面状态持久化:etcd 作为 Kubernetes 控制平面的唯一数据存储,其底层依赖持久化存储。存储的可用性直接决定集群控制平面的健康度。
- 调度决策的关键输入:调度器在分配 Pod 时,必须考虑卷的拓扑约束(如
topology.kubernetes.io/zone)、卷的挂载冲突(同一卷不能同时读写挂载到多个节点)、以及 CSI 驱动的可用性。
1.4 关键概念速查表
在深入后续章节前,先建立以下核心术语的清晰认知:
| 术语 | 缩写 | 定义 | 类比(传统环境) |
|---|---|---|---|
| PersistentVolume | PV | 集群中的存储资源,由管理员或动态供给创建 | 物理磁盘 / SAN LUN / NFS 导出 |
| PersistentVolumeClaim | PVC | 用户对存储的请求,描述大小、访问模式等需求 | 申请磁盘空间的工单 |
| StorageClass | SC | 定义存储“类别”(如 SSD、HDD、高性能),包含动态供给参数 | 存储服务等级协议(SLA) |
| Container Storage Interface | CSI | Kubernetes 与存储后端之间的标准插件接口 | SCSI 协议 / 设备驱动 |
| Volume | — | Pod 中挂载的存储单元,生命周期与 Pod 绑定(emptyDir)或独立(PV) | 挂载点 / 分区 |
| Access Mode | — | 卷的读写权限:ReadWriteOnce(RWO)、ReadOnlyMany(ROX)、ReadWriteMany(RWX) | 文件共享权限 |
常见误区:初学者常将 PVC 视为“存储卷”本身。实际上 PVC 只是一个请求,真正的存储资源是 PV。PVC 与 PV 的绑定关系由控制平面自动完成,类似于“申请”与“分配”的关系。
1.5 本章小结
- Kubernetes 存储体系分为 用户接口层 → 编排层 → 接入层 → 存储后端层,每层职责清晰。
- 存储与计算分离 是 Kubernetes 存储架构的基石,带来弹性、可移植性和故障隔离。
- 存储子系统与 API Server、Scheduler、Controller Manager、etcd 深度耦合,是控制平面不可或缺的组成部分。
- PV、PVC、StorageClass、CSI 是理解后续章节的四个核心概念,务必掌握其定义和关系。