k8s存储卷 PV与PVC 理论学习

介绍

存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume 子系统为用户和管理员提供了一组 API,将存储如何制备的细节从其如何被使用中抽象出来。为了实现这点,我们引入了两个新的 API 资源:PersistentVolume 和 PersistentVolumeClaim。

持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备,或者使用存储类(Storage Class)来动态制备。持久卷是集群资源,就像节点也是集群资源一样。也就是说不属于任何一个命名空间。PV 持久卷和普通的 Volume 一样,也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期,也就说PV的生命周期是独立的,Pod的销毁不会影响到PV。

持久卷申领(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。概念上与 Pod 类似。Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存)。同样 PVC 申领也可以请求特定的大小和访问模式(例如,可以挂载为 ReadWriteOnce、ReadOnlyMany、ReadWriteMany 或 ReadWriteOncePod, 请参阅访问模式)。

PVC是可以被划分到命名空间的

尽管 PersistentVolumeClaim 允许用户消耗抽象的存储资源,常见的情况是针对不同的问题用户需要的是具有不同属性(如,性能)的 PersistentVolume 卷。集群管理员需要能够提供不同性质的 PersistentVolume,并且这些 PV 卷之间的差别不仅限于卷大小和访问模式,同时又不能将卷是如何实现的这些细节暴露给用户。 为了满足这类需求,就有了存储类(StorageClass) 资源。

持久卷的类型(1.29版本)

复制代码
spec.*

csi - 容器存储接口 (CSI)

fc - Fibre Channel (FC) 存储

hostPath - HostPath 卷 (仅供单节点测试使用;不适用于多节点集群;请尝试使用 local 卷作为替代)

iscsi - iSCSI (SCSI over IP) 存储

local - 节点上挂载的本地存储设备

nfs - 网络文件系统 (NFS) 存储

访问模式

复制代码
spec.accessModes

PersistentVolume 卷可以用资源提供者所支持的任何方式挂载到宿主系统上。如下表所示,提供者(驱动)的能力不同,每个 PV 卷的访问模式都会设置为对应卷所支持的模式值。 例如,NFS 可以支持多个读写客户,但是某个特定的 NFS PV 卷可能在服务器上以只读的方式导出。 每个 PV 卷都会获得自身的访问模式集合,描述的是特定 PV 卷的能力。

访问模式有:
ReadWriteOnce : 卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式仍然可以在同一节点上运行的多个 Pod 访问该卷。 对于单个 Pod 的访问,请参考 ReadWriteOncePod 访问模式。
ReadOnlyMany : 卷可以被多个节点以只读方式挂载。
ReadWriteMany : 卷可以被多个节点以读写方式挂载。
ReadWriteOncePod特性状态: Kubernetes v1.29 stable :卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用 ReadWriteOncePod 访问模式。

在命令行接口(CLI)中,访问模式也使用以下缩写形式:

  • RWO - ReadWriteOnce
  • ROX - ReadOnlyMany
  • RWX - ReadWriteMany
  • RWOP - ReadWriteOncePod

每个 PV 可以属于某个类(Class),通过将其 storageClassName属性设置为某个 StorageClass 的名称来指定。特定类的 PV 卷只能绑定到请求该类存储卷的 PVC 申领。 未设置 storageClassName 的 PV 卷没有类设定,只能绑定到那些没有指定特定存储类的 PVC 申领。

PV 声明 storageClassName

bash 复制代码
spec:
 storageClassName: manual

PVC 绑定 设置了storageClassName: manual 的 PV卷

bash 复制代码
spec:
  storageClassName: manual

回收策略

目前的回收策略有:

  • Retain -- 手动回收
  • Recycle -- 简单擦除 (rm -rf /thevolume/*)
  • Delete -- 删除存储卷

对于 Kubernetes 1.29 来说,只有 nfs 和 hostPath 卷类型支持回收(Recycle)。

阶段

每个持久卷会处于以下阶段(Phase)之一:
Available:卷是一个空闲资源,尚未绑定到任何申领
Bound:该卷已经绑定到某申领
Released:所绑定的申领已被删除,但是关联存储资源尚未被集群回收
Failed:卷的自动回收操作失败

你可以使用 kubectl describe persistentvolume <name> 查看已绑定到 PV 的 PVC 的名称。

相关推荐
编程圈子19 分钟前
电机驱动开发学习25. 弱磁控制与全速域增益调度
驱动开发·学习
Be for thing40 分钟前
【嵌入式成长3】STC89C51外部中断|中断原理、寄存器、中断服务函数
单片机·嵌入式硬件·学习
优化Henry1 小时前
学习笔记之爱立信站点指向证书执行
运维·服务器·网络·笔记·学习·信息与通信
有脚就行2 小时前
第33篇-KServe推理平台-标准化的K8s推理服务管理
人工智能·云原生·容器·kubernetes
名字还没想好☜3 小时前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset
IT古董3 小时前
【WMS学习笔记系列】03-功能模块设计
笔记·学习·系统架构
陈聪.4 小时前
Docker 核心知识整理:从入门到企业级应用
运维·docker·容器
zyf1044164 小时前
暑期实践日志 Day31:推进修改任务,完成第五章字幕添加
学习·计算机网络·剪辑·暑期实践·课题任务·课程视频
云原生指北4 小时前
Docker Sandboxes 的隔离例外:共享 Skills 与宿主机 MCP
运维·docker·ai·容器·agent
瞬间&永恒~5 小时前
【Kubernetes】(七)Kubernetes控制器
云原生·容器·kubernetes