当前位置: 首页 > article >正文

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 根据回收策略处理(如保留数据或删除存储)。
  • RecyclingRetain 策略下需手动清理数据,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

http://www.kler.cn/a/584668.html

相关文章:

  • C# Unity 唐老狮 No.9 模拟面试题
  • Vue:其他指令
  • Qt的QMenu 和 QAction的样式设置
  • golang从入门到做牛马:第二十篇-Go语言接口:行为的“契约”
  • C#类型转换大总结
  • 4.3 数组和集合的初始及赋值
  • 云原生可观测性:智能运维的数据中枢
  • DeepSeek-R1深度解读
  • HarmonyOS开发 - 电商App实例三( 网络请求axios)
  • nginx中proxy_pass和root的区别
  • STL-List模拟
  • 【QT】:QT图形化界面相关准备工作
  • 【python运行Janus-Pro-1B文生图功能】
  • 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器
  • 深入理解 RTP、RTCP、RTMP、RTSP、HLS 及 live555 推拉流实现
  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • docker基本应用和相关指令
  • MySQL小练习
  • 大数据面试之路 (三) mysql
  • 在Vue中如何高效管理组件状态?