<p>I created the following persistent volume by calling</p>

<p><code>kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml</code></p>

<pre><code>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
</code></pre>

<p>After this I tried to delete the pvc. But this command stuck.
when calling <code>kubectl describe pvc pv-monitoring-static-content-claim</code> I get the following result </p>

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

<p>And for <code>kubectl describe pv pv-monitoring-static-content</code></p>

<pre><code>Name:            pv-monitoring-static-content
Labels:          &lt;none&gt;
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:   &lt;none&gt;
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /some/path
    HostPathType:
Events:            &lt;none&gt;
</code></pre>

<p>There is no pod running that uses the persistent volume. Could anybody give me a hint why the pvc and the pv are not deleted?</p>

Yannic Bürgmann
<p>This happens when persistent volume is protected. You should be able to cross verify this: </p>

<p>Command:</p>

<p><code>kubectl describe pvc PVC_NAME | grep Finalizers</code></p>

<p>Output: </p>

<p><code>Finalizers:    [kubernetes.io/pvc-protection]</code></p>

<p>You can fix this by setting finalizers to null using <code>kubectl patch</code>:</p>

<pre><code>kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
</code></pre>

<p>Ref; <a href="https://kubernetes.io/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection" rel="noreferrer">Storage Object in Use Protection</a></p>
