背景:
最初,我有一组 k8s 文件。文件中的资源已在命名空间“namespace1”中部署并运行良好。
然后,我尝试将所有 k8s 基础设施的另一个副本安装到命名空间“namespace2”,将所有内容放入新的 Helm 图表中。
Helm图表values.yaml文件将每个资源的命名空间设置为'namespace2',因为所有k8s yaml文件都被我转换为Helm模板文件,并将所有资源的方式修改为具有
namespace: {{ .Values.namespace }}
。 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:
字段。 Kubernetes 中的持久卷 (PV) 是集群范围的资源,这意味着它们不属于任何特定的命名空间。这就是为什么当您使用
kubectl
检查 PV 时,您看不到为它们列出的命名空间。
与 PV 不同,持久卷声明 (PVC) 与特定的命名空间相关联。因此,虽然 PVC 必须位于特定的命名空间中,但它们声称可以从整个集群中的任何命名空间访问 PV。
这种设计允许PV在必要时被来自不同命名空间的PVC共享和访问。您看到的行为是正常的,而不是 Minikube 或 Kubernetes 中的故障或错误。