文档首页/ 云容器引擎 CCE_Autopilot集群/ 常见问题/ 存储管理/ 删除动态创建的PVC之后,底层存储有残留如何解决?
更新时间:2024-11-08 GMT+08:00
分享

删除动态创建的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

解决方案

  1. 对于已残留的底层存储,请通过手动删除的方式进行清理。
  2. 对于未删除的动态创建PVC,请直接删除PVC,其绑定的PV和底层存储会被自动删除,无需手动删除。

相关文档