【问题标题】:Kubernetes: Can't delete PersistentVolumeClaim (pvc)Kubernetes:无法删除 PersistentVolumeClaim (pvc)
【发布时间】:2018-12-23 19:49:33
【问题描述】:

我通过调用创建了以下持久卷

kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-monitoring-static-content
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/some/path"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-monitoring-static-content-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 100Mi

在此之后,我尝试删除 pvc。但是这个命令卡住了。 当调用kubectl describe pvc pv-monitoring-static-content-claim 时,我得到以下结果

Name:          pv-monitoring-static-content-claim
Namespace:     default
StorageClass:
Status:        Terminating (lasts 5m)
Volume:        pv-monitoring-static-content
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [foregroundDeletion]
Capacity:      100Mi
Access Modes:  RWO
Events:        <none>

对于kubectl describe pv pv-monitoring-static-content

Name:            pv-monitoring-static-content
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller=yes
Finalizers:      [kubernetes.io/pv-protection foregroundDeletion]
StorageClass:
Status:          Terminating (lasts 16m)
Claim:           default/pv-monitoring-static-content-claim
Reclaim Policy:  Retain
Access Modes:    RWO
Capacity:        100Mi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /some/path
    HostPathType:
Events:            <none>

没有运行使用持久卷的 pod。谁能给我一个提示,为什么 pvc 和 pv 没有被删除?

【问题讨论】:

    标签: kubernetes persistent-volumes persistent-volume-claims


    【解决方案1】:

    当持久卷受到保护时会发生这种情况。您应该能够交叉验证这一点:

    命令:

    kubectl describe pvc PVC_NAME | grep Finalizers

    输出:

    Finalizers: [kubernetes.io/pvc-protection]

    您可以通过使用 kubectl patch 将终结器设置为 null 来解决此问题:

    kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
    

    参考; Storage Object in Use Protection

    【讨论】:

    • 该解决方案比跨公司防火墙编辑解决方案效果更好
    • @codersofthedark 它没有解释原因。当然是受到保护的。这就是我在问题中已经提到的。但是该卷没有被任何 Pod 使用 => 保护不应该有任何效果。
    • 我遇到了这个问题,当我尝试上面的命令来修补 pvc 时,一直收到错误 unable to parse "'{metadata:{finalizers:": yaml: found unexpected end of stream
    • 就我而言,PVC 是受保护的,因为我只删除了 StatefulSet,而不是底层的 Pod,所以 Pod 仍在使用 PVC,这就是它处于 TERMINATING 阶段的原因
    • 我在 GKE 上,似乎有什么东西正在立即设置终结器。 ://
    【解决方案2】:

    我不确定为什么会发生这种情况,但是在通过 kubernetes 仪表板删除 pv 和 pvc 的终结器后,两者都被删除了。 重复我在问题中描述的步骤后,再次发生这种情况。 好像是个bug。

    【讨论】:

    • 我遇到了类似的问题:PVC 不想死,因此项目永远处于“终止”状态。我做了oc edit pvc/protected-pvc -n myproject 并删除了关于终结器的那两行。 PVC 和项目都立即消失了。我同意这可能是一个错误,因为它不应该那样表现。我没有在那个项目中运行任何 pod,只有那个 PVC。
    • 我刚刚遇到了同样的问题,这也是我的解决方案...删除约束。这不是“谢谢”的评论。相反,我添加这个是因为它已经 7 个多月后了,而且这个问题似乎仍然存在于野外,并且认为新读者可能会受益于知道这一点。我正在最新的“Docker for Mac”后面运行最新的“minikube”(几天前安装和构建)。
    • ...我正在关注在线教程。我不知道这是否与这个错误有关,但我得到的行为与导师的不同。他创建了一个新的 PVC,其状态最初为“待定”。只有当他手动创建 PV 时,PVC 的状态才会变为“绑定”。就我而言,似乎使用他所做的相同命令创建 PVC 会立即创建一个 PV 以使用 PVC 分配的存储。有谁知道这是为什么?
    • 因为我认为答案不完整(未解释 laics 解决方案的步骤) - 您可以在特定 PV 的 YAML 中的仪表板中删除终结器。此外,您可以通过以下方式在终端中执行此操作:kubectl patch pvc NAME -p '{"metadata":{"finalizers":null}}'kubectl patch pod NAME -p '{"metadata":{"finalizers":null}}'。来源github.com/kubernetes/kubernetes/issues/…
    • 已经在另一个答案中提到:stackoverflow.com/a/56182934/2576531
    【解决方案3】:

    您可以摆脱编辑 pvc 的麻烦!去除 pvc 保护。

    1. kubectl 编辑 pvc YOUR_PVC -n NAME_SPACE
    2. 手动编辑并将 # 放在此行之前
    3. 将删除所有 pv 和 pvc

    【讨论】:

    • 这条评论帮助我删除了一个卡在终止状态的卷。谢谢。
    【解决方案4】:

    PV 受到保护。在删除 PVC 之前先删除 PV。此外,删除任何声明任何引用 PVC 的 pod/部署。欲了解更多信息,请查看Storage Object in Use Protection

    【讨论】:

    • 我试图删除两者。 pv和pvc。正如您在描述输出中看到的那样,两者都处于终止状态
    • 您使用的是什么平台?您是否尝试过使用kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml 删除?
    【解决方案5】:

    对我来说 pv 处于保留状态,因此执行上述步骤无效。

    首先我们需要改变策略状态如下:

    kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
    

    然后删除pvc如下。

    kubectl get pvc
    
    kubectl delete pvc PVC_NAME
    

    最后,删除 pv

    kubectl delete pv PV_NAME
    

    【讨论】:

      【解决方案6】:

      几小时前刚遇到这个问题。

      我删除了使用此引用的部署,PV/PVC 将自动终止。

      【讨论】:

      • 谢谢!这对我有用
      【解决方案7】:

      如果 PV 仍然存在,可能是因为它的 ReclaimPolicy 设置为 Retain,在这种情况下,即使 PVC 消失,它也不会被删除。来自文档:

      PersistentVolume 可以有各种回收策略,包括 “保留”、“回收”和“删除”。对于动态配置 PersistentVolumes,默认回收策略是“删除”。这意味着 动态配置的卷会自动删除,当 用户删除相应的 PersistentVolumeClaim。这种自动 如果卷包含宝贵的数据,则行为可能不合适。 在这种情况下,使用“保留”策略更为合适。和 “保留”策略,如果用户删除 PersistentVolumeClaim,则 对应的 PersistentVolume 不会被删除。相反,它被移动 到 Released 阶段,所有数据都可以手动恢复

      【讨论】:

      • Recycle 现已弃用
      【解决方案8】:

      就我而言,只要我删除了与pvpvc 关联的pod,处于终止状态的pvpvc 就会消失

      【讨论】:

      • "没有运行使用持久卷的 pod"
      • 我今天又遇到了这个问题。 2 个没有关联 Pod 和 PVC 的 PV,在被删除时永久变为 terminating 状态。为了修复它,我运行了kubectl patch pv local-pv-324352d9 -n ops -p '{"metadata":{"finalizers": []}}' --type=merge 然后 PV 消失了。谢谢@Xiak 提示
      【解决方案9】:

      在我的情况下,pvc 没有被删除,因为缺少命名空间(我在删除所有资源/pvc 之前删除了命名空间) 解决方案:创建名称空间与以前相同的名称,然后我能够删除finalizers,最后是 pvc

      【讨论】:

        【解决方案10】:

        如果您已经删除 PV 并尝试删除 PVC

        检查卷是否被此命令附加

        kubectl 获取卷附件

        删除 PVC:-

        首先你必须使用这个命令删除一个 pvc pne

        kubectl 删除 pvc --grace-period=0 --force

        或者你可以删除所有的 PVC 使用

        kubectl 删除 pvc --all

        现在您可以通过使用看到PVC的状态为终止

        kubectl 获取 pvc

        然后您必须使用

        应用此删除

        kubectl patch pvc {PVC_NAME} -p '{"metadata":{"finalizers":null}}'

        【讨论】:

          【解决方案11】:
          kubectl get pvc pvc_name -o yaml > pvcfile.yaml
          

          然后打开 pvcfile.yaml 并删除 finalizers 行,保存并应用:

          kubectl apply -f pvcfile.yaml 
          

          【讨论】:

          • 可以用'kubectl edit pvc pvc_name'代替两个命令,然后删除该部分并保存。顺便说一句,根据原始问题,作者删除了 PVC - 但由于上述答案中指定的其他原因,该操作失败。
          猜你喜欢
          • 2020-06-11
          • 1970-01-01
          • 1970-01-01
          • 2020-02-13
          • 1970-01-01
          • 2020-01-12
          • 2021-06-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多