Recover Persistent Volumes from "Terminating" State
Problem
- Accidentally performed delete operation on PV instead of PVC.
$ kubectl delete pv --all -n <Namespace>
- All PV's across the Cluster are in Terminating state. Need to recover or set it back to "Bound" state.
Environment
- Platform9 Managed Kubernetes - All versions
]Cause
- Default behaviour having the annotation kubernetes.io/pv-protection, it doesn't let controllers to delete PV till the time it is Bound with a PVC.
Resolution
As a workaround, the below operations can be carried out to try recover the PV back to bound state.
- Take the backup of the existing PV
kubectl get pv <pvname> -o yaml > pv.yaml
- Edit the existing PV and delete the spec.claimRef
section. This will delete the PV completely. The PVC would be in lost status initially when the PV is deleted
$ kubectl edit pv <pvname>
- Edit the backed up PV YAML and delete the metadata.deletionTimestamp
line.
$ vi pv.yaml and delete the "metadata.deletionTimestamp" line
- Create the PV and wait for the status to be updated. After recreating the PV, the PVC should be back in bound status.
$ kubectl create -f pv.yaml
$ kubectl get pv
$ kubectl get pvc -n <namespace>
Was this page helpful?