简单地说,持久化卷(PV)和持久化卷声明(PVC)有什么区别呢?PV是一个独立的存储资源,而PVC则是对该资源的请求。换句话说,PVC是用来获取PV存储空间的方式。

145

在Kubernetes/Openshift文档中,持久卷(PV)和持久卷声明(PVC)有何区别?

简单来说,PV是存储资源,而PVC是对PV的请求。

11个回答

125

文档中得知:

PV是集群中的资源。PVC是对这些资源的请求,也充当资源的索赔凭据。

因此,持久卷(PV)是主机上存储持久数据的“物理”卷。持久卷声明(PVC)是向平台发出创建PV的请求,您可以通过PVC将PV附加到您的Pod上。

类似于:

Pod -> PVC -> PV -> Host machine

7
主机可以是任何类型的存储器,包括 [NFS | 云存储 | 存储供应商 | ...]。 - Pav K.
@will Gordon,请告诉我,在你的回答中存储类别是如何涉及到这个问题的。 - Suhas Chikkanna
@SuhasChikkanna,StorageClasses(https://kubernetes.io/docs/concepts/storage/storage-classes/)仅仅定义了用户可以请求的PVC类型。 - Will Gordon
2
@WillGordon 是的,我现在有点明白你的图片了,请纠正我如果我错了:Pod -> PVC -> PV ->(如果适用)存储类 -> 主机机器。还有,对于其他人来说,这是一个很好的指南,可以了解PV、PVC、存储类之间的区别(https://portworx.com/basic-guide-kubernetes-storage/)。 - Suhas Chikkanna
@SuhasChikkanna 看起来差不多,不过我认为 StorageClass 应该放在 PVCPV 之间,因为它定义了通过 PVC 可用于生成的 PV 类别。 - Will Gordon

105

PVC是一种需求声明,表示某个时刻可能会有可用/满足的存储 - 就像与某个实际的PV绑定一样。

它有点像异步编程概念中的promise。PVC承诺它将在某个时候“转换”为你的应用程序可以使用的存储卷,并具有定义的特征,如类别、大小和访问模式(ROX、RWO和RWX)。

这是一种将对特定存储实现的思考抽象化的方法,使你的pod/deployment不需要声明“给我来自服务器X大小为Y的NFS存储”,而是更像“我需要默认类别和大小为Y的持久性存储”。

通过这种方式,在不同集群上的部署可以选择不同的满足方式。一个可以连接EBS设备,另一个可以提供GlusterFS,而你的核心清单在两种情况下仍然相同。

此外,你可以在部署中定义Volume Claim Templates,以便每个pod都自动创建一个反映PVC的副本(即为一组可扩展的pod支持基础架构无关的存储定义,每个pod都需要自己专用的存储)。


8
任何人想要了解PV、PVC和存储类之间的明显区别/澄清,可以参考以下链接:https://portworx.com/basic-guide-kubernetes-storage/。 - Suhas Chikkanna
2
链接文章中的一句话:“Persistent Volume Claims 代表一个特定 Pod 对 Persistent Volume 的独占使用”。 - Vaviloff
5
“Persistent Volume Claims(持久化存储卷申请)代表某个Pod对一个持久化存储卷的独占使用”这句话不准确。一个 PVC 可以被多个 Pod 挂载使用。 - gyro

24

简述:
- 这里是存储!持久化卷 (PV)
- 如果您确实需要它,您将得到存储!持久化卷请求 (PVC)


你好,欢迎来到 Stack Overflow。你能提供更详细的解释吗?如果可以的话,请尽量描述清楚,虽然总结你的解决方案也是可以的。 :) - Ema.jar

14
  1. 持久卷(PV)是集群或中心存储中的一块存储空间,例如100GB。

  2. 持久卷声明(PVC)是用户为应用程序申请10GB存储空间的请求。

在实际场景中,PV是整个蛋糕,而PVC就是一块蛋糕(但是如果没有其他人使用,你可以拥有整个蛋糕,就像如果没有其他应用程序使用,您可以使用整个PV)。


9

简洁明了

持久卷 - 可用的存储,比如您有100Gi

持久卷索取 - 您从持久卷请求,比如您请求10Gi,您将得到它,但如果您请求110Gi,您将不会得到。


有大小限制吗? - JayC
@Jesse 这取决于kube提供商如何配置他们的服务。在本地机器上,显然受限于您硬盘的大小。 - Kirk Sefchik

9
一个持久卷(PV)是集群中由服务器/存储/集群管理员预配或使用存储类动态预配的存储片段。它是集群中的资源,就像节点一样。
一个持久卷声明(PVC)是用户请求存储的要求,可以从PV中获得。它类似于Pod。Pod消耗节点资源,而PVC消耗PV资源。Pods可以请求特定级别的资源(CPU和内存)。声明可以请求特定大小和访问模式(例如,它们可以被挂载为ReadWriteOnce、ReadOnlyMany或ReadWriteMany)。

4

PersistentVolume(PV)和PersistentVolumeClaim(PVC)是由Kubernetes提供的资源API。PV是存储的一部分,应该由管理员预先分配。而PVC是用户对存储一部分的请求。


4
持久化卷声明(Persistent Volume Claim)告诉您在特定集群中可以访问哪些选项,这些选项通过名为Smart Tech的商店的广告来循环出现,这些广告就是 Persistent Volume Claim。
在您的配置文件中编写不同的 Persistent Volume Claims,就像您向圣诞老人列出心愿清单一样,但当然,当您完成后,您将带着这份清单去找 Smart Tech 的销售员。
因此,您编写一个配置文件,其中应该有一个 600GB 的硬盘选项适用于所有集群,还有一个 1TB 的硬盘选项。
当您选择 Persistent Volume Claim 中的其中一项选项时,您会请求 Kubernetes(即销售员)为您获取该选项,您已选择的选项。Kubernetes 必须查找存储库中可用的这些存储选项实例。这些硬盘实例可以立即使用,并且被认为是静态配置,因为它们是预先创建的。
另一方面,动态配置是即时创建的,当您询问 Kubernetes 销售员时,就像即时生产一样,会立即创建。
因此,Persistent Volume Claim 是商店所提供选项的广告,无论您选择哪个选项,Kubernetes 都将获取它,无论是存储中的一个选项还是即时创建一个选项。
持久化卷(Persistent Volume)是您从 Kubernetes 获得的实际产品或选项,如果 Kubernetes 没有您要求的内容,它将尝试即时为您创建。
因此,PVC 是 Smart Tech 广告向您的集群提供的内容,Kubernetes 销售员会为您获取该内容,而 PV 是最终交付给您的实际产品。

3

持久化卷 — 存储卷的低级表示。 持久化卷声明 — Pod 和持久化卷之间的绑定关系。 存储类 — 允许动态配置持久化卷。


2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

2

当比较PV和PVC与节点和Pod时,可以发现一些共同点。

PV就像一个节点,它定义了存储。

PVC就像Pod,需要资源(内存,CPU),如果节点有可分配的资源,就会得到这些资源,其中包括存储。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接