2、Kubernetes存储组件基础:CSI、PV、PVC、StorageClass核心概念回顾
在深入Prometheus监控与租户配额校准之前,必须重新梳理Kubernetes存储体系的核心抽象层。这些组件构成了存储拓扑图的骨架,也是后续指标采集与配额计算的直接对象。本节将围绕CSI、PV、PVC、StorageClass四个关键概念,从定义、生命周期到交互关系进行结构化回顾。
2.1 存储抽象层次总览
Kubernetes存储体系采用分层解耦设计,将存储的供应、请求、使用和管理职责分离。下图展示了核心组件之间的协作关系:
拓扑图校准提示:在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使用存储的完整流程:
监控盲区预警:在动态供应流程中,如果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中按租户维度聚合存储配额数据。