Kubernetes NFS持久卷 - 同一卷上的多个声明?索赔陷入悬而未决?

时间:2017-05-26 14:35:10

标签: kubernetes nfs persistent-volumes persistent-volume-claims

用例:

我有一个可用的NFS目录,我想用它来保存多个部署的数据。吊舱。

我创建了一个PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: http://mynfs.com
    path: /server/mount/point

我希望多个部署能够使用此PersistentVolume,因此我对所需内容的理解是,我需要创建多个PersistentVolumeClaims,这些都将指向此PersistentVolume

kind: PersistentVolumeClaim
apiVersion: v1
metaData:
  name: nfs-pvc-1
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi

我相信这会在PersistentVolume上创建一个50MB的声明。当我运行kubectl get pvc时,我看到了:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s

我不明白为什么我会看到10Gi容量,而不是50Mi。

当我然后更改PersistentVolumeClaim部署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结合。这是预期的行为吗?我可以将多个PVC指向同一个PV吗?

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

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-2   Pending                                        10s

再次,这是正常的吗?

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

5 个答案:

答案 0 :(得分:7)

来自:https://docs.openshift.org/latest/install_config/storage_examples/shared_storage.html

正如Baroudi Safwen所说,你不能将两个pvc绑定到同一个pv,但你可以在两个不同的pod中使用相同的pvc。

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

答案 1 :(得分:7)

基本上你不能做你想做的事,因为关系PVC&lt; - &gt; PV是一对一的。

如果NFS是您可用的唯一存储,并且希望在一个nfs导出中使用多个PV / PVC,请使用动态预配置和默认存储类。

它尚未进入正式的K8版本,但是这个版本在孵化器中并且我已经尝试过并且效果很好:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

这将极大地简化您的卷配置,因为您只需要处理PVC,并且PV将作为您已定义的nfs导出/服务器上的目录创建。

答案 2 :(得分:4)

持久卷声明仅限于持久卷 您无法将2 pvc绑定到同一个pv

我想你对动态配置很感兴趣。我在部署状态集时遇到了这个问题,这需要动态配置pod。因此,您需要在群集中部署NFS配置程序,NFS配置程序(pod)将具有对NFS文件夹(hostpath)的访问权限,并且每次pod请求卷时,NFS配置程序都会将其挂载到NFS目录中的豆荚。
以下是部署它的github存储库:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes
但是必须要小心,必须确保nfs provisioner始终在使用节点选择器的同一台机器上运行,因为卷的类型为hostpath。

答案 3 :(得分:1)

给我未来的自己和其他寻找官方文档的人:

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#binding

<块引用>

一旦绑定,PersistentVolumeClaim 绑定是独占的,无论 他们是如何绑定的。 PVC 到 PV 绑定是一对一的映射, 使用 ClaimRef 是两个之间的双向绑定 PersistentVolume 和 PersistentVolumeClaim。

答案 4 :(得分:0)

关于动态配置的几点说明。

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

如果满足您的需求,

dynamic是一个不错的选择。我现在坚持为我的应用程序创建250个pv / pvc对,由于1-1的关系,它们被动态处理。