这可能是一个愚蠢的问题,但我在网上找不到太多东西,想澄清一下。
给定两个部署 A 和 B,它们都具有不同的容器镜像:
我可以确认上述实际上是可能的吗? IE。两个不同的 Pod 使用相同的 PVC 连接到同一个卷。所以他们都在读同一卷书。
希望这是有道理的...
最佳答案
TL;博士
您可以在同一项目/命名空间中为共享卷(nfs、gluster 等)共享 PV 和 PVC,您还可以从多个项目/命名空间访问您的共享卷,但它需要项目专用的 PV 和 PVC,作为PV 绑定(bind)到单个项目/命名空间,PVC 是项目/命名空间范围的。
下面我试图说明当前的行为以及 PV 和 PVC 在 OpenShift 中的范围。这些是使用 NFS 作为持久存储层的简单示例。
此时的 accessModes 只是标签,它们在控制对 PV 的访问方面没有真正的功能。下面是一些例子来说明这一点
PV是全局的,因为它可以被任何项目/命名空间看到/访问,但是一旦它绑定(bind)到一个项目,它就只能被来自同一项目/命名空间的容器访问
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 在“默认”项目/命名空间中运行,并尝试使用相同的 PV 创建另一个 pod,但来自一个名为
testproject
的新项目访问相同的 NFS 导出。新 testproject
中的第三个 pod将无法绑定(bind)到 PV,因为它已被 default
绑定(bind)项目。[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 永远不会绑定(bind)到 pv-nfs PV,因为它无法从当前项目范围中看到它
示例 3:
我在“默认”项目中运行了 2 个不同的 pod,然后从
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,因为它们绑定(bind)到一个项目,还有 2 个 PVC,每个项目一个用于我尝试的 NFS PV使用权
示例 4:
如果我绕过 PV 和 PVC,我可以直接使用 nfs 插件从任何项目连接到共享 NFS 卷
volumes:
- name: nfsvol
nfs:
path: /opt/data5
server: nfs1.rhs
现在,卷安全是在此之上的另一层,使用补充组(用于共享存储,即 nfs、gluster 等),管理员和开发人员应该能够进一步管理和控制对共享 NFS 系统的访问。
希望有帮助
关于openshift - 在 Kubernetes/OpenShift 中的容器之间共享持久卷声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35364367/