问题现象:
kvm创建虚拟机时,磁盘pvc一直pending创建不出来,排查发现ceph存储已满。进一步检查分析发现,在删除kvm系统盘pvc后,集群中的pv状态变成release,但是没有清理,查看pv详情有如下报错:

分析过程:
1. 梳理pv卷删除流程

1.用户删除相关 PVC。
2.External Provisioner 组件观察到 PVC 删除事件,根据 PVC 的回收策略(Reclaim)执行不同操作:
Delete:调用外部 CSI 插件的DeleteVolume 函数以删除卷;一旦卷成功删除,Provisioner会删除集群中对应 PV 对象。
Retain:Provisioner不执行卷删除操作。
2. 查看csi-rbdplugin-provisioner日志和报错能对上,provisioner监测到pvc删除事件开始调用csi-rbdplugin删除pv对应的存储,删除时出错
controller.go:1512] delete "pvc-25e5bb75-b948-4131-8aba-a52bfca55913": volume deletion failed: rpc error: code = Internal desc = rbd: ret=-39, Directory not empty
3. 查看csi-rbdplugin日志,删除镜像temp(kubernetes/csi-vol-1b5a6cea-f2c2-4b62-83f3-95d0424077a3-temp)时报错
kubectl logs csi-rbdplugin-provisioner-686ddd4f4c-9f5qr -n cephfs -c csi-rbdplugin
W0126 12:46:49.107929 1 rbd_util.go:596] ID: 251312 Req-ID: 0001-0024-92ab6c78-7edc-11ee-aec4-5e807f521aec-0000000000000006-1b5a6cea-f2c2-4b62-83f3-95d0424077a3 access denied to Ceph MGR-based rbd commands on cluster ID (92ab6c78-7edc-11ee-aec4-5e807f521aec)
E0126 12:46:49.160690 1 rbd_util.go:689] ID: 251311 Req-ID: 0001-0024-92ab6c78-7edc-11ee-aec4-5e807f521aec-0000000000000006-b7dc20db-47ad-42a5-8d6d-37b40afd3af1 failed to delete rbd image: kubernetes/csi-vol-b7dc20db-47ad-42a5-8d6d-37b40afd3af1-temp, rbd: ret=-39, Directory not empty
4. 分析csi-rbdplugin代码,分析发现: 镜像的temp作为镜像的parent,先删除不太合理,所以会打印Directory not empty(因为原始镜像文件作为son还没有清理)

5. 进一步分析deleteImage方法,发现并不是直接做删除,而只是扔进Trash,依赖Trash的清理机制完成后续清理,则不存在先删parent再删son的情况。但是在扔进Trash后,会先做一把操作权限校验(防止后续在Trash时清理失败)。在做操作权限校验出错时,则直接对Trash中的镜像进行删除。

6. 问题就出在操作权限校验这边,因为对接ceph的账号权限不够,导致校验失败。即触发了Trash中temp镜像的清理。但是temp的son镜像还在导致清理出错(Directory not empty)。对接ceph的权限提升后,问题解决。

kubectl logs csi-rbdplugin-provisioner-686ddd4f4c-9f5qr -n cephfs -c csi-rbdplugin
W0126 12:46:49.107929 1 rbd_util.go:596] ID: 251312 Req-ID: 0001-0024-92ab6c78-7edc-11ee-aec4-5e807f521aec-0000000000000006-1b5a6cea-f2c2-4b62-83f3-95d0424077a3 access denied to Ceph MGR-based rbd commands on cluster ID (92ab6c78-7edc-11ee-aec4-5e807f521aec)
E0126 12:46:49.160690 1 rbd_util.go:689] ID: 251311 Req-ID: 0001-0024-92ab6c78-7edc-11ee-aec4-5e807f521aec-0000000000000006-b7dc20db-47ad-42a5-8d6d-37b40afd3af1 failed to delete rbd image: kubernetes/csi-vol-b7dc20db-47ad-42a5-8d6d-37b40afd3af1-temp, rbd: ret=-39, Directory not empty
参考引用:https://zhuanlan.zhihu.com/p/470093908