【问题标题】:PersistentVolumeClaim in a namespace does not connect to a PersistentVolume命名空间中的 PersistentVolumeClaim 未连接到 PersistentVolume
【发布时间】:2021-08-11 11:09:20
【问题描述】:

我的 PersistentVolumeClaim 不会使用我为其准备的 PersistentVolume。

我在monitoring-pv.yaml 中有这个PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: monitoring-volume
  labels:
    usage: monitoring
spec:
  capacity:
    storage: 50Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /data/k8data/monitoring

完成后

kubectl apply -f monitoring-pv.yaml 

我可以用kubectl get pv检查它是否存在

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                                     STORAGECLASS   REASON    AGE
monitoring-volume                          50Gi       RWO            Retain           Available                                                                        5m

我在monitoring-pvc.yaml 中的PersistentVolumeClaim 看起来像这样:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: monitoring-claim
  namespace: monitoring
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  selector:
    matchLabels:
      usage: monitoring    

当我执行kubectl apply -f monitoring-pvc.yaml 时,它会被创建。

我可以用get pvc -n monitoring查看我的新PersistentVolumeClaim,我明白了

NAME                           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
monitoring-claim               Pending                                                                        manual         31s

当我用kubectl get pv 查看我的PersistentVolume 时,我可以看到它仍然可用:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                                     STORAGECLASS   REASON    AGE
monitoring-volume                          50Gi       RWO            Retain           Available                                                                        16m

我原以为PersistentVolumeBound,但事实并非如此。当我使用与此名称相同的“PersistentVolumeClaim”时,会创建一个新的PersistentVolumeClaim,它是用/tmp 编写的,因此不是很持久。

当我在没有命名空间的情况下为我的PersistentVolumeClaim 执行相同操作时,一切似乎都正常。

我在 Ubuntu 18.04 上使用 minikube。

我需要更改哪些内容才能将卷与声明连接起来?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    当我查看我的问题并将其与一个有效的解决方案进行比较时,我注意到我错过了在一个没有可以使用的命名空间的示例中设置为 manualstorageClassName

    我更新后的PersistentVolume现在看起来像这样:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: monitoring-volume
      labels:
        usage: monitoring
    spec:
      storageClassName: manual
      capacity:
        storage: 50Gi
      accessModes:
      - ReadWriteOnce
      hostPath:
        path: /data/k8data/monitoring
    

    唯一的区别是

      storageClassName: manual
    

    我的初步调查结果是,这是我犯的愚蠢错误。

    【讨论】:

      【解决方案2】:

      Persistent Volume 和 Volume Claim 应该在同一个命名空间中。您需要添加命名空间:监控。现在你可以试试下面的代码

      对于持久卷

      monitoring-pv.yml

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: monitoring-volume
        labels:
          usage: monitoring
        namespace: monitoring 
      spec:
        capacity:
          storage: 50Gi
        accessModes:
        - ReadWriteOnce
        hostPath:
          path: /data/k8data/monitoring
      

      对于持久卷声明

      monitoring-pvc.yml

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: monitoring-claim
        namespace: monitoring
      spec:
        storageClassName: manual
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
        selector:
          matchLabels:
            usage: monitoring
      

      【讨论】:

      • 问题是关于namespace。这应该是正确的答案。
      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      相关资源
      最近更新 更多