Kubernetes NFS持久卷-同一卷上有多个声明?未决索赔?

Kubernetes NFS持久卷-同一卷上有多个声明?未决索赔?,kubernetes,nfs,persistent-volumes,persistent-volume-claims,Kubernetes,Nfs,Persistent Volumes,Persistent Volume Claims,用例: 我有一个可用的NFS目录,我想使用它为多个部署和POD持久化数据 我已创建了一个持久卷: apiVersion:v1 种类:PersistentVolume 元数据: 名称:nfs pv 规格: 容量: 存储:10Gi 访问模式: -读写 nfs: 服务器:http://mynfs.com 路径:/server/mount/point 我希望多个部署能够使用此PersistentVolume,因此我对所需内容的理解是,我需要创建多个persistentVolumeClaimes,它们都

用例:

我有一个可用的NFS目录,我想使用它为多个部署和POD持久化数据

我已创建了一个
持久卷

apiVersion:v1 种类:PersistentVolume 元数据: 名称:nfs pv 规格: 容量: 存储:10Gi 访问模式: -读写 nfs: 服务器:http://mynfs.com 路径:/server/mount/point 我希望多个部署能够使用此
PersistentVolume
,因此我对所需内容的理解是,我需要创建多个
persistentVolumeClaimes
,它们都指向此
PersistentVolume

kind:PersistentVolumeClaim
版本:v1
元数据:
名称:nfs-pvc-1
名称空间:默认值
规格:
访问模式:
-读写
资源:
请求:
储存量:50Mi
我相信这会在
PersistentVolume
上创建一个50MB的声明。当我运行
kubectl get pvc
时,我看到:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s
我不明白为什么我看到的是10Gi容量,而不是50Mi容量

然后,当我更改
PersistentVolumeClaim
deployment yaml以创建名为
nfs-PVC-2
的PVC时,我得到以下结果:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s
nfs-pvc-2   Pending                                        10s
PVC2从未绑定到PV。这是预期的行为吗?可以让多个PV指向同一PV吗

当我删除nfs-pvc-1时,我看到了同样的情况:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-2   Pending                                        10s
再说一次,这正常吗


在多个部署/POD之间使用/重复使用共享NFS资源的适当方式是什么?

持久卷声明以独占方式绑定到持久卷。
不能将两个pvc绑定到同一个pv

我想您对动态资源调配感兴趣。我在部署statefulset时遇到了这个问题,它需要为pod进行动态资源调配。因此,您需要在集群中部署NFS provisioner,NFS provisioner(pod)可以访问NFS文件夹(hostpath),每次pod请求卷时,NFS provisioner都会代表pod将其装载到NFS目录中
下面是用于部署它的github存储库:

但是,您必须小心,必须确保nfs provisioner始终在您拥有nfs文件夹的同一台计算机上运行,因为您的卷类型为hostpath。

来自:

正如Baroudi Safwen提到的,不能将两个pvc绑定到同一个pv,但可以在两个不同的豆荚中使用相同的pvc

volumes:
- name: nfsvol-2
  persistentVolumeClaim:
    claimName: nfs-pvc-1 <-- USE THIS ONE IN BOTH PODS   
卷:
-姓名:nfsvol-2
persistentVolumeClaim:

claimName:nfs-pvc-1基本上你不能做你想做的事,因为pvc-PV是一对一的关系

如果NFS是您唯一可用的存储,并且希望在一个NFS导出上有多个PV/PVC,请使用动态资源调配和默认存储类

它还没有正式的K8,但这一款在孵化器中,我试过了,效果很好:


这将极大地简化卷资源调配,因为您只需要处理PVC,PV将被创建为您定义的nfs导出/服务器上的一个目录

关于动态资源调配的几点

使用nfs动态资源调配可以防止您更改任何默认nfs装载选项。在我的平台上,它使用的rsize/wsize为1M。在某些使用小文件或块读取的应用程序中,这可能会导致巨大的问题。(我刚刚大谈了这个问题)


动态是一个伟大的选择,如果它适合您的需要。我现在一直在为我的应用程序创建250个pv/pvc对,由于1-1关系,该应用程序由dynamic处理。

对于我未来的自我和其他所有正在寻找官方文档的人:

一旦绑定,PersistentVolumeClaim绑定将是独占的,无论 他们是如何被束缚的。PVC到PV的结合是一对一的映射, 使用ClaimRef,它是 PersistentVolume和PersistentVolumeClaim


当NFS已经是基于网络的存储时,为什么要使用PV?直接挂载即可(即:避免此问题)。@NorbertvanNobelen你说得很对,我不知道这是一个选项,即将卷部分指向pod定义中的NFS挂载。我建议使用不同的存储类,以防你需要一些NFS RW值较小的应用程序和一些NFS RW值较大的应用程序。然后,创建几个NFS动态供应器,每个类至少一个,然后重新创建/更改PVC以引用创建的类。应该做什么,而不是创建成吨的PVC/PVsSo,这件事看起来像一个单一NFS卷和几个消费者之间的供应层?看起来很不错,我要尝试一下,因为我有一个外部SDF上的NFS,它几乎不可自定义,但非常庞大,我需要大量的pvc来处理每个吞吐量很小的存储。我面临一个问题,你的建议是,我将同一个pvc用于多个POD。现在的问题是只有文件在两个pod中共同显示,目录没有共享。你知道这是否是一种限制吗?如果没有,我将把我的整个场景作为一个单独的问题发布;我在Chrome中得到了太多的重定向。