这可能是一个愚蠢的问题,但我没有找到太多在线,并希望澄清这一点。
给定两个部署A和B,两者都使用不同的容器映像:
我可以确认上述内容是否可行?即两个不同的 pod连接到具有相同PVC的相同卷。所以他们都在读同一卷。
希望有道理......
答案 0 :(得分:17)
TL; DR 您可以在共享卷(nfs,gluster等)的同一项目/命名空间内共享PV和PVC,您也可以从多个项目/命名空间访问您的共享卷,但它需要项目专用的PV和PVC,作为PV绑定到单个项目/命名空间,PVC是项目/命名空间范围。
下面我试图说明当前行为以及PV和PVC在OpenShift中的作用范围。这些是使用NFS作为持久存储层的简单示例。
此时的accessModes只是标签,它们在控制对PV的访问方面没有真正的功能。以下是显示此内容的一些示例
PV是全局的,因为它可以被任何项目/命名空间看到/访问,但是一旦它绑定到项目,它就只能被来自同一项目/命名空间的容器访问
PVC是特定于项目/命名空间的(因此,如果您有多个项目,则需要为每个项目安装新的PV和PVC以连接到共享NFS卷 - 无法重用第一个项目中的PV)
示例1:
我有2个不同的pod在"默认"项目/命名空间,都访问相同的PV和NFS导出的共享。安装和运行都很好。
[root@k8dev nfs_error]# oc get pv
NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv-nfs <none> 1Gi RWO Bound default/nfs-claim 3m
[root@k8dev nfs_error]# oc get pods <--- running from DEFAULT project, no issues connecting to PV
NAME READY STATUS RESTARTS AGE
nfs-bb-pod2-pvc 1/1 Running 0 11m
nfs-bb-pod3-pvc 1/1 Running 0 10m
示例2:
我有2个不同的pod在&#34;默认&#34; project / namespace并尝试使用相同的PV创建另一个pod,但是从名为testproject
的新项目创建另一个pod以访问相同的NFS导出。来自新testproject
的第三个pod将无法绑定到PV,因为它已被default
项目绑定。
[root@k8dev nfs_error]# oc get pv
NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv-nfs <none> 1Gi RWO Bound default/nfs-claim 3m
[root@k8dev nfs_error]# oc get pods <--- running from DEFAULT project, no issues connecting to PV
NAME READY STATUS RESTARTS AGE
nfs-bb-pod2-pvc 1/1 Running 0 11m
nfs-bb-pod3-pvc 1/1 Running 0 10m
**从另一个项目(testproject)创建针对现有PV的新索赔,PVC将失败
[root@k8dev nfs_error]# oc get pvc
NAME LABELS STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-claim <none> Pending 2s
** nfs-claim永远不会绑定到pv-nfs PV,因为它无法从它的当前项目范围中看到它
示例3:
我有2个不同的pod在&#34;默认&#34;项目,然后从testproject
创建另一个PV和PVC和Pod。两个项目都能够访问相同的NFS导出共享,但我需要在每个项目中使用PV和PVC。
[root@k8dev nfs_error]# oc get pv
NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv-nfs <none> 1Gi RWX Bound default/nfs-claim 14m
pv-nfs2 <none> 1Gi RWX Bound testproject/nfs-claim2 9m
[root@k8dev nfs_error]# oc get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nfs-bb-pod2-pvc 1/1 Running 0 11m
default nfs-bb-pod3-pvc 1/1 Running 0 11m
testproject nfs-bb-pod4-pvc 1/1 Running 0 15s
**注意,我现在有三个pod在两个项目中运行到同一个NFS共享卷,但我需要两个PV,因为它们绑定到一个项目,2个PVC,一个,1个对于每个项目和我试图访问的NFS PV
示例4:
如果我绕过PV和PVC,我可以直接从任何项目使用nfs插件直接连接到共享NFS卷
volumes:
- name: nfsvol
nfs:
path: /opt/data5
server: nfs1.rhs
现在,卷安全性是另一层,使用补充组(用于共享存储,即nfs,gluster等),管理员和开发人员应该能够进一步管理和控制对共享NFS的访问系统
希望有所帮助
答案 1 :(得分:0)
AFAIK,不支持多次绑定PV。您可以直接为您的用例使用卷源(在您的情况下为NFS)。