pod不能正常漂移

在kubernetes中,如果一个节点的kubelet服务挂掉,导致这个节点不可用,这个节点上的pod会自动漂移到其他节点,但是,如果挂载了ceph rbd类型的pv,pod就无法正常在其他节点启动了,这时候可以人为干预。提示内容如下:
Multi-Attach error for volume "pvc-4f91d1a6-fcec-11e8-bd06-6c92bf74374a" Volume is already exclusively attached to one node and can't be attached to another。
这个问题的具体原因可以参考https://blog.csdn.net/pencc/article/details/84333315 pv/pvc的挂载原理可以参考:http://dockone.io/article/8292 手动解除挂载的方式如下:
#强制删除旧的pod
kubectl delete po test-6c7965864-5kh5m -n default --grace-period=0 –force
#重启新的pod
kubectl delete  po test-6c7965864-p9v7j -n default
#查看pod的pv状态并获取rbd image
kubectl describe pv pvc-4f91d1a6-fcec-11e8-bd06-6c92bf74374a

#查看rbd image的状态(可以看到一个watcher):
rbd status kubernetes-dynamic-pvc-50e47635-fcec-11e8-817f-6c92bf74374a
#------------------------------------------------
#到pod之前所在的节点操作(在watcher中看到的):
#查看pod启动的容器(默认是n+1个)
docker ps |grep test-6c7965864-5kh5m
#docker stop 停掉这些容器
#查看rbd到node的挂载情况
rbd showmapped |grep  kubernetes-dynamic-pvc-50e47635-fcec-11e8-817f-6c92bf74374a

#查看挂载目录到pod的映射情况:
df -h /dev/rbd0
#解除挂载目录到pod的映射(可能需要操作两次或着等一等。。反正我没有一次成功过):
umount /dev/rbd0
#解除rbd到node的挂载:
rbd unmap kubernetes-dynamic-pvc-50e47635-fcec-11e8-817f-6c92bf74374a
#------------------------------------------------
#查看pod和rbd的状态  不出意外,pod就已经在新节点启动了。

Author: jxin

发表评论

电子邮件地址不会被公开。 必填项已用*标注