Pod一直处于CrashLoopBackOff状态的排查思路

本文记录了一次由于nsenter工具问题导致Kubernetes Pod持续重启的故障排查过程。Pod处于CrashLoopBackOff状态,经过资源检查、网络模式测试和日志分析,最终定位到kubelet在创建Pod时因nsenter使用错误而失败。修复nsenter相关问题后,Pod运行恢复正常。这展示了在 Kubernetes 环境中排查问题的步骤和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现象

一台宿主机上启动的Pod一直重启,describe报错信息如下

Pod sandbox changed, it will be killed and re-created.

信息在这里插入图片描述

原因分析

  1. Pod处于CrashLoopBackOff状态,第一想到的是Liveness probe failed或者OOM-kill; 测试Pod没有配置存活探测,查看对应机器也没有OOM-kill相关内核日志;
  2. 怀疑是否dockerd进程资源比较紧张,比如被死循环的容器一直消耗资源;查看机器资源都处于正常水平,排除Pod因为资源问题重启;
  3. 修改测试Pod的网络方式改为hostnetwork模式启动Pod,在问题机器上可以正常启动Pod,再次排除资源问题导致;
  4. SandboxChanged:怀疑是CNI 分配IP失败,导致循环分配,看起来比较像;于是查看网络插件canal Pod日志(hostnetwork模式)和kubelet日志查看具体过程;

以下是网络插件的日志信息,可以看到都是INFO日志,分配PodIP成功。

在这里插入图片描述

以下是kubelet对应的日志,也可以看到使用了对应的Pod IP并分配给container

在这里插入图片描述

继续往下看kubelt的日志, 发现了一个可疑的error,使用nsenter 的某个参数失败,然后接下来是Endpoint will be hanled。 下一段日志又到了kubelet重新分配IP和container endpoint,这里和问题现象符合,docker ps可以看到有很多pause容器退出重建; 所以可以初步怀疑就是kubelet在创建Pod过程中卡在nsenter的使用方法上,对比nsenter的版本和help手册发现果然是该机器的nsenter问题。

在这里插入图片描述

修复nsenter相关的bin文件后问题解决,也是第一次碰到,Pod创建过程中居然依赖nsenter工具,于是也去看了下对应的go代码,果然在分配IP后会使用nsenter检索IP,如果检索失败就会退出,对应的源码信息如下:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值