工作中曾碰到节点宕机的状况,导致以Pod部署的registery镜像仓库不可用,深入熟悉了Ceph后再详细续写解决办法,如有不对,请谅解。
由于网络原因或者节点自身原因导致node状态为NotReady时,Pod表现、处理方式及应注意事项。
Deployment和StatefulSet的表现
1、Deployment的Pod状态为Unkown,会自动在其他节点重启Pod,不用担心节点对服务的影响;
2、StatefulSet的Pod状态为Unkown,不会将pod重新在其他节点重启
StatefulSet的Pod的处理方式
1、对于没有挂载Ceph的Pod可以通过删除pod,Pod会转移到其他节点。
2、挂载Ceph的Pod不可通过手动删除的方式,达到Pod转移节点的目的。
原因由于,Pod处于UnKown状态,但是Pod可能还存在,仍然使用该ceph rbd进行读写,需要手动去除ceph rbd与主机之间的联系,若强制删除pod,会在5分钟后启动成功,ceph会将副本由in->down->out状态的一个改变,副本成功迁移到其他节点后,pod显示启动成功(测试发现,副本迁移后有时会发生没有映像名映射为内核模块的情况)
处理办法分两种情况 :
方法一
下线状态为unknown状态的节点,重新调度到其他节点的kubelet会重新deattach/attach流程
方法二
在unknown状态的节点,rbd status image 命令可查看watcher节点,到相应节点上使用rbd unmap命令unmap掉被map到主机的对应的rbd. 如果提示device busy,则需要先手动停止掉使用该rbd的container.
希望对小伙伴们有帮助,有K8s集群相关问题的可以评论我,可加微信,大家一起探讨。