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。当我在我的生产命名空间中创建第二个 ReplicationController
和 PersistentVolumeClaim
时(回想一下,这是成功安装 pv 的 pod 所在的位置)由相同的 PersistentVolume
支持,第二个 Pod/PVC 无法绑定。
我错过了什么吗?如何真正 使用 ROX PersistentVolume
和 PersistentVolumeClaim
s?
一个PV在给定时间只能绑定到一个PVC,不管它是否是ReadOnlyMany(一旦PV/PVC绑定,PV不能绑定到任何其他PVC) .
一旦 PV/PVC 被绑定,ReadOnlyMany PVC 可能被多个 pods 引用。然而,在 Peter 的情况下,他不能使用单个 PVC 对象,因为他试图从多个命名空间引用它(PVC 有命名空间,而 PV 对象没有)。
要使此方案起作用,请创建多个除名称外完全相同(指的是同一磁盘)的 PV 对象。这将允许每个 PVC 对象(在所有名称空间中)找到要绑定的 PV 对象。
我有一个磁盘映像,其中包含一些蛋白质数据库(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。当我在我的生产命名空间中创建第二个 ReplicationController
和 PersistentVolumeClaim
时(回想一下,这是成功安装 pv 的 pod 所在的位置)由相同的 PersistentVolume
支持,第二个 Pod/PVC 无法绑定。
我错过了什么吗?如何真正 使用 ROX PersistentVolume
和 PersistentVolumeClaim
s?
一个PV在给定时间只能绑定到一个PVC,不管它是否是ReadOnlyMany(一旦PV/PVC绑定,PV不能绑定到任何其他PVC) .
一旦 PV/PVC 被绑定,ReadOnlyMany PVC 可能被多个 pods 引用。然而,在 Peter 的情况下,他不能使用单个 PVC 对象,因为他试图从多个命名空间引用它(PVC 有命名空间,而 PV 对象没有)。
要使此方案起作用,请创建多个除名称外完全相同(指的是同一磁盘)的 PV 对象。这将允许每个 PVC 对象(在所有名称空间中)找到要绑定的 PV 对象。