我有一个磁盘映像,其中包含一些蛋白质数据库(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。当我在我的生产命名空间中创建第二个PersistentVolumeClaim
和PersistentVolume
时(回想一下,这是成功安装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();
}
?
答案 0 :(得分:5)
单个PV只能在给定时间绑定到单个PVC,无论它是否为ReadOnlyMany(一旦PV / PVC绑定,PV就无法绑定到任何其他PVC)。
一旦绑定了PV / PVC,就可以从多个pod中引用ReadOnlyMany PVC。然而,在Peter的案例中,他不能使用单个PVC对象,因为他试图从多个名称空间引用它(PVC是名称空间而PV对象不是)。
要使此方案有效,请创建多个相同的PV对象(引用同一磁盘),但名称除外。这将允许每个PVC对象(在所有名称空间中)找到要绑定的PV对象。