
# 删除动态创建的PVC之后，底层存储有残留如何解决？
#### 问题现象
删除集群中动态创建的PVC，PVC使用的StorageClass中reclaimPolicy为Delete模式，但删除PVC时底层存储却没有被同步删除。
#### 触发场景
- 同时删除PVC和与其绑定的PV，会出现底层存储没有被同步删除的情况。
- 在删除PVC前，尝试直接删除PV，但由于PV被PVC绑定而受到保护无法直接删除。然后再删除PVC，就会出现底层存储没有被同步删除的情况。
 
#### 问题根因
在开源csi-provisioner模块业务逻辑中，常规情况下删除动态创建的PVC，会先删除PVC，待PVC资源删除成功后，将PV状态更新为Released。csi-provisioner会监听到PV更新事件，开始执行删底层卷的流程，等底层卷删除成功后，再下发删除PV的请求，这样即完成了"PVC-底层卷-PV"的完整删除链。
异常操作过程中，未删除PVC的情况下直接删除PV，但由于PV上有kubernetes.io/pv-protection这个finalizer，无法立即删除，但会给PV加上deletionTimestamp。随后删除PVC，PVC资源删除成功后，PV状态更新为Released，csi-provisioner监听到PV更新事件，但由于PV上有deletionTimestamp，csi-provisioner认为不需要删除底层卷，于是跳过删底层卷的流程，直接开始删除PV，这样PVC和PV被成功删除，但是底层卷残留。关于此问题的逻辑代码请参见[controller](https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner/blob/master/controller/controller.go#L1271)。
#### 解决方案
1. 对于已残留的底层存储，请通过手动删除的方式进行清理。
2. 对于未删除的动态创建PVC，请直接删除PVC，其绑定的PV和底层存储会被自动删除，无需手动删除。
 
