Pod诊断

容器智能运维平台提供Pod诊断功能,帮助您诊断异常的Pod信息。本文介绍Pod诊断的检查项以及对应的修复方案。

容器智能运维平台构建了基于专家经验的故障诊断系统,并基于海量数据训练了AI智能故障诊断模型。Pod诊断融合了基于专家经验和AI智能诊断两种诊断模式,进一步深入定位问题根因。Pod诊断包括诊断检查项和诊断根因。

  • 诊断检查项:包括Pod检查、Node检查、NodeComponent检查、ClusterComponent检查、ECSControllerManager检查

  • 诊断根因:包括定位到的根因以及修复建议。Pod诊断会收集部分集群和节点信息并识别其中的异常,然后根据识别到的异常进行深入的异常诊断。

重要

使用故障诊断功能时,系统将在您的集群节点上执行数据采集程序并收集检查结果。采集的信息包括系统版本,以及负载、Docker、Kubelet等运行状态及系统日志中关键错误信息。数据采集程序不会采集您的业务信息及敏感数据。

诊断支持的异常场景

Pod诊断覆盖的典型异常场景和AI智能诊断支持场景如下表所示。

类别

支持的异常场景

Pod诊断

Pod未被调度器处理。

Pod不满足调度约束无法被调度。

Pod已调度但未被Kubelet处理。

Pod等待存储卷就绪。

Pod被驱逐。

Pod因节点磁盘空间不足被驱逐。

Pod因节点内存不足被驱逐。

Pod因节点磁盘索引不足被驱逐。

Pod的Sandbox容器创建失败。

Pod长期处于terminating状态。

Pod中容器发生OOM异常。

Pod中容器异常退出。

Pod中容器处于CrashLoopBackOff状态。

Pod中容器NotReady。

Pod拉取镜像出错。

Pod拉取镜像超时。

AI智能诊断

Pod状态异常。

Pod发生OOM异常。

Pod容器异常退出。

Pod ConfigMap或Secret配置异常。

Pod健康检查失败。

Pod PVC配置异常。

Pod镜像拉取异常。

诊断流程

集群诊断收集部分集群和节点信息并识别其中的异常,然后根据识别到的异常进行深入的异常诊断。诊断融合了基于专家经验和AI智能诊断两种诊断模式,进一步深入定位问题根因。发起诊断后,诊断会按照异常识别、数据采集、检查项评估以及根因分析四个阶段,完成后给出诊断结果。

节点诊断

  • 异常识别:采集基本数据,例如Node状态、Pod状态、集群Event事件流等,并快速分析当前的异常。

  • 数据采集:根据异常识别结果采集和诊断上下文相关的数据。例如,节点诊断采集节点在K8s中的信息、节点对应的ECS信息、节点内Docker、Kubelet等进程运行状态信息。

  • 检查项评估:根据采集到的数据,判断关键指标是否正常。例如,节点诊断检查项包括Docker进程状态、ECS状态等。不同的诊断类型对应不同的检查项,并将针对检查结果提供对应的检查项列表和每个检查项的含义。

  • 根因分析:根据采集的数据和检查项,部分问题可自动分析导致问题的原因。

诊断结果

诊断结果包括根因结果与检查项。根因诊断结果部分包括识别到的异常异常根因修复建议。检查项则按不同的类别对可能引起异常的点进行检查,覆盖根因未包括的部分,并对异常原因进一步补充。

说明

根据集群配置,具体检查项可能稍有不同。实际结果请以诊断页面结果为准。

Pod诊断对应的检查项

诊断项分组

说明

Pod

检查Pod常见问题,检查项包括Pod状态、镜像拉取、网络连通性等。

Node

检查节点实例常见问题,检查项包括节点状态、网络状态、内核日志、核心进程和服务可用性等。

NodeComponent

检查节点核心组件状态,检查项包括网络和存储插件。

ClusterComponent

检查集群常见问题,检查项包括API Service可用性、DNS可用性、NAT网关状态等。

ECSControllerManager

检查ECS实例常见问题,检查项包括ECS实例状态、网络链路、操作系统、磁盘IO等。

Pod

检查项名称

检查项说明

修复方案

Pod容器重启次数统计

统计Pod中容器重启次数。

请检查Pod状态及日志。更多信息,请参见Pod异常问题排查

Pod容器镜像下载阻塞情况

检查Pod同节点是否有其他Pod的容器镜像下载被阻塞。

请检查Pod状态及日志。更多信息,请参见Pod异常问题排查

Pod容器镜像Secrets有效性检查

检查Pod拉取镜像的Secrets是否有效。

请检查Pod状态及日志。更多信息,请参见Pod异常问题排查

GPU Pod的环境变量是否合法

检查NVIDIA_VISIBLE_DEVICES是否位于Pod环境变量中,因为此变量可能与Kubelet冲突。

请检查Pod状态及日志。更多信息,请参见Pod异常问题排查

Pod到CoreDNS Pods的连通性

检查Pod到CoreDNS Pods连通性。

检查Pod到CoreDNS Pods的连通性。

Pod到CoreDNS Service的连通性

检查Pod到CoreDNS Service连通性。

检查Pod到CoreDNS Pods的连通性。

Pod到主机网络DNS服务器的连通性

检查Pod到主机网络DNS服务器的连通性。

检查Pod到主机网络DNS服务器的连通性。

Pod容器进程处于D状态检查

检查Pod的容器进程是否处于D状态。

Pod的部分容器进程处于D状态,通常为容器进程卡在磁盘IO中,请尝试重启宿主机ECS,如仍无法恢复,请提交工单处理。

Pod初始化状态

检查Pod是否正常初始化。

请检查Pod状态及日志。更多信息,请参见Pod异常问题排查

Pod申请的GPU资源

检查Pod是否申请GPU资源,排除因为未申请GPU资源导致的Pod无法使用GPU。

该Pod中没有声明GPU资源,如有需要,请检查Pod配置是否规范。

Pod调度状态

检查Pod是否正常调度。

该Pod中没有声明GPU资源,如有需要,请检查Pod配置是否规范。

Node

检查项名称

检查项说明

修复方案

集群API Server连接状态

检查节点能否正常连接集群API Server。

请检查集群相关配置。更多信息,请参见容器服务ACK集群故障排查

节点AUFS mount hung情况

检查节点系统AUFS mount是否出现hung。

节点系统出现AUFS mount hung问题,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点内核BufferIOError情况

检查节点内核是否出现BufferIOError。

节点内核出现BufferIOError情况,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点cgroup泄露检查

检查节点是否出现cgroup泄露情况。

节点出现cgroup泄露情况,可能导致监控采集出错,甚至导致容器无法启动。请先尝试登录节点,删除相应的cgroup目录。若问题仍未解决,请提交工单处理。

节点Chronyd进程状态

检查节点Chronyd进程是否异常,该进程异常可能会影响系统时钟同步。

节点Chronyd进程异常,可能影响节点系统时间同步。请尝试通过命令systemctl restart chronyd重启节点Chronyd进程。

节点Containerd镜像拉取状态

检查节点Containerd拉取镜像是否正常。

请检查节点网络及镜像配置。

节点Containerd状态

检查节点Containerd状态。

节点Containerd状态异常,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

集群CoreDNS Pod可用性

检查节点能否正常访问集群CoreDNS的Pod IP地址。

请检查节点能否正常访问CoreDNS的Pod IP地址。具体操作,请参见CoreDNS Pod负载不均

节点镜像状态

检查节点是否出现镜像损坏。

节点镜像出现损坏。请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点镜像overlay2状态

检查节点是否出现镜像overlay2文件系统损坏。

节点出现镜像overlay2文件系统损坏,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点系统时间

检查节点系统时间是否异常。

无。

节点Docker容器启动状态

检查节点Docker容器是否出现启动失败。

节点Docker启动状态异常,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点Docker镜像拉取状态

检查节点Docker拉取镜像是否正常。

请检查节点网络及镜像配置。

节点Docker状态

检查节点Dockerd状态。

节点Docker状态异常,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点Docker启动时间

检查节点Dockerd启动时间。

无。

节点Docker hang情况

检查节点是否出现Docker hang的情况。

请尝试登录节点,通过命令systemctl restart docker重启Docker。

ECS实例是否存在

检查ECS实例是否存在。

检查ECS实例状态。更多信息,请参见节点与节点池FAQ

ECS实例状态

检查ECS实例状态。

检查ECS实例状态,更多信息,请参见节点与节点池FAQ

节点内核Ext4FsError情况

检查节点内核是否出现Ext4FsError。

节点内核出现Ext4FsError情况,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点文件系统只读状态

节点出现文件系统只读,通常是因为磁盘故障,会导致节点无法写入数据,可能造成业务异常。

请尝试在节点上使用fsck命令修复文件系统,然后重启节点。

节点硬件时间

检查节点硬件时钟与系统时间是否一致,时间相差超过2分钟可能引起组件异常。

请尝试登录节点,通过命令hwclock --systohc将节点系统时间同步到硬件时间。

节点DNS服务

检查节点能否正常使用主机DNS服务。

请检查主机DNS服务是否正常。更多信息,请参见DNS解析异常问题排查

节点内核Oops情况

检查节点内核是否出现Oops。

节点内核出现Oops,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点内核版本

检查节点内核版本是否过低,内核版本过低可能造成系统异常。

请尝试更换节点升级内核。更多信息,请参见节点与节点池FAQ

集群DNS服务可用性

检查节点能否正访问集群kube-dns服务的Cluster IP,正常使用集群的DNS服务。

请检查CoreDNS Pod运行状态和运行日志。更多信息,请参见DNS解析异常问题排查

节点Kubelet状态

检查节点Kubelet状态。

请检查节点Kubelet日志。更多信息,请参见容器服务ACK集群故障排查

节点Kubelet启动时间

检查节点Kubelet启动时间。

无。

节点CPU使用率

检查节点CPU负载是否过高。

无。

节点内存使用率

检查节点内存负载是否过高。

无。

节点内存碎片化检查

检查节点是否出现内存碎片化。

节点出现内存碎片化,请先尝试登录节点,执行命令echo 3 > /proc/sys/vm/drop_caches清理缓存。如问题仍未解决,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点内存交换区开启情况

检查节点内存交换区 (Memory Swap) 功能是否开启。

当前节点内存交换区 (Memory Swap) 功能不支持开启,请登录节点关闭该功能。

节点网络设备驱动加载情况

检查节点的网络设备virtio驱动加载情况。

节点的网络设备出现virtio驱动加载异常,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点CPU水位过高

检查节点过去一周CPU使用率。节点CPU水位过高时如部署较多Pod会导致资源争抢,可能会影响业务的正常运行。

为避免业务受到影响,请设置合理的Pod request和limit,避免一个节点上运行的Pod过多。

节点内网IP是否存在

检查节点内网IP是否存在。

节点内网IP不存在,请尝试移除节点后重新导入,移除时需保留ECS。有关移除节点的操作,请参见移除节点。有关导入添加节点操作,请参见添加已有节点

节点内存水位过高

检查节点过去一周内存利用率。节点内存水位过高时如部署较多Pod会导致资源争抢,可能产生OOM影响业务的正常运行。

为避免业务受到影响,请设置合理的Pod request和limit,避免一个节点上运行的Pod过多。

节点状态

检查集群节点状态是否Ready。

请尝试重启节点。更多信息,请参见节点与节点池FAQ

节点是否不可调度

检查节点是否不可调度。

节点不可调度,请检查节点调度设置。具体操作,请参见设置节点调度状态

节点OOM情况

检查节点是否出现OOM。

节点出现OOM问题,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

集群运行时检查

检查节点运行时和集群运行时是否一致。

更多信息,请参见创建集群选择了containerd容器运行时,是否可以改为Docker?

节点OS版本过低

检查是否使用已知缺陷的OS版本,操作系统版本过低,存在稳定性风险,可能导致Docker、Containerd等组件无法正常运行。

请及时更新操作系统版本。

节点公网访问情况

检查节点能否正常访问公网。

请检查集群是否开启SNAT公网访问。具体操作,请参见为已有集群开启公网访问能力

节点内核RCUStallError情况

检查节点内核是否出现RCUStallError。

节点内核出现RCUStallError情况,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点操作系统版本

检查节点操作系统版本,系统版本过低可能造成集群功能异常。

无。

节点runc进程泄露情况

检查节点runc进程是否发生泄露,runc进程泄露可能会导致节点间歇性地处于NotReady状态。

节点runc进程泄露,请检查并手动关闭泄露的runc进程。

节点内核SoftLockupError情况

检查节点内核是否出现SoftLockupError。

节点内核出现SoftLockupError情况,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点Systemd hung情况

检查节点是否出现Systemd hung情况。

节点出现Systemd hung异常,请尝试登录节点,通过命令systemctl daemon-reexec重启Systemd。如问题仍未解决,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

节点Systemd版本过低

检查是否使用已知缺陷的Systemd版本。Systemd版本过低存在稳定性风险,可能导致docker/containerd等组件无法正常运行。

请及时更新Systemd版本。更多信息,请参见Systemd

节点进程Hung情况

检查节点进程是否出现Hung。

节点出现进程Hung问题,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

存在unregister_netdevice

检查内核是否出现unregister_netdevice。

节点存在unregister_netdevice问题,请收集节点日志并提交工单处理。关于收集节点日志操作,请参见一键采集节点的诊断日志

NodeComponent

检查项名称

检查项说明

修复方案

节点CNI组件状态

检查节点CNI组件是否正常。

请检查集群网络组件状态。具体操作,请参见网络管理FAQ

节点CSI组件状态

检查节点CSI组件是否正常。

请检查集群件存储组件状态。具体操作,请参见存储FAQ-CSI

ClusterComponent

检查项名称

检查项说明

修复方案

集群免密插件版本检查

检查集群免密插件版本是否过低。

集群免密插件版本检查过低,请尽快升级版本。具体操作,请参见使用免密组件拉取容器镜像

集群APIService可用状态

检查集群APIService是否可用。

请尝试通过命令kubectl get apiservice,检查集群中的APIService的可用状态,并通过kubectl describe apiservice命令,查看状态异常的APIService并分析原因。

集群Pod网段余量紧张

检查Flannel集群剩余可用PodCIDR网段是否少于5个。每个节点消耗一个PodCIDR网段,Pod网段耗尽后,新添加的节点将无法正常工作。

提交工单处理。

DNS 服务后端服务端点

检查集群DNS服务Endpoints数。

请检查CoreDNS Pod运行状态和运行日志。更多信息,请参见DNS解析异常问题排查

DNS 服务 ClusterIP

检查集群DNS服务的Cluster IP是否正常分配,集群DNS服务异常会造成集群功能异常,影响业务。

请检查CoreDNS Pod运行状态和运行日志。更多信息,请参见DNS解析异常问题排查

集群NAT网关状态

检查集群NAT网关状态。

请登录NAT网关管理控制台,检查集群的NAT网关是否因欠费而处于欠费锁定状态。

集群NAT网关并发超规格丢弃速率

检查NAT网关会话并发超规格丢弃速率是否过高。

集群NAT网关会话并发超规格丢弃速率过高,请尝试通过升级NAT网关的规格解决该问题。更多信息,请参见普通型公网NAT网关升级至增强型公网NAT网关FAQ

ECSControllerManager

检查项名称

检查项说明

修复方案

ECS实例的组件欠费情况

检查ECS实例的云盘或网络带宽是否因账号欠费而无法正常使用。

ECS实例的云盘或网络带宽因账号欠费而无法正常使用,您需要充值进行恢复。更多信息,请参见续费概述

ECS实例欠费情况

检查按量计费的ECS实例是否因为欠费导致停服。

ECS实例服务欠费,您需要充值后重新开机才能恢复实例。更多信息,请参见续费概述

ECS实例网卡链路层状态

检查ECS实例网卡链路层是否出现异常。

ECS实例未正常启动或网络配置有问题,您可以尝试通过重启实例进行恢复。

ECS实例启动状态

检查ECS实例的boot操作是否能正常执行加载。

ECS实例无法正常启动,您需要创建一个新的实例。

ECS实例管控系统状态

检查ECS实例的后台管控系统是否正常工作。

后台管控系统未正常工作,可能会导致实例运行异常,您可以尝试通过重启实例进行恢复。

ECS实例CPU状态

检查ECS实例底层是否存在CPU争抢或CPU绑定失败。

ECS实例存在CPU争抢,可能导致实例无法获得CPU或出现其他异常,您可以尝试通过重启实例进行恢复。

ECS实例CPU是否存在Split Lock问题

检查ECS实例CPU是否存在Split Lock问题。

ECS实例CPU出现Split Lock。更多信息,请参见Split lock检测与处理

ECS实例DDos攻击的防护状态

检查该实例的IP地址是否受到了DDoS攻击。

ECS实例的IP遭受DDoS攻击,您可以视情况购买其他DDoS防护产品抵御DDoS攻击。更多信息,请参见阿里云DDoS防护方案对比

ECS实例云盘读写受限情况

检查实例云盘读写是否受限。

ECS实例云盘读写IOPS超过上限读写受限,请您降低磁盘的读写频率或升级为更高性能的云盘类型,有关云盘的读写性能指标,请参见块存储性能

ECS实例磁盘加载情况

检查ECS实例在启动时云盘是否能正常挂载。

云盘挂载失败,导致实例无法正常启动,请停止实例后再次启动实例。

ECS实例是否已到期

检查以包年包月方式购买的ECS实例是否已到期。

ECS实例服务到期,您需要续费来恢复服务。更多信息,请参见续费概述

ECS实例操作系统Crash情况

检查ECS实例内操作系统是否出现Crash。

ECS实例的操作系统在过去48小时内出现了Crash情况,建议通过排查系统日志分析原因。具体操作,请参见查看实例的系统日志和屏幕截图

ECS实例所在宿主机状态

检查ECS实例所在的底层物理机是否有故障。

ECS实例底层物理机存在故障,可能会影响实例的运行状态或性能,您可以尝试通过重启实例进行恢复。

ECS实例镜像加载状态

检查ECS实例在启动时所使用的镜像是否能正常加载。

镜像可能因为系统原因、镜像问题等加载失败,您可以尝试通过重启实例进行恢复。

ECS实例磁盘IO hang情况

检查ECS实例的系统盘是否存在IO hang的情况。

ECS实例云盘出现IO hang,请查看云盘的性能指标。具体操作,请参见查看云盘监控信息。如果您使用的是Alibaba Cloud Linux 2操作系统,检测IO hang的操作,请参见检测文件系统和块层的IO hang

ECS实例网络带宽是否到达上限

检查ECS实例网络带宽是否到达上限。

ECS实例带宽总量已超过实例规格对应的网络基础带宽上限,请您将实例升级至网络带宽能力更高的实例规格。具体操作,请参见升降配方式概述

ECS实例的突发网络带宽是否受限

检查ECS实例的网络突发带宽是否受到限制。

ECS实例突发网络带宽已超过实例规格对应的网络突发带宽上限,请您将实例升级至网络带宽能力更高的实例规格。具体操作,请参见升降配方式概述

ECS实例网卡加载状态

检查ECS实例的网卡是否能正常加载。

如果网卡无法正常加载,将影响实例的网络连通性,您可以尝试通过重启实例进行恢复。

ECS实例网卡会话建立检查

检查ECS实例的网卡是否能正常建立会话。

如果网卡无法建立会话或已建立的会话超过限制,将影响实例的网络连通性或网络吞吐,您可以尝试通过重启实例进行恢复。

ECS实例核心操作执行情况

检查您对ECS实例最近执行的管理操作,例如,开机、关机、升配等是否执行成功。

您最近发起的管理操作,例如开机、关机、升配执行失败,您需要重新发起该操作。

ECS实例网卡丢包检查

检查ECS实例的网卡入方向或出方向是否存在丢包现象。

ECS实例发现网卡丢包现象,您可以尝试通过重启实例进行恢复。

ECS实例性能是否短暂受损

检查实例是否存在因底层软硬件问题导致的性能受损。

如果存在性能受损,会提示发生时间,请您检查ECS实例的历史系统事件或者系统日志进行确认。具体操作,请参见查看历史系统事件

ECS实例性能是否受限

检查ECS实例性能是否受限。

ECS实例的CPU积分不足以支付维持高性能所需的积分,只能使用基准性能。

ECS实例磁盘扩缩容情况

检查ECS实例的系统盘扩缩容情况。

ECS实例磁盘扩缩容后,操作系统调整文件系统的大小失败。新扩缩容的磁盘无法使用,请重新发起扩缩容操作。

ECS实例资源申请

检查ECS实例所需要的CPU、内存等物理资源是否充足。

物理资源不足导致实例无法启动,您可以等待几分钟后重新尝试开机,或者在其他地域或可用区尝试重新创建实例。

ECS实例操作系统状态

检查ECS实例的操作系统是否存在内核Panic、OOM异常或内部宕机等故障。

此类故障可能是由于ECS实例配置不当或用户空间的程序配置不当导致的,您可以尝试通过重启实例进行恢复。

ECS实例虚拟化状态

检查ECS实例底层虚拟化层核心服务是否出现异常。

出现此类异常可能会导致ECS实例崩溃或出现异常暂停,您可以尝试通过重启实例进行恢复。