gpt4 book ai didi

Kubernetes PV 在删除/重新创建后拒绝绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 23:21:02 26 4
gpt4 key购买 nike

给定以下 PVC 和 PV:

  • 聚氯乙烯:
  • apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: packages-pvc
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi
    volumeName: packages-volume
  • 光伏:
  • apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: packages-volume
    namespace: test
    spec:
    claimRef:
    name: packages-pvc
    namespace: test
    accessModes:
    - ReadWriteMany
    nfs:
    path: {{NFS_PATH}}
    server: {{NFS_SERVER}}
    capacity:
    storage: 1Gi
    persistentVolumeReclaimPolicy: Retain

    如果我创建 PV,然后创建 PVC,它们将绑定(bind)在一起。但是,如果我删除 PVC 然后重新创建它,它们不会绑定(bind)(pvc 挂起)。为什么?

    最佳答案

    注意删除后PVC , PV留在Released地位:

    $ kubectl get pv packages-volume
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
    packages-volume 1007Gi RWX Retain Released default/packages-pvc 10m

    它应该有状态 Available所以它可以被另一个 PersistentVolumeClaim 重复使用实例。

    为什么不是 Available ?

    如果显示当前 yaml PV 的定义,您可以通过执行以下操作轻松完成:
    kubectl get pv packages-volume -o yaml

    你可能会注意到 claimRef它包含 uid 的部分最近删除的 PersistentVolumeClaim :
      claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: packages-pvc
    namespace: default
    resourceVersion: "10218121"
    uid: 1aede3e6-eaa1-11e9-a594-42010a9c0005

    您可以通过发出以下命令轻松验证它:
    kubectl get pvc packages-pvc -o yaml | grep uid

    就在你删除你的 PVC之前并将其与 PV 进行比较定义包含。你会看到这和 uid 完全一样。仍然由您的 PV 推荐在 PVC 之后被删除。这个剩余的引用是 PV 的实际原因。留在 Released地位。

    为什么新建PVC留在 Pending状态 ?

    虽然你新创建的 PVC在你看来可能完全一样 PVC在创建它时使用相同的 yaml 刚刚删除文件,从 Kubernetes 的角度来看这是 PersistentVolumeClaim 的全新实例完全不同的对象 uid .这就是它保留在 Pending 中的原因。状态并且无法绑定(bind)到 PV .

    解决方案:

    制作 PV Available再次,您只需要删除提到的 uid引用例如通过发布:
    kubectl patch pv packages-volume --type json -p '[{"op": "remove", "path": "/spec/claimRef/uid"}]'

    或者通过删除整个 claimRef可以按如下方式完成的部分:
    kubectl patch pv packages-volume --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'

    关于Kubernetes PV 在删除/重新创建后拒绝绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168408/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com