Kubernetes:无法删除PersistentVolumeClaim(pvc)

Yan*_*lem 34 kubernetes persistent-volumes persistent-volume-claims

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

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
Run Code Online (Sandbox Code Playgroud)

在此之后我试图删除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>
Run Code Online (Sandbox Code Playgroud)

并为 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>
Run Code Online (Sandbox Code Playgroud)

没有使用持久卷的pod运行.有人可以给我一个提示,为什么不删除pvc和pv?

小智 34

当持久卷受到保护时,会发生这种情况。您应该可以交叉验证:

命令:

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
Run Code Online (Sandbox Code Playgroud)

参考; 使用中的存储对象保护

  • @codersofthedark 它没有解释原因。当然是受到保护的。这就是我在问题中已经提到的。但该卷未被任何 Pod 使用 =&gt; 保护不应产生任何效果。 (2认同)

Yan*_*lem 21

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

  • 我有一个类似的问题:PVC不想死,因为该项目永远处于"终止"状态.我做了`oc edit pvc/protected-pvc -n myproject`并删除了关于终结器的两行.PVC和项目都立即消失了.我同意这可能是一个错误,因为它不应该那样.我没有在该项目中运行任何pod,只有那个PVC. (7认同)

小智 10

PV受保护。删除PVC之前先删除PV。另外,删除要求使用任何引用的PVC的任何Pod /部署。有关更多信息,请查看使用保护中的存储对象。


小智 10

对我来说 pv 处于保留状态,因此执行上述步骤不起作用。

第一,我们需要改变政策状态如下:

kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
Run Code Online (Sandbox Code Playgroud)

然后删除 pvc 如下。

kubectl get pvc

kubectl delete pvc PVC_NAME
Run Code Online (Sandbox Code Playgroud)

最后,删除 pv

kubectl delete pv PV_NAME
Run Code Online (Sandbox Code Playgroud)


Ali*_*kan 7

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

  1. kubectl编辑PVC YOUR_PVC -n NAME_SPACE
  2. 手动编辑并将#放在此行之前 在此处输入图片说明
  3. 所有pv和pvc将被删除


小智 5

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

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


Ann*_*ova 5

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

持久卷可以具有各种回收策略,包括“保留”,“回收”和“删除”。对于动态配置的PersistentVolume,默认回收策略为“删除”。这意味着当用户删除相应的PersistentVolumeClaim时,将自动删除动态预配置的卷。如果卷中包含宝贵的数据,则这种自动行为可能是不合适的。在这种情况下,使用“保留”策略更为合适。使用“保留”策略,如果用户删除PersistentVolumeClaim,则不会删除相应的PersistentVolume。而是将其移至“发布”阶段,在该阶段可以手动恢复其所有数据


小智 5

就我而言,只要删除与pvand关联的 pod pvcpvpvc终止状态就消失了