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

Joh*_*ohn 20 nfs kubernetes persistent-volumes persistent-volume-claims

使用案例:

我有一个可用的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
Run Code Online (Sandbox Code Playgroud)

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

kind: PersistentVolumeClaim
apiVersion: v1
metaData:
  name: nfs-pvc-1
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi
Run Code Online (Sandbox Code Playgroud)

我相信这会创造一个50MB的索赔PersistentVolume.当我跑步时kubectl get pvc,我看到:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s
Run Code Online (Sandbox Code Playgroud)

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

当我然后更改PersistentVolumeClaim部署yaml以创建名为的PVC时,nfs-pvc-2我得到:

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-1   Bound      nfs-pv    10Gi        RWX           35s
nfs-pvc-2   Pending                                        10s
Run Code Online (Sandbox Code Playgroud)

PVC2永远不会与PV结合.这是预期的行为吗?我可以将多个PVC指向同一个PV吗?

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

NAME        STATUS     VOLUME    CAPACITY    ACCESSMODES   AGE
nfs-pvc-2   Pending                                        10s
Run Code Online (Sandbox Code Playgroud)

再次,这是正常的吗?

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

Vol*_*off 13

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

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

它还没有在官方的K8中,但这个是在孵化器中,我已经尝试了它并且效果很好:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

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


Jav*_*ron 12

来自: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   
Run Code Online (Sandbox Code Playgroud)

  • `但是您可以在两个不同的 pod 中使用相同的 pvc` -&gt; 仅当两个 pod 与 pvc 位于同一命名空间中时(请参阅[此处](/sf/answers/3567213541/)) (5认同)

Bar*_*wen 6

持久卷声明专门绑定到持久卷。
您不能将2个pvc绑定到相同的pv

我想您对动态配置感兴趣。在部署有状态集时,我遇到了这个问题,它需要对Pod进行动态配置。因此,您需要在群集中部署NFS设置程序,NFS设置程序(pod)将有权访问NFS文件夹(主机路径),并且每次Pod请求卷时,NFS设置程序将代表它将其安装在NFS目录中的豆荚。
这是部署它的github仓库:https :
//github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes
但是,您必须小心,由于卷的类型为hostpath,因此必须通过使用节点选择器来确保nfs设置程序始终在装有NFS文件夹的同一台计算机上运行。