2、Kubernetes存储组件基础:CSI、PV、PVC、StorageClass核心概念回顾

在深入Prometheus监控与租户配额校准之前,必须重新梳理Kubernetes存储体系的核心抽象层。这些组件构成了存储拓扑图的骨架,也是后续指标采集与配额计算的直接对象。本节将围绕CSI、PV、PVC、StorageClass四个关键概念,从定义、生命周期到交互关系进行结构化回顾。

2.1 存储抽象层次总览

Kubernetes存储体系采用分层解耦设计,将存储的供应、请求、使用和管理职责分离。下图展示了核心组件之间的协作关系:

Kubernetes存储核心组件关系图 Kubernetes 存储核心组件关系图 集群管理员视角 应用开发者视角 StorageClass 存储类 / 动态供应模板 PersistentVolume (PV) 集群存储资源 PersistentVolumeClaim (PVC) 存储请求 / 租户声明 Pod 使用PVC挂载卷 动态供应 / 绑定 PV → PVC 一对一绑定 CSI Driver (Container Storage Interface) 存储插件标准接口 CSI 驱动负责实际的卷创建、挂载、快照等操作
拓扑图校准提示:在Prometheus监控中,StorageClass、PV、PVC、CSI驱动都会暴露各自的指标。租户配额校准需要将这些组件的指标关联起来,例如通过 kubelet_volume_stats_* 系列指标追踪PVC的实际使用量,再与StorageClass定义的配额上限做比较。

2.2 核心概念详解

2.2.1 StorageClass(存储类)

StorageClass是集群管理员定义的存储“模板”,用于描述存储的类型、性能、回收策略以及对应的Provisioner(供应者)。它是动态供应的入口。

  • Provisioner:指定使用哪个CSI驱动或内置插件来创建PV。例如 ebs.csi.aws.com、rbd.csi.ceph.com。
  • Parameters:传递给Provisioner的特定参数,如磁盘类型、IOPS限制、复制因子等。
  • ReclaimPolicy:当PVC被删除后,对应的PV如何处理。取值:Delete(自动删除底层存储)、Retain(保留数据,需手动清理)。
  • AllowVolumeExpansion:是否允许在线扩容PVC。
属性 说明 监控关注点
provisioner CSI驱动名称 驱动版本、可用性指标
parameters.type 存储介质类型(如SSD、HDD) 性能指标基线
reclaimPolicy 回收策略 影响PV生命周期计数
allowVolumeExpansion 是否允许扩容 配额校准时的动态调整能力

2.2.2 PersistentVolume(PV)

PV是集群中的一块存储资源,由管理员手动创建(静态供应)或由StorageClass自动创建(动态供应)。PV独立于任何Pod存在,具有自己的生命周期。

  • Capacity:存储容量,如 100Gi。
  • Access Modes:访问模式,包括 ReadWriteOnce(单节点读写)、ReadOnlyMany(多节点只读)、ReadWriteMany(多节点读写)。
  • Phase:PV的状态,包括 Available、Bound、Released、Failed。
  • StorageClassName:关联的StorageClass名称。

2.2.3 PersistentVolumeClaim(PVC)

PVC是用户对存储的请求。Pod通过PVC来使用存储资源,PVC会绑定到满足条件的PV上。

  • Resources.Requests.Storage:请求的存储大小。
  • Selector:标签选择器,用于匹配特定PV。
  • StorageClassName:指定使用哪个StorageClass进行动态供应。
  • VolumeName:绑定成功后,指向具体PV的名称。
租户配额校准关键点:PVC是租户存储声明的直接体现。在Prometheus中,kube_persistentvolumeclaim_resource_requests_storage_bytes 指标记录了每个PVC请求的容量。配额校准需要将租户下所有PVC的请求量求和,并与租户的存储配额上限进行比较。

2.2.4 CSI(Container Storage Interface)

CSI是Kubernetes与外部存储系统交互的标准接口。它允许存储厂商编写一个符合CSI规范的驱动,即可无缝接入Kubernetes,无需修改核心代码。

  • CSI Driver:以DaemonSet或Sidecar形式运行在集群中,负责处理卷的创建、删除、挂载、卸载、快照等操作。
  • CSI Node:在每个节点上运行的组件,负责本地卷的挂载操作。
  • CSI Controller:负责控制面操作,如卷的创建和删除。
  • Sidecar容器:如 csi-provisioner、csi-attacher、csi-resizer、csi-snapshotter,它们监听Kubernetes API并调用CSI驱动。

2.3 存储组件生命周期与交互流程

理解PV、PVC、StorageClass和CSI之间的交互时序,对于定位监控指标和校准配额至关重要。下图展示了从PVC创建到Pod使用存储的完整流程:

存储卷动态供应与使用流程 存储卷动态供应与使用流程 用户/开发者 Kubernetes API CSI Controller CSI Node 后端存储 创建PVC API接收请求 csi-provisioner 调用CreateVolume 创建卷 返回PV信息 创建PV对象 绑定PVC PVC Bound 创建Pod 引用PVC 调度Pod csi-attacher ControllerPublishVolume 附加卷 返回附加成功 更新Pod状态 Pod Running csi-node-driver NodeStageVolume 挂载卷 NodePublishVolume
监控盲区预警:在动态供应流程中,如果CSI Controller或csi-provisioner出现故障,PVC会长时间处于 Pending 状态。Prometheus需要监控 kube_persistentvolumeclaim_status_phase 指标,并设置告警规则,避免租户因存储供应失败而影响业务。

2.4 关键概念对比表

组件 作用域 创建者 生命周期 与租户配额的关系
StorageClass 集群 管理员 持久存在 定义配额模板(如最大容量、IOPS限制)
PV 集群 管理员或动态供应 独立于Pod 实际存储资源,配额校准的物理上限
PVC 命名空间 用户 跟随Pod或独立 租户存储请求的直接度量
CSI Driver 集群 管理员 持久存在 提供存储能力指标,影响配额执行

2.5 租户配额校准的存储视角

在Prometheus监控体系中,存储组件的指标是租户配额校准的原始数据来源。以下是几个关键的指标映射关系:

  • PVC请求量:kube_persistentvolumeclaim_resource_requests_storage_bytes → 租户已分配存储。
  • PV实际容量:kube_persistentvolume_capacity_bytes → 集群实际消耗的存储资源。
  • 卷使用量:kubelet_volume_stats_used_bytes → 租户实际使用的存储空间。
  • StorageClass配额:通过自定义标签或Annotation暴露,例如 quota.max_gib。
实战建议:在Prometheus中,可以通过 kube_persistentvolumeclaim_labels 和 kube_persistentvolume_labels 指标获取PVC和PV的标签信息。建议在StorageClass和PVC上统一打上 tenant、project 等标签,以便在PromQL中按租户维度聚合存储配额数据。