首页 文章

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

提问于
浏览
6

使用案例:

我有一个可用的NFS目录,我想用它来保存多个部署和pod的数据 .

我创建了一个PersistentVolume:

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

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

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

我相信这可以为PV创造50MB的索赔 . 当我运行 kubectl get pvc 时,我看到:

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

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

当我然后更改PVC部署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吗?

当我删除PVC1时,我看到同样的事情:

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

再次,这是正常的吗?

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

3 回答

  • 1

    来自: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
    
  • 4

    基本上你不能做你想要的,因为PVC < - > PV的关系是一对一的 .

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

    它已经尝试过了,效果很好:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

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

  • 5

    持久卷声明仅限于持久卷 .
    You cannot bind 2 pvc to the same pv .

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

相关问题