You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes v1.21.2 StatefulSet Pod终止卡住问题排查与解决求助

解决Kubernetes v1.21.2 StatefulSet Pod 持续Terminating问题

问题原因

从报错日志里的device or resource busy可以明确:Pod对应的网络命名空间(netns)被进程占用,导致kubelet无法删除该网络命名空间,进而Pod一直卡在Terminating状态。常见触发场景包括:

  • 容器内有进程脱离了主PID命名空间(比如通过nsenter进入过该网络命名空间的外部进程,或者容器内进程fork后后台运行但未正常退出)
  • CNI网络插件在清理网络资源时出现异常,残留的进程占用了netns资源

解决步骤

1. 定位占用网络命名空间的进程

登录到Pod所在的Node节点,执行以下命令找出占用目标netns的进程:

# 替换为日志里的netns路径
NETNS_PATH="/var/run/netns/cni-f9ccb1de-ed43-dff6-1b86-1260e07178e6"

# 用lsof直接查找关联进程
lsof $NETNS_PATH

如果lsof无输出,用inode匹配的方式查找:

# 获取目标netns的inode号
INODE=$(stat -c %i $NETNS_PATH)

# 遍历所有进程,找到挂载该netns的进程
for pid in $(ls /proc | grep -E '^[0-9]+$'); do
  if [ -L /proc/$pid/ns/net ]; then
    if [ $(stat -c %i /proc/$pid/ns/net) -eq $INODE ]; then
      echo "占用netns的进程PID: $pid"
      ps -p $pid -f
    fi
  fi
done

2. 终止占用进程

找到对应PID后,强制终止进程:

# 替换为实际找到的PID
kill -9 <PID>

如果有多个占用进程,批量终止:

for pid in <PID1> <PID2>; do
  kill -9 $pid
done

3. 手动清理Pod(可选)

如果进程终止后Pod仍卡在Terminating状态,执行强制删除命令:

kubectl delete pod <pod-name> --namespace <你的命名空间> --grace-period=0 --force

4. 预防问题复发

  • 检查CNI插件(如Calico、Flannel)版本是否与Kubernetes v1.21.2兼容,建议升级到官方推荐的兼容版本
  • 查看CNI插件日志,排查是否存在资源清理异常:
# 以Calico为例,查看节点插件日志
kubectl logs -n kube-system <calico-node-pod-name>
  • 确认/etc/cni/net.d/目录下的CNI配置文件无损坏或错误配置

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:36:17