背景:
由于云控制台上面,客户需要对云主机保存当前镜像的功能,所以有了创建镜像功能,创建镜像之后一直处于创建中状态。
于是开始了深入排查,云控制台点击创建之后,后端的流程:先有1台模板机,然后链接克隆模板成为1台VM,并且新增1块磁盘。然后再完整克隆这台带有数据盘的VM,把二次克隆的VM转为新的模板,新的模板数据盘分离后,删除数据盘,提示无法删除,提示需要解除保护快照,导致VM出现未使用的磁盘长期置留在控制台,在云控制台显示一直处于创建中,无法完成创建,属于PRD故障。
解决方法:
下面是RBD的介绍:
https://docs.ceph.com/en/latest/rbd/rbd-snapshot/
- 临时人工解除快照保护处理,手动移除
- 把整个流程重新复现跑一遍,同时观察PVE控制台任务详情,然后找到关键报错信息,授权Ceph普通用户组件权限,解决此故障。
解决过程:
临时手动解决方法:
-
列出image的快照
rbd snap ls hz_c1_xds_kvm_data/base-526475968-disk-1
-
查找过滤出快照
rbd ls -l -p hz_c1_xds_kvm_data |grep “base-526475968-disk-1”
-
解除快照保护
rbd snap unprotect hz_c1_xds_kvm_data/base-526475968-disk-1@base -
清理所有快照可以使用
purge
子命令rbd snap purge hz_c1_xds_kvm_data/base-526475968-disk-1
罗列某个快照的子孙:
rbd children {pool-name}/{image-name}@{snapshot-name}
彻底解决方法:
代码调用PVE时,到了转成模板,分离数据盘,移除数据盘这步骤,就出现了报错,下图是PVE控制台查看的任务详情,可以看出是不允许操作,感觉是权限问题
然后去查看用户权限,核对Ceph的用户权限,怀疑是不是各组件缺少权限,所以解除快照保护这步骤失败,因为PVE是调用ceph的rados接口,同样的rbd操作。然后重新授权权限为所有组件
ceph auth caps client.hz_c1_xds_kvm_user mon ‘allow *’ osd ‘allow *’ mgr ‘allow *’ mds ‘allow *’
最后重新去云平台触发保存当前镜像的操作,同时在PVE控制台观察任务详情,显示成功了,验证了是权限问题导致。新的模板数据盘分离后,数据盘消失,代表移除成功。
总结:
在Ceph-RBD存储来说,镜像快照就是PVE上层的链接克隆,对于底层存储来说,就是一堆快照儿子,一旦父镜像被删除,这些快照儿子就没了
有些看起来的报错是A的问题,实际上可能是B引起的,或者是B的流程、逻辑有问题,然后B的问题本质是C配置有误,导致这种级联故障。所以还需融合贯通整个链路,深入排查分析,处处找线索、蛛丝马迹,然后顺藤摸瓜,此排查过程又会引入其它问题,也会被其它问题所干扰,所以必须要看透问题的本质,才能串联起A B C三者之间的所有细节,综合分析出到底是哪个环节出问题!切勿停留在表面,表面就是烟雾弹,不能被 “形” 所困惑了,一定要从 “神” 的层面去思考,不能知其然而不知其所以然!