有的时候,k8s中挂载了rbd存储的pod重启后会持续处于ContainerCreating的状态,describe后发现有MountVolume.Setup failed以及Unable to mount volumes for pod xxx的错误描述。
这种情况看上去是rbd设备挂载到pod上失败,但真实原因往往是pod迁移后,在原节点上map的rbd设备没有正常迁移走导致的。
这个时候应该执行的是手动从原节点上unmap掉这个rbd设备。
一、找到rbd设备map的节点
通过kubectl get pvc找到这个pvc所绑定的pv。
然后根据这个pv,在集群中的节点上执行:
rbd showmapped
找到这个pv所map的节点和rbd设备。
二、查看挂载点
看一下这个rbd设备有没有挂载点(应该是没有)。
执行:
findmnt -n [rbd设备]
如果没有输出表明没有挂载点。如果输出类似/var/lib/kubelet/plugins/kubernetes.io/rbd/*,表明挂载点有误,需要手动删除挂载点。
执行:
unmount [挂载点]
三、手动unmap
确保没有挂载点之后,执行
rbd unmap [rbd设备]
手动将这个rbd设备unmap掉。
过一段时间后,新的rbd设备会自动挂载到新节点上。