kubernetes 是否可能有一个pod与多个不同命名空间的PVC连接

n6lpvg4x  于 2023-05-28  发布在  Kubernetes
关注(0)|答案(1)|浏览(491)

示例:
命名空间:a

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
disho6za

disho6za1#

[TL;DR]在同一个namespace中,一个PVC可以被两个或多个不同的pod重用。但是,pod不可能从两个不同的namespaces装载基于PVCs的卷(这将违反namespace的主要思想-隔离分配给不同用户的资源)。

更多信息

根据永久卷文档:

PersistentVolume(PV)是集群中由管理员调配或使用存储类动态调配的一块存储。
PersistentVolumeClaim(PVC)是用户对存储的请求。

在文档的下面有Binding部分,您可以在其中找到信息:
一旦绑定,PersistentVolumeClaim绑定是独占的,无论它们是如何绑定的。PVC到PV绑定是一对一Map,使用ClaimRef,ClaimRef是PersistentVolume和PersistentVolumeClaim之间的双向绑定。
PodPVCnamespaced资源。这意味着如果你有poddefault namespace中,pvc也必须在同一个namespace中。

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

如果您在defaultnamespace中创建pod,则无法在其他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文档,您可以创建PVPVCPods

$ 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的资源。

总结

Kubernetes namespaced资源仅对相同namespace中的资源可见(如podpvc)在这种情况下,您必须使用--namespace <namespace>-n <namespace>指定namespace。还有一些集群范围的资源,如PersistentVolume,不需要指定名称,因为它们在整个集群中都是可见的。要获取资源列表以检查它是否具有命名空间,您可以使用命令$ kubectl api-resources
如果这没有回答你的问题,请详细说明。

相关问题