在多个命名空间中使用ReadOnlyMany声明获取ReadOnlyMany持久卷

pno*_*nak 2 google-compute-engine kubernetes google-kubernetes-engine

我有一个带有一些蛋白质数据库镜像的磁盘映像(HHsearch,BLAST,PDB等)我用一些CI工具构建,并写入GCE磁盘来运行.我想通过多个命名空间来创建这个ReadOnlyManyPV,但是我没有得到预期的结果.PodsReplicationControllersPersistentVolumeClaims

PersistentVolume配置如下所示;

apiVersion: v1
kind: PersistentVolume
metadata:
  name: "databases"
spec:
  capacity:
    storage: 500Gi
  accessModes:
    - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain
  gcePersistentDisk:
    pdName: "databases-us-central1-b-kube"
    fsType: "ext4"
Run Code Online (Sandbox Code Playgroud)

加载到kubernetes时的外观如何;

$ kubectl describe pv
Name:       databases
Labels:     <none>
Status:     Bound
Claim:      production/databases
Reclaim Policy: Retain
Access Modes:   ROX
Capacity:   500Gi
Message:
Source:
    Type:   GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
    PDName: databases-us-central1-b-kube
    FSType: ext4
    Partition:  0
    ReadOnly:   false
Run Code Online (Sandbox Code Playgroud)

PVC配置都是相同的,看起来像这样;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: databases
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage:
  volumeName: databases
Run Code Online (Sandbox Code Playgroud)

PVC他们看待系统时的s;

$ for ns in {development,staging,production}; do kubectl describe --namespace=$ns pvc; done
Name:       databases
Namespace:  development
Status:     Pending
Volume:     databases
Labels:     <none>
Capacity:   0
Access Modes:


Name:       databases
Namespace:  staging
Status:     Pending
Volume:     databases
Labels:     <none>
Capacity:   0
Access Modes:


Name:       databases
Namespace:  production
Status:     Bound
Volume:     databases
Labels:     <none>
Capacity:   0
Access Modes:
Run Code Online (Sandbox Code Playgroud)

timeout expired waiting for volumes to attach/mount for pod "mypod-anid""[namespace]". list of unattached/unmounted volumes=[databases]当我这么做时,我会看到很多$ kubectl get events --all-namespaces

当我在生产中缩放RC 1-> 2时(其中一个pod 确实设法绑定PV),第二个Pod无法安装相同的PVC.当我创建第二个ReplicationController并且PersistentVolumeClaim在我的生产命名空间中(回想一下,这是成功安装pv的pod所在的地方)由相同的支持PersistentVolume,第二个Pod/PVC无法绑定.

我错过了什么吗?一个应该如何实际使用的ROX PersistentVolumePersistentVolumeClaimS'

Saa*_*Ali 5

单个PV只能在给定时间绑定到单个PVC,无论它是否为ReadOnlyMany(一旦PV/PVC绑定,PV就不能绑定到任何其他PVC).

一旦绑定了PV/PVC,就可以从多个pod中引用ReadOnlyMany PVC.然而,在Peter的情况下,他不能使用单个PVC对象,因为他试图从多个名称空间引用它(PVC是命名空间而PV对象不是).

要使此方案有效,请创建多个相同的PV对象(引用相同的磁盘),但名称除外.这将允许每个PVC对象(在所有名称空间中)找到要绑定的PV对象.