本文永久链接: https://www.xtplayer.cn/kubernetes/no-podsandbox-found/

根据 issue https://github.com/kubernetes/kubelet/issues/21 说明,在相对较老的 k8s 版本中,当从 runtimeservice 收到不一致的容器列表时,Kubelet 进入循环重启状态。在 kubelet 日志中可以看到如下的错误信息,这些错误信息会持续的循环打印

{"log":"F0609 16:18:40.349779   48606 kubelet.go:1386] Failed to start ContainerManager failed to build map of initial containers from runtime: no PodsandBox found with Id 'ad00f282abdb54fbb90b357ae79e9aeeb89ca33054fca207c2ca7c1522a742d3'\n","stream":"stderr","time":"2023-06-09T16:18:40.349881469Z"}

解决方法

在 kubelet 日志中找到 sandbox.id,然后执行如下命令去查询容器 ID,最后通过 docker rm -f xxxx 去删除查询到的容器 ID

docker ps -a --filter "label=io.kubernetes.sandbox.id=894f35dca3eda57adef28b69acd0607efdeb34e8814e87e196bc163305576028"

通常通过以上命令查询到的容器为 exited 状态,为了快速的查询到所有异常容器,可以执行以下命令去批量删除 exited 状态的容器。

docker ps -a -f "status=exited" | grep k8s_ | awk '{print $1}' | xargs docker rm -f