GKE ReadOnlyMany 持久卷在多个命名空间中具有 ReadOnlyMany 声明

GKE ReadOnlyMany Persistent Volume with ReadOnlyMany Claims in Multiple Namespaces

我有一个磁盘映像,其中包含一些蛋白质数据库(HHsearch、BLAST、PDB 等)的镜像,我使用一些 CI 工具构建它,并将其写入 GCE 磁盘 运行反对。我想通过 PersistentVolumeClaims 在多个名称空间中访问由 ReplicationControllers 创建的 Pods 中的这个 ReadOnlyMany PV,但我没有得到预期的结果。

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"

加载到 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

PVC 配置完全相同,如下所示;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: databases
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage:
  volumeName: databases

以及 PVC 在系统中的样子;

$ 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:

当我 $ kubectl get events --all-namespaces

时,我看到了很多 timeout expired waiting for volumes to attach/mount for pod "mypod-anid""[namespace]". list of unattached/unmounted volumes=[databases]

当我在生产中扩展 RC 1->2(其中一个 pod did 设法绑定 PV)时,第二个 Pod 无法安装相同的 PVC。当我在我的生产命名空间中创建第二个 ReplicationControllerPersistentVolumeClaim 时(回想一下,这是成功安装 pv 的 pod 所在的位置)由相同的 PersistentVolume 支持,第二个 Pod/PVC 无法绑定。

我错过了什么吗?如何真正 使用 ROX PersistentVolumePersistentVolumeClaims?

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

一旦 PV/PVC 被绑定,ReadOnlyMany PVC 可能被多个 pods 引用。然而,在 Peter 的情况下,他不能使用单个 PVC 对象,因为他试图从多个命名空间引用它(PVC 有命名空间,而 PV 对象没有)。

要使此方案起作用,请创建多个除名称外完全相同(指的是同一磁盘)的 PV 对象。这将允许每个 PVC 对象(在所有名称空间中)找到要绑定的 PV 对象。