kubelet判断机器是否重启逻辑
如果K8s中某个Node节点重启,在Event信息中会有一条消息,大致内容如Node xxxxx has been rebooted, boot id: xxx
,而如果是重启kubelet
,则不会有这条消息,所以kubelet
是怎么判断是自己重启了还是机器重启了呢?
搜索了一下代码,在https://github.com/kubernetes/kubernetes/blob/v1.10.12/pkg/kubelet/kubelet_node_status.go#L621这里,会判断上次记录的Node的BootID和当前从cAdvisor获取的BootID是否相同,如果不同则说明机器重启了。
那么cAdvisor
是怎么获得这个BootID的呢?看了一下cAdvisor
的文档,发现默认是从/proc/sys/kernel/random/boot_id
这个文件读取的。针对这个文件,找到一段解析:
/proc/sys/kernel/random/boot_id: A random ID that is regenerated on each boot. As such it can be used to identify the local machine’s current boot. It’s universally available on any recent Linux kernel. It’s a good and safe choice if you need to identify a specific boot on a specific booted kernel.
是内核暴露的一个接口,每次启动都会随机生成一个ID,是一个比较通用和安全的判断启动的办法。
参考: