一、核心概念与关系
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