在Kubernetes / OpenShift

时间:2016-02-12 13:56:32

标签: openshift kubernetes

这可能是一个愚蠢的问题,但我没有找到太多在线,并希望澄清这一点。

给定两个部署A和B,两者都使用不同的容器映像:

  • 它们部署在K8 / OpenShift集群中的两个不同的pod(不同的rc,svc等)中。
  • 他们都需要访问相同的卷来读取文件(让我们暂时不使用它)或者至少在该卷中使用相同的目录结构。
  • 使用由针对NFS共享配置的PV(持久卷)支持的PVC(持久卷声明)挂载此卷。

我可以确认上述内容是否可行?即两个不同的 pod连接到具有相同PVC的相同卷。所以他们都在读同一卷。

希望有道理......

2 个答案:

答案 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)。