现象:k8s集群,五台机器,其中第五台节点显示“NotReady”

sudo kubectl get node --show-labels

 经过节点排查:

sudo kubectl get pods -n kube-system  #检查k8s系统组件,工作正常
sudo kubectl describe node k8s05  #发现节点有报错

从截图中的报错信息可以看出,是 【Kubelet stopped posting node status】问题,可以定位到是Kubelet服务没有起来,但最开始部署好k8s的时候,五个节点的Kubelet服务都是正常的,怎么会突然k8s05的服务挂掉?

先去k8s05机器上看一下原因。

systemctl status kubelet   #查看kubelet状态

 状态确实是FAILURE

接下来看一下kubelet的日志

sudo journalctl -e -u kubelet

从日志中可以看出,是swap导致的节点的kubelet 自动重启失败。

临时解决方案:

sudo sudo swapoff -a  #关闭swap
sudo systemctl restart kubelet  #开启kubelet
sudo systemctl status kubelet   #查询kubelet状态

 可以了。

永久解决方案:

cat /etc/fstab   #查看Linux系统开机自动挂载文件fstab

 可以看出,设置了自动重启swap,而其他的机器则屏蔽了swap的自动重启,所以k8s05才会因为关机重启后,swap重新启动而导致kubelet自动重启失败。注掉sawp的重启命令即可。

更改的时候注意不要改错了,该错了,涉及其他服务,关机重启后就起不来了。

原因:

SWAP意思是交换,顾名思义,当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN

swap大小是有上限的,一旦swap使用完,操作系统会触发OOM-Killer机制,把消耗内存最多的进程kill掉以释放内存。

Swap会导致docker的运行不正常,性能下降,是个bug,但是后来关闭swap就解决了,就变成了通用方案。

后面的swap原因引用自:

部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?_妖四灵.Shuen的博客-CSDN博客_k8s关闭swap

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐