03-kubernetes-faq-node节点故障排查

一、Node状态显示NotReady,kubelet无法与apiserver通信

常见原因: kubelet进程异常、未安装cni网络插件、docker异常、磁盘空间不足、内存不足、cpu不足、宕机等都
排查思路: describe node,登录节点查看kubelet服务状态是否正常,端口10250是否监听,防火墙是否关闭或者放行kubelet端口

导致node状态为NotReady后node节点为打上污点,以下是常见的node污点

以下是k8s常见的内置污点,当某些条件为真时,节点控制器会自动为节点添加污点。
node.kubernetes.io/ NoSchedule:如果一个pod没有声明容忍这个Taint,则系统不会把该Pod调度到有这个Taint的node上
node.kubernetes.io/NoExecute:定义pod的驱逐行为,以应对节点故障。
node.kubernetes.io/not-ready:节点尚未准备好。这对应于NodeConditionReady为False。
node.kubernetes.io/unreachable:无法从节点控制器访问节点。这对应于NodeConditionReady为Unknown。
node.kubernetes.io/out-of-disk:节点磁盘不足。
node.kubernetes.io/memory-pressure:节点有内存压力。
node.kubernetes.io/disk-pressure:节点有磁盘压力。
node.kubernetes.io/network-unavailable:节点的网络不可用。
node.kubernetes.io/unschedulable:节点不可调度。

二、节点资源不足
1、pod数量超过集群默认配置单节点可以运行pod数量,导致kubelet oom,默认单节点可以运行pod数量为110个。一些场景是因为vpc网段划分问题导致节点只能运行很少的pod,导致node状态为NotReady

排查思路: describe node,get pod -o wide|grep node ip|wc -l
解决办法: 在物理资源、网络资源允许的条件下修改kubelet配置文件,增加或者修改max-pods参数。因为子网划分问题导致的pod无法被调度建议增加物理节点

2、物理资源使用率过高

排查思路: 登录节点查看物理资源使用情况,或者看节点监控,describe node
一般有以下几种原因:
1> 由于节点运行了非k8s服务占用cpu、内存、磁盘等资源;
2> node节点存在超卖,一般云厂商对一些类型云主机都会进行超卖,导致部分资源可能被抢占
3>k8s集群资源超卖,一些场景为了节约成本提高资源使用率,对k8s集群进行超卖,导致节点负载过高
4> 以上三种原因在没有冗余节点并且没有配置资源预留的情况下会导致集群雪崩,服务全面崩溃

解决办法: 增加正常业务节点,或者对现有节点升级配置;根据监控的资源使用情况合理对集群进行超卖;增加冗余节点应对节点故障

三、整体排查思路:

节点状态查询: kubectl get nodes

常见异常现象:
1、节点状态NotReady
2、调度到该节点的pod显示Unkonwn、Pending等

常见故障:
kubelet进程异常、未安装cni网络插件、docker异常、磁盘空间不足、内存不足、cpu不足

排查方法:
kubectl describe nodes 查看node节点信息
kubectl describe pods 查看pod节点信息
systemctl status 查看kubelet状态
Journalctl查看系统日志
free查看内存
top查看cpu
dmesg 查看硬件的检测或者断开连接的信息

你可能感兴趣的:(kubernetes)