【问题标题】:Is it possible to have 1 pod with multiple PVC of different namespaces attached是否可以有 1 个 pod 附加不同命名空间的多个 PVC
【发布时间】:2021-03-08 19:55:07
【问题描述】:

示例:

命名空间:一个

 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

【问题讨论】:

  • 很遗憾,pv 和 pvc 是 1:1 绑定的。我会详细回答。
  • PVC 必须与其 Pod 在同一个命名空间中。

标签: kubernetes kubernetes-pod


【解决方案1】:

根据Persistent Volume 文档:

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

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

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

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

PodPVCnamespaced 资源。这意味着如果您在default namespace 中有pod,则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
...

如果您要在default namespace 中创建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

在一个特定的namespace 中,一个PVC 可以被几个pod 使用。但是,一个pod 不可能从另一个namespaces 中获得很少的PVC

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2011-11-10
    相关资源
    最近更新 更多