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

时间:2016-07-18 18:55:07

标签: google-compute-engine kubernetes google-kubernetes-engine

我有一个磁盘映像,其中包含一些蛋白质数据库(HHsearch,BLAST,PDB等)的镜像。我使用一些CI工具构建,并写入GCE磁盘以进行运行。我想通过ReadOnlyMany在多个名称空间中Pods创建ReplicationControllers PersistentVolumeClaims PV中的apiVersion: v1 kind: PersistentVolume metadata: name: "databases" spec: capacity: storage: 500Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain gcePersistentDisk: pdName: "databases-us-central1-b-kube" fsType: "ext4" PV,但我没有得到预期的结果。

PersistentVolume配置如下所示;

$ 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

加载到kubernetes时的外观;

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

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

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

timeout expired waiting for volumes to attach/mount for pod "mypod-anid""[namespace]". list of unattached/unmounted volumes=[databases]

当我$ kubectl get events --all-namespaces

时,我看到很多ReplicationController

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

我错过了什么吗?如何使用PersistentVolumeClaim来实际使用 ROX @Test public void shouldCompleteWithValidCredentials() { mMockModelContract.login("steve", "1234", mMockOnLoginCompletedListener); verify(mMockOnLoginCompletedListener, times(1)).onSuccess(); } @Test public void shouldNotCompleteWithInvalidUser() { mMockModelContract.login("wrong_user", "1234", mMockOnLoginCompletedListener); verify(mMockOnLoginCompletedListener, times(1)).onUsernameError(); } @Test public void shouldNotCompleteWithInvalidPassword() { mMockModelContract.login("steve", "wrong_password", mMockOnLoginCompletedListener); verify(mMockOnLoginCompletedListener, times(1)).onPasswordError(); }

1 个答案:

答案 0 :(得分:5)

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

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

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