首页 > 解决方案 > 是否可以有 1 个 pod 附加不同命名空间的多个 PVC

问题描述

例子:

命名空间:一个

 PVC: a-pvc
 Pod: main-pod-to-work-with

坐骑:

a-pvc; name: a-pvc-mount; path: /pvc/a-files
b-pvc; name: b-pvc-mount; path: /pvc/b-files
c-pvc; name: c-pvc-mount; path: /pvc/c-files

命名空间:b

 PVC: b-pvc

命名空间:c

 PVC: c-pvc

标签: kuberneteskubernetes-pod

解决方案


根据Persistent Volume文档:

PersistentVolume (PV) 是集群中的一块存储,由管理员配置或使用存储类动态配置。

PersistentVolumeClaim (PVC) 是用户的存储请求。

在文档中您拥有Binding部分的位置较低,您可以在其中找到信息:

一旦绑定,PersistentVolumeClaim 绑定是独占的,无论它们是如何绑定的。PVC 到 PV 的绑定是一对一的映射,使用 ClaimRef,它是 PersistentVolume 和 PersistentVolumeClaim 之间的双向绑定。

Pod并且PVCnamespaced资源。这意味着如果你有podin default namespacepvc也必须在同一个namespace

$ kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                        NAMESPACED   KIND
...
persistentvolumeclaims            pvc          v1                                true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                false        PersistentVolume
pods                              po           v1                                true         Pod
...

如果您要poddefault namespace中创建,则将无法在 other 中查看资源namespace。这就是为什么您需要namespace在一些推荐中指定的原因。如果您不指定它,您的输出将来自default命名空间。

$ kubectl get po
No resources found in default namespace.
$ kubectl get po -n kube-system
NAME                                                        READY   STATUS    RESTARTS   AGE
event-exporter-gke-564fb97f9-wtx9w                          2/2     Running   0          9m2s
fluentbit-gke-8tcm6                                         2/2     Running   0          8m48s
fluentbit-gke-cdm2w                                         2/2     Running   0          8m51s

测试

根据Configure a Pod to Use a PersistentVolume for Storage文档,您有创建步骤PVPVC并且Pods

$ kubectl get po
NAME            READY   STATUS    RESTARTS   AGE
task-pv-pod     1/1     Running   0          5m20s
task-pv-pod-2   1/1     Running   0          4m43s
task-pv-pod-3   1/1     Running   0          2m40s

很少有 pod 可以使用相同的PVC. 但所有podsPVC都在同一个namespace。作为资源podpvc不可能pod从一个命名空间使用另一个命名空间的资源namespace

结论

Kubernetesnamespaced资源仅对相同namespace(如podor pvc)中的资源可见。在这种情况下,您已指定namespace使用--namespace <namespace>or -n <namespace>。还有一些集群范围的资源PersistentVolume,例如不需要指定名称,因为它们在整个集群中可见。要获取资源列表以检查它是否已命名,您可以使用 command $ kubectl api-resources

在一个特定的情况namespace下,一个PVC可以由几个 pod 使用。然而,一个人与另一个pod人的少是不可能的。PVCnamespaces

如果这没有回答您的问题,请详细说明。


推荐阅读