当使用kubectl创建/查询Kubernetes永久卷(PV)时,PV是否识别命名空间?

16

我正在使用从gcloud组件安装的kubectl的GKE。

我使用kubectl创建了一个具有命名空间范围的pv(gcePersistentDisk)。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cstor-cs-a-disk-david
  namespace: ns-david
spec:
  gcePersistentDisk:
    pdName: cstor-cs-a-disk-david
    fsType: ext4
    partition: 0
    readOnly: false
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 200Gi

这意味着在使用create pv时指定命名空间是/曾经是有效的:
http://kubernetes.io/third_party/swagger-ui/#!/api%2Fv1/createNamespacedPersistentVolume

当我运行'kubectl get pv'时,我可以看到pv。

$ kubectl get pv
NAME                    LABELS    CAPACITY       ACCESSMODES   STATUS      CLAIM     REASON
cstor-cs-a-disk-david   <none>    214748364800   RWO           Available

我没有预料到这一点,因为pv没有使用默认的命名空间范围创建。

如果我指定了一个命名空间参数(无论是否有效),情况也是相同的。

$ kubectl get namespaces
NAME          LABELS    STATUS
default       <none>    Active
kube-system   <none>    Active
ns-david      <none>    Active

$ kubectl get pv --namespace=demo
NAME                    LABELS    CAPACITY       ACCESSMODES   STATUS      CLAIM     REASON
cstor-cs-a-disk-david   <none>    214748364800   RWO           Available

如果我对此PV创建索赔并使用'kubectl get pvc'进行查询,则无法找到索赔,但在指定正确的命名空间时可以找到。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cstor-cs-a-disk-claim-david
  namespace: ns-david
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
  volumeName: cstor-cs-a-disk-david

$ kubectl get pvc
NAME      LABELS    STATUS    VOLUME

$ kubectl get pvc --namespace=ns-david
NAME                          LABELS    STATUS    VOLUME
cstor-cs-a-disk-claim-david   map[]     Bound     cstor-cs-a-disk-david

pv是具有命名空间作用域还是全局作用域?

4个回答

30

PVs(持久化卷),和节点一样,不归属于任何一个命名空间。然而,就像您所指出的那样, PVCs(持久化卷声明)是有作用域的。


1

上述解决方案中有链接到kube文档以查看列表。 但是在这里直接提供命令(以便快速检查而不必查看文档)

查看命名空间中存在和不存在的Kubernetes资源:

# In a namespace
kubectl api-resources --namespaced=true

# Not in a namespace
kubectl api-resources --namespaced=false

谢谢!


0

pv和命名空间属于集群,因此它们不是命名空间。 pvc是命名空间。


0

使用kubectl快速验证PV与PVC命名空间(感谢@venkatesha-k):

$ kubectl api-resources | grep "pv\|NAMESPACED"
NAME                              SHORTNAMES         APIVERSION                             NAMESPACED   KIND
persistentvolumeclaims            pvc                v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv                 v1                                     false        PersistentVolume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接