首页/云/Kubernetes 速查/K8s 存储对象全景
配置与存储54 条

K8s 存储对象全景

理清 Volumes(Pod 内声明)、PV/PVC(供给与申请)、StorageClass/CSI(供给方式)的分工与调用链,排障时不迷路。

Kubernetes 速查云更新于 2026-10-13

全景定位

Kubernetes 存储是分层对象组合:Pod 里声明 Volume(引用具体卷类型或 PVC),PVC 表达申请,PV 表示实际存储,StorageClass 描述动态供应方式,CSI 驱动负责与底层存储对接。适用平台是 Kubernetes。排障时的价值在于「按链路上溯」:Pod 挂载 → PVC 绑定 → PV 状态 → 存储侧,每一层都有明确的对象与事件可看,不必在错误的一层反复改配置。

基本信息

适用平台Kubernetes,存储相关的多层 API 对象
对象归属Volume 与 PVC 属命名空间,PV 与 StorageClass 属集群
供应方式静态(管理员建 PV)与动态(StorageClass 触发制备)
对接实现CSI 驱动由控制器组件与节点组件两部分组成

典型使用场景

  • 新业务设计存储:先明确数据是否需要留存、是否跨节点共享,再选卷类型
  • 故障定位:沿链路从 Pod 查到存储侧,避免跳层排查
  • 容量审计:统计 PVC 申请量与 PV 实际提供量,识别浪费与不足
  • 迁移评估:换存储后端时确认 StorageClass 与驱动能力差异
  • 权限与回收治理:梳理哪些卷是 Delete、哪些是 Retain

调用链

调用链
# 调用链:Pod -> PVC -> StorageClass -> 动态制备 PV -> 底层存储
kubectl get pod web-x -o jsonpath='{.spec.volumes}'            # 1 Pod 声明了什么卷
kubectl get pvc mysql-data                                     # 2 PVC 是否 Bound
kubectl get pvc mysql-data -o jsonpath='{.spec.volumeName}'    # 3 对应哪个 PV
kubectl get pv <pv-name> -o jsonpath='{.spec.csi}'             # 4 底层驱动与参数
kubectl get pv <pv-name> -o jsonpath='{.spec.persistentVolumeReclaimPolicy}'
kubectl get sc                                                 # 5 供应模板与默认类

对象与职责

对象角色由谁创建
Volume(Pod 内)Pod 可直接使用的挂载声明(含 emptyDir、configMap 等)应用清单
PV集群中一块存储的抽象管理员静态创建或制备器动态创建
PVC使用者对容量与模式的申请应用或管理员
StorageClass动态供应的模板(provisioner 与参数)集群管理员
CSI 驱动对接具体存储的实现(控制器与节点组件)集群管理员或云平台
排障按链路上溯:Pod 挂载 → PVC 绑定 → PV 状态 → 存储侧,别在错误的层反复改配置。
对象职责不同:删 Pod 不影响 PVC;删 PVC 是否影响 PV 取决于回收策略,Delete 会连带删除底层存储,Retain 会保留为 Released 状态。

易错点

  • 排障不按链路上溯:在 StorageClass 上反复改参数却忽略了 PVC 根本没绑定,方向错了会白花时间
  • 混淆对象层级:PV 与 StorageClass 是集群级对象,在命名空间里查不到或以为隔离了,容易误删影响面大的对象
  • 忽略回收策略:Delete 策略下删除 PVC 会连带删除后端数据,生产环境必须提前确认策略
  • 把 CSI 驱动当成无需维护的组件:控制器或节点组件异常会导致挂载失败,属于存储链路里必须监控的一环

数据来源与参考

  • Kubernetes 官方文档 · 存储概念总览
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌