在Kubernetes/OpenShift中的容器之间共享持久的卷声明
这可能是个愚蠢的问题,但我在网上找不到太多,我想澄清一下 给定两个部署A和B,它们都具有不同的容器映像:在Kubernetes/OpenShift中的容器之间共享持久的卷声明,openshift,kubernetes,Openshift,Kubernetes,这可能是个愚蠢的问题,但我在网上找不到太多,我想澄清一下 给定两个部署A和B,它们都具有不同的容器映像: 它们部署在K8/OpenShift集群中的两个不同的POD(不同的rc、svc等)中 它们都需要访问相同的卷来读取文件(暂时不要锁定),或者至少需要访问该卷中相同的目录结构 使用由针对NFS共享配置的PV(持久卷)支持的PVC(持久卷声明)装载此卷 我是否可以确认上述情况实际上是可能的?即,两个不同的吊舱用相同的PVC连接到同一体积。所以他们都在读同一卷书 希望这是有意义的…AFAIK,
- 它们部署在K8/OpenShift集群中的两个不同的POD(不同的rc、svc等)中
- 它们都需要访问相同的卷来读取文件(暂时不要锁定),或者至少需要访问该卷中相同的目录结构
- 使用由针对NFS共享配置的PV(持久卷)支持的PVC(持久卷声明)装载此卷
希望这是有意义的…AFAIK,不支持多次绑定PV。您可以直接为您的用例使用卷源(在您的用例中为NFS)。TL;博士 您可以在同一个项目/命名空间内为共享卷(nfs、gluster等)共享PV和PVC,也可以从多个项目/命名空间访问共享卷,但这需要项目专用PV和PVC,因为PV绑定到单个项目/命名空间,而PVC是项目/命名空间范围的 下面我试图说明当前的行为以及PV和PVC在OpenShift中的作用域。这些是使用NFS作为持久存储层的简单示例 此时的访问模式只是标签,它们在控制PV访问方面没有真正的功能。下面是一些例子来说明这一点 PV是全局的,因为它可以被任何项目/命名空间看到/访问,但是一旦它绑定到一个项目,它就只能被来自同一项目/命名空间的容器访问 PVC是特定于项目/命名空间的(因此,如果您有多个项目,则需要为每个项目提供一个新的PV和PVC,以连接到共享NFS卷-无法重用第一个项目中的PV) 示例1:
我在“默认”项目/命名空间中运行了两个不同的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
**针对另一个项目(testproject)的现有PV创建新的索赔,PVC将失败
[root@k8dev nfs_error]# oc get pvc
NAME LABELS STATUS VOLUME CAPACITY ACCESSMODES AGE
nfs-claim <none> Pending 2s
**请注意,我现在有三个pod在两个项目中运行到同一个NFS共享卷,但我需要两个PV,因为它们绑定到单个项目,还有两个PVC,每个项目一个,我尝试访问的NFS PV
示例4:
如果我绕过PV和PVC,我可以直接使用NFS插件从任何项目连接到共享NFS卷
volumes:
- name: nfsvol
nfs:
path: /opt/data5
server: nfs1.rhs
现在,卷安全性是在此基础上的另一层,通过使用补充组(用于共享存储,即nfs、gluster等),管理员和开发人员应该能够进一步管理和控制对共享nfs系统的访问
希望这有帮助基于此(),它实际上似乎是可能的?在本例中,有两个rc使用相同的pvc。您可以在任何地方绑定PV,但卷提供程序本身可以拒绝同时访问的附加请求(对于Ceph、EBS或GCE)。NFS没有任何保证-如果您想防止NFS同时从两个吊舱中使用,您需要自己的防护/锁定。@Clayton:我也尝试对多个吊舱使用相同的PV,效果很好,但我认为在这种情况下,吊舱之间也会共享数据。这里我主要关心的是,如果PV包含2 GB的数据,那么所有的数据是否都可以提供给使用这个PV的POD,这是我们不想要的。Pod应该只有它的数据,而不是其他数据。我在这里也问了这个问题,stackoverflow.com/questions/36624034/…,但没有回答。如果你能澄清这一点,那将非常有帮助。提前谢谢!感谢这有助于分配。@DonovanMuller:我也尝试将同一PV用于多个POD,它工作正常,但我认为在这种情况下,POD之间也会共享数据。这里我主要关心的是,如果PV包含2 GB的数据,那么所有的数据是否都可以提供给使用这个PV的POD,这是我们不想要的。Pod应该只有它的数据,而不是其他数据。我在这里也问了这个问题,但没有回答。如果你能澄清这一点,那将非常有帮助。提前谢谢@剧本:对于我的上述问题,我也很感激你的想法。非常感谢@priyank-我认为如果您想限制共享存储上的数据/目录,您可以从securityContext传入补充组,然后在NFS服务器上设置所有权和组,即dir1对组A和B开放,然后dir1/dirA只对podA开放,而dir1/dirB只对podB开放-因此所有POD都可以访问dir1,但只有podA可以访问dirA,podB可以访问dirB示例4正是我想要的需要避免跨多个名称空间创建多个PersistentVolume和声明
[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
volumes:
- name: nfsvol
nfs:
path: /opt/data5
server: nfs1.rhs