Kubernetes Node重启后不会自动加入集群

背景

这几天在尝试用Kubernetes部署集群,在将Kubernetes部署并添加Node节点后和一个Deployment后,尝试将其中一个工作节点重启,看看Pod会不会在另一个节点上创建。
但是在将其中一个节点重启后,重启的节点一直无法加入在集群中。
本篇文章主要记录本次问题的排查过程。

问题查找

在关闭一台主机后,在control-plane Node上执行kubectl get nodes后出现以下结果是预期之内的,
但是问题是,重新启动机器后,节点k8s-node2还一直是NotReay的状态

为了排查问题,执行kubectl describe node k8s-node2命令,查看结点的具体信息
Conditions的输出信息如下:

可以看到,Kubelet stopped posting node status
说明Kubelet没有启动,正常来说,重启之后,Kubelet应该是会自动启动的

为此,在重启启动的机器上查看详细的信息
执行systemctl status kubelet

和执行journalctl -u kubelet:

由于个人能力有限,看不出什么信息,只能大概直到kubelet启动失败了,但是不知道具体失败的原因,
无奈之下,执行kubeam join命令并添加--v=5打印输出,看看具体失败的原因,结果如下:

要求禁止swap
原因是之前构建集群的时候,直接使用swapoff -a关闭swap只在当前会话有效。如果要让swapoff一直有效,修改/etc/fstab文件
将swap注释掉:

之后重启主机也能自动加入到集群中。

Kubernetes为什么要禁止swap

可以自动加入到集群中后,自然回提出一个问题,为什么Kubernetes要禁止swap,毕竟swap在内存管理方面还是有很多好处的,
为此查询了一些资料,最后在GitHub上的Kubernetes的一个issue(https://github.com/kubernetes/kubernetes/issues/53533)
中找到比较满意的结果
简单总结,就是Kubernetes的开发者也同意将swap支持添加到后续的版本中,
现在的Kubernetes没有足够的能力来管理swap,而当前的主要精力放在保证压力测试,轻量话的pod等其他方面上,
如果社区强烈要求或者有开发者愿意协助开发该功能,可能会在1.21版本中添加swap支持

讨论的主要几个截图:


posted @   木章永想要平静的生活  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示