节点unknown状态,对使用ceph rbd作为后端存储的statefulset应用处理方法

当kubernetes集群节点变成unknown状态,statefulset创建的pod并不会被主动重新在其他的节点上进行创建,需要人为的将该node通过kubectl delete node进行删除,这样才会在其他的节点上进行创建。

社区upstream的smarterclayton给出了为什么要这样设计

This is by design. When a node goes “down”, the master does not know whether it was a safe down(deliberate shutdown) or a network partition. If the master said “ok, the pod is deleted” then the pod could actually be running somewhere on the cluster, thus violating the guarantees of stateful sets only having one pod.
In your case, if you intend the node to be deleted, you must delete the node object. That will cause the master to understand that you wish the node to be gone, and delete the pods.

当你手动kubectl delete node 节点之后,会触发statefulset关联的pod重建,这个时候会出现pod处于pending状态,主要原因是down节点状态的pod可能还存在,仍然使用该ceph rbd进行读写,需要手动去除ceph rbd跟主机之间的关联关系。

所以处理办法分两种情况
方法一
下电状态为unknown状态的节点,重新调度到其他节点的kubelet会重新deattach/attach流程
方法二
在unknown状态的节点,使用rbd unmap命令unmap掉被map到主机的对应的rbd. 如果提示device busy,则需要先手动停止掉使用该rbd的container.

你可能感兴趣的:(kubernetes)