K8s 1.27.1 实战系列(十)PV PVC
一、核心概念与关系
1、PV(Persistent Volume)
PV 是集群中的持久化存储资源,由管理员预先创建并配置,独立于 Pod 生命周期。它抽象了底层存储(如 NFS、云存储等),定义存储容量、访问模式(如 ReadWriteOnce)、回收策略(Retain/Delete/Recycle)等属性。例如,一个 NFS 存储的 PV 可能包含服务器路径和存储容量信息。
示例:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /data/nfs
    server: 192.168.1.100 
2、PVC(Persistent Volume Claim)
PVC 是用户对存储资源的声明,定义所需的容量、访问模式等需求。Kubernetes 根据 PVC 自动匹配符合条件的 PV 并绑定,实现存储与应用的解耦。例如,一个数据库应用通过 PVC 申请 5Gi 的存储空间。
示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi 
3、PV 与 PVC 的关系
- 静态绑定:管理员手动创建 PV,用户通过 PVC 申请时自动匹配。
 - 动态绑定:通过 
StorageClass动态生成 PV,无需预先配置。 - 一对一绑定:一个 PVC 仅绑定一个 PV,PV 被占用后不可复用(除非释放)。
 
二、生命周期与关键机制
1、PV 生命周期
- Provisioning:PV 可通过管理员静态创建或由 
StorageClass动态生成。 - Binding:PVC 匹配 PV 时触发绑定,未匹配则 PVC 处于 
Pending状态。 - Usage:Pod 挂载 PVC 使用存储资源,数据持久化至 PV。
 - Releasing:删除 PVC 后,PV 根据回收策略处理(如保留数据或删除存储)。
 - Recycling:
Retain策略下需手动清理数据,Delete策略自动销毁底层存储。 
2、访问模式(Access Modes)
- ReadWriteOnce (RWO):单节点读写(如块存储)。
 - ReadOnlyMany (ROX):多节点只读(如 NFS 共享配置文件)。
 - ReadWriteMany (RWX):多节点读写(如分布式文件系统)。
 
3、回收策略(persistentVolumeReclaimPolicy)
- Retain:在 PVC 被删除后,保留 PV 和其数据,手动清理 PV 中的数据。
 - Delete:在 PVC 被删除后,自动删除 PV 和其数据。
 - Recycle:在 PVC 被删除后,通过删除 PV 中的数据来准备 PV 以供重新使用。
 
persistentVolumeReclaimPolicy只适用于一些类型的 PV,如 NFS、HostPath、
iSCSI 等。对于一些云平台提供的存储,如 AWS EBS 和 Azure Disk,由于底层提供商会自动处理PV的回收问题,因此该属性不适用。
4、存储分类(storageClassName)
- 指定 PV 的class 为 nfs。相当于为 PV 设置了一个分类,PVC可以指定 class 申请相应class 的 PV。
 
三、静态供应示例
1、创建PV池
nfs主节点:
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03 
2、创建PV
创建一个pv.yaml文件,内容如下:
apiVersion: v1
kind: Pers
                