在K8S中,PV 和 PVC有何作用?
在 Kubernetes (K8S) 中,PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 是用于管理持久化存储的关键组件。下面详细介绍它们各自的作用及其相互关系:
1. PersistentVolume (PV)
1.1 作用:
-
提供持久存储:
PV 是集群级别的资源,它代表集群中的一块存储空间,这块存储可以来自于本地文件系统、NFS、网络存储或是云提供商的服务等。PV 的主要目的是为 Pod 提供持久化的存储空间,即使 Pod 因故重启或迁移至其他节点,数据依然可以被保留下来。 -
存储资源的生命周期管理:
PV 的生命周期独立于使用它的 Pod。这意味着 PV 可以被创建、使用、回收、甚至删除,而这一切都不依赖于任何具体的 Pod。当一个 PV 不再被使用时,它可以被回收(Reclaim)以便再次使用。 -
访问模式:
PV 支持多种访问模式,如 ReadWriteOnce(单节点读写)、ReadOnlyMany(多节点只读)、ReadWriteMany(多节点读写)等,这些模式定义了 PV 如何被 Pod 访问。 -
回收策略:
当 PV 不再被 PVC 引用时,可以根据预设的回收策略处理 PV。回收策略可以是 Retain(保留)、Recycle(回收,清除数据)或 Delete(删除)。
1.2 属性:
- 容量:PV 的存储容量。
- 访问模式:如上所述,定义了 PV 的访问方式。
- 存储类型:指定了 PV 所使用的存储后端类型。
- 标签:可以附加标签来帮助组织和过滤 PV。
2. PersistentVolumeClaim (PVC)
2.1 作用:
-
请求存储资源:
PVC 是应用对存储资源的请求,它定义了应用程序所需要的存储容量、访问模式以及其他属性。PVC 允许用户以声明式的方式请求存储资源,而不需要直接指定具体的存储位置。 -
绑定 PV:
当一个 PVC 被创建后,Kubernetes 会尝试找到一个符合条件的 PV 与其绑定。如果找不到合适的 PV,那么 PVC 将会处于未绑定状态,直到有合适的 PV 出现为止。 -
简化存储管理:
通过 PVC,用户可以更加关注于应用程序本身,而不是底层的存储细节。PVC 和 PV 的绑定过程是自动化的,简化了存储资源的管理。
2.2 属性:
- 请求的存储容量:PVC 请求的最小存储容量。
- 访问模式:请求的访问模式,必须与 PV 的访问模式兼容。
- 存储类:指定存储类,用于指示如何创建 PV。如果未指定存储类且没有合适的 PV,那么可以触发动态 PV 的创建。
3. PV 和 PVC 的关系
PV 和 PVC 之间的关系类似于“供应”与“需求”的关系:
- PV 是集群中可供使用的存储资源。
- PVC 是应用程序对存储资源的需求声明。
- 当一个 PVC 被创建后,Kubernetes 会尝试找到一个与之匹配的 PV 进行绑定。
- 绑定成功后,PV 的状态会变为“Bound”,并且该 PV 将成为 PVC 的一部分。
- 当 PVC 被删除时,PV 可以根据其回收策略被保留、回收或删除。
综上所述,通过 PV 和 PVC 的机制,Kubernetes 提供了一种灵活的方式来管理集群中的持久化存储资源,使得存储资源的分配和回收变得更加自动化和高效。