Kubernetes(K8s) 无法删除 PVC PV 的解决办法

2025-05-08 16:06

正常的删除顺序应该是 StatefulSetDeployment -> Pod -> PVC -> PV。其中 Pod 一般会随着 StatefulSet 或 Deployment 删除自动删除,但如果运行失败的 Pod(容器组) 会一直保留,需要手动删除。

删除上游依赖

如果出现 PVCPV 无法删除的情况,通常是因为没有按照顺序删除,特别是有失败的 Pod 未被删除。只要删除上游的依赖,就会自动删除。

顽固的 PV

在上游依赖都已删除的情况下,依然无法删除的顽固 PV,可继续以下步骤。

删除 PV 绑定

PV 状态为 Released,就是无法删除,查看 PV 详情,依然显示有绑定的 PVC(实际该 PVC 已经删除)。此时可删除 claimRef 字段:

# 删除该字段
claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: my-pvc
    namespace: my-namespace
    ...

清除 Finalizers

删除 claimRef 字段后,PV 状态变为 Available,但依然无法删除。此时可以将 Finalizers 设置为 []

metadata:
  finalizers: []

此时 PV 终于被删除。

This happens when persistent volume is protected. You should be able to cross verify this:

Command:

kubectl describe pvc PVC_NAME | grep Finalizers

Output:

Finalizers: [kubernetes.io/pvc-protection]

You can fix this by setting finalizers to null using kubectl patch:

kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
0791-85271700
QQ咨询:1779755751
QQ交流群:626599871
微信咨询
微信扫码咨询
微信交流群
微信交流群
Powered by UJCMS © 2010-2025 All Rights Reserved
QQ咨询
电话
微信
微信扫码咨询