K8S Node异常问题排查过程

 更新时间:2026年01月16日 08:57:29   作者:CN-FuWei  
文章介绍了使用kubectl命令行对K8S集群中的Node异常进行初步定位的方法,包括查看NotReady发生时间、异常event、NodeConditions以及kubelet日志,文章还详细描述了常见问题的解决方法,如Kubelet停止汇报心跳、PLEG不可用和Node被驱逐等情况

一、简介

可使用 kubectl 命令行对 K8S Node 异常做初步定位,方法几乎适用于所有 K8S 集群。

二、排查方法

使用 grafana kubelet 查看 NotReady 发生时间:

# kubectl get nodes
NAME          STATUS     ROLES    AGE   VERSION
172.16.80.4   Ready      <none>   18h   v1.20.8
172.16.80.6   NotReady   <none>   18h   v1.20.8

kubectl describe node 172.16.80.6 查看异常 event

Conditions:
  Type                 Status    LastHeartbeatTime                 LastTransitionTime                Reason              Message
  ----                 ------    -----------------                 ------------------                ------              -------
  NetworkUnavailable   False     Mon, 13 Jun 2022 19:41:10 +0800   Mon, 13 Jun 2022 19:41:10 +0800   RouteCreated        CCE RouteController created a route
  MemoryPressure       Unknown   Tue, 14 Jun 2022 14:08:00 +0800   Tue, 14 Jun 2022 14:09:36 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  DiskPressure         Unknown   Tue, 14 Jun 2022 14:08:00 +0800   Tue, 14 Jun 2022 14:09:36 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  PIDPressure          Unknown   Tue, 14 Jun 2022 14:08:00 +0800   Tue, 14 Jun 2022 14:09:36 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  Ready                Unknown   Tue, 14 Jun 2022 14:08:00 +0800   Tue, 14 Jun 2022 14:09:36 +0800   NodeStatusUnknown   Kubelet stopped posting node status.

kubectl get node 172.16.80.6 -o yaml 查看 NodeConditions:

  conditions:
  - lastHeartbeatTime: "2022-06-13T11:41:10Z"
    lastTransitionTime: "2022-06-13T11:41:10Z"
    message: CCE RouteController created a route
    reason: RouteCreated
    status: "False"
    type: NetworkUnavailable
  - lastHeartbeatTime: "2022-06-14T06:08:00Z"
    lastTransitionTime: "2022-06-14T06:09:36Z"
    message: Kubelet stopped posting node status.
    reason: NodeStatusUnknown
    status: Unknown
    type: MemoryPressure
  - lastHeartbeatTime: "2022-06-14T06:08:00Z"
    lastTransitionTime: "2022-06-14T06:09:36Z"
    message: Kubelet stopped posting node status.
    reason: NodeStatusUnknown
    status: Unknown
    type: DiskPressure
  - lastHeartbeatTime: "2022-06-14T06:08:00Z"
    lastTransitionTime: "2022-06-14T06:09:36Z"
    message: Kubelet stopped posting node status.
    reason: NodeStatusUnknown
    status: Unknown
    type: PIDPressure
  - lastHeartbeatTime: "2022-06-14T06:08:00Z"
    lastTransitionTime: "2022-06-14T06:09:36Z"
    message: Kubelet stopped posting node status.
    reason: NodeStatusUnknown
    status: Unknown
    type: Ready

登录节点查看 kubelet 的日志:

 journalctl -u kubelet --since="2022-06-14 14:00:00" | less 

三、常见问题

Kubelet stopped posting node status

kubelet 停止汇报心跳,通常是 node 节点宕机,可让用户尝试登录节点,无法登录的话,一般通过重启恢复。原因一般和节点负载有关,可通过监控查看节点异常前负载情况。

PLEG is not healthy

Pod Lifecycle Event Generator,kubelet 会定期同步 pod 状态,当同步 pod 状态超时(3分钟),会将 node 置为 not ready 状态。

  • 通过命令定位是否有容器 inspect 卡住的情况: docker ps -a -q | xargs docker inspect

如果该命令卡住,则进一步定位是由具体的哪个容器导致,通过 docker inspect {CONTAINER ID} 确认。定位到具体容器后,经客户允许后可将该容器删除 docker rm -f {CONTAINER ID}

Node Evicted

当节点因为资源不足(CPU、内存、磁盘)被驱逐时,需根据不同原因处理:

  • CPU,内存资源不足:

- 虚机升配

- 合理设置资源的 resource request, 使 pod 合理调度到不同的节点上。

  • 磁盘空间不足:

- 扩容容器数据目录所在磁盘

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 自定义资源CRD使用介绍

    自定义资源CRD使用介绍

    这篇文章主要为大家介绍了自定义资源CRD的使用示例介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • k8s扩展调度能力的三种实现方式

    k8s扩展调度能力的三种实现方式

    Kubernetes调度器扩展主要通过调度框架和调度器扩展器实现,调度框架提供多种插件接口,如QueueSort、Filter、Score等,允许扩展调度逻辑,调度器扩展器通过HTTP服务扩展调度功能,支持Filter、Prioritize等扩展点
    2025-10-10
  • 如何在 K8S 中使用 Values 文件定制不同环境下的应用配置

    如何在 K8S 中使用 Values 文件定制不同环境下的应用配置

    Kubernetes是一个开源的容器编排平台,它可以自动化容器的部署、扩展和管理,在 K8s 中,应用程序通常以容器的形式运行,这些容器被组织在不同的资源对象中,这篇文章主要介绍了如何在 K8S 中使用 Values 文件定制不同环境下的应用配置,需要的朋友可以参考下
    2025-03-03
  • kubernetes YAML文件的使用

    kubernetes YAML文件的使用

    这篇文章主要介绍了kubernetes YAML文件的使用,帮助大家更好的理解和学习使用kubernetes,感兴趣的朋友可以了解下
    2021-04-04
  • Nacos-K8s部署全过程

    Nacos-K8s部署全过程

    Nacos-K8s项目提供了多种在Kubernetes环境中部署Nacos的方案,包括快速启动、NFS持久化、Ceph持久化、Helm和Operator部署,每种方式都有其适用的场景和特点,如快速启动适用于测试,NFS和Ceph持久化支持数据持久化,Helm和Operator提供更高级的运维功能
    2026-02-02
  • k8s之yaml文件的使用及说明

    k8s之yaml文件的使用及说明

    这篇文章主要介绍了YAML文件在Kubernetes中的使用,包括YAML文件的格式、创建资源对象、创建Service服务、查看和测试Service、解释Kubernetes中的port概念以及如何使用`kubectl`命令生成和修改YAML模板,同时,文章也简要介绍了如何编写和访问MySQL的YAML文件
    2025-11-11
  • 如何使用Kubernetes自定义资源(CRD)详解

    如何使用Kubernetes自定义资源(CRD)详解

    自定义资源定义(CRD)是Kubernetes API扩展,可以定义新的对象类型,下面这篇文章主要给大家介绍了关于如何使用Kubernetes自定义资源(CRD)的相关资料,需要的朋友可以参考下
    2022-09-09
  • K8s学习之Pod的定义及详细资源调用案例

    K8s学习之Pod的定义及详细资源调用案例

    Kubernetes将所有内容抽象为资源,通过操作资源管理集群,核心单元是Pod,通过控制器管理Pod,资源管理分为命令式对象管理、命令式对象配置和声明式对象配置,各有适用场景,需要的朋友可以参考下
    2024-09-09
  • 一篇文章搞懂K8S高级特性

    一篇文章搞懂K8S高级特性

    这篇文章主要给大家介绍了关于K8S高级特性的相关资料,文中通过时实例代码以及图文介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • K8S的dashboard使用token登录的操作流程

    K8S的dashboard使用token登录的操作流程

    Dashboard 支持 Kubeconfig 和 Token 两种认证方式,这里测试 Token 认证方式登录,本文介绍K8S的dashboard如何使用token登录,感兴趣的朋友跟随小编一起看看吧
    2024-06-06

最新评论