为什么 Kubernetes 持久卷没有命名空间?

问题描述 投票:0回答:1

背景:
最初,我有一组 k8s 文件。文件中的资源已在命名空间“namespace1”中部署并运行良好。
然后,我尝试将所有 k8s 基础设施的另一个副本安装到命名空间“namespace2”,将所有内容放入新的 Helm 图表中。
Helm图表values.yaml文件将每个资源的命名空间设置为'namespace2',因为所有k8s yaml文件都被我转换为Helm模板文件,并将所有资源的方式修改为具有

  namespace: {{ .Values.namespace }}

Helm 未能告诉我命名空间“”中已经有一个持久卷。
为了了解问题所在,我使用

查看了持久卷
kubectl get -n namespace1 pv
kubectl get -n namespace2 pv
kubectl get -n "" pv
kubectl get -n '' pv
kubectl describe -n namespace1 pv
kubectl describe -n namespace2 pv
kubectl describe -n "" pv
kubectl describe -n '' pv

我注意到我总是看到最初部署到命名空间“namespace1”的两个相同的现有持久卷。
至少我认为我将它们部署到了该名称空间。
我检查了定义持久卷的 YAML 文件,并确保卷已正确配置命名空间“namespace1”。 然后我就尝试了

kubectl get -A pv

并且得到了

NAMESPACE   NAME                                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS   REASON   AGE
            persistentvolume/resdb-pv-volume    100Mi      RWO            Retain           Bound    some-stuff/resdb-pv-claim    respv                   27d
            persistentvolume/sondb-pv-volume    100Mi      RWO            Retain           Bound    some-stuff/sondb-pv-claim    sonpv                   27d

问题:
为什么持久卷在

kubectl get
的输出中不显示命名空间?
kubectl describe
的输出中也不会显示名称空间字段。输出中完全没有
Namespace:
字段。
持久卷通常没有它们所属的命名空间吗?
这是我正在使用的 Minikube 1.32.0 或底层 Kubernetes 1.28.3 的已知故障/错误吗?

kubernetes namespaces persistent-volumes
1个回答
0
投票

Kubernetes 中的持久卷 (PV) 是集群范围的资源,这意味着它们不属于任何特定的命名空间。这就是为什么当您使用

kubectl
检查 PV 时,您看不到为它们列出的命名空间。

与 PV 不同,持久卷声明 (PVC) 与特定的命名空间相关联。因此,虽然 PVC 必须位于特定的命名空间中,但它们声称可以从整个集群中的任何命名空间访问 PV。

这种设计允许PV在必要时被来自不同命名空间的PVC共享和访问。您看到的行为是正常的,而不是 Minikube 或 Kubernetes 中的故障或错误。

© www.soinside.com 2019 - 2024. All rights reserved.