命名空间中的PersistentVolumeClaim未连接到PersistentVolume

时间:2018-09-07 06:21:20

标签: kubernetes

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

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

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

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

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做完了。

我可以用PersistentVolumeClaim查看我的新get pvc -n monitoring,然后看到

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

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

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。

我需要更改什么才能将音量与声明联系起来?

2 个答案:

答案 0 :(得分:1)

当我查看问题并将其与可行的解决方案进行比较时,我注意到在一个示例中,我没有使用设置为storageClassName的{​​{1}},而我无法使用该命名空间。 / p>

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

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

我的初步发现是,这是我犯的愚蠢错误。

答案 1 :(得分:1)

永久卷和卷声明应位于同一名称空间中。您需要添加名称空间:监视。现在您可以在下面的代码中尝试

持续量

monitoring-pv.yml

example_list = [[['aaaa'],['bbbb'],['cccc']], [['aabsd'],['fdwewd'],['dsfss']], [['sssss'],['ddddd'],['fffff']]]

def flatten(container):
    for i in container:
        if isinstance(i, (list,tuple)):
            for j in flatten(i):
                yield j
        else:
            yield i

new_list = list(flatten(example_list))
for elem in new_list:
    if ('aaa' in elem):
        print(elem)

用于永久性批量索赔

monitoring-pvc.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