排查 device or resource busy

$ find /proc/*/mounts -exec grep /var/lib/kubelet/pods/0104ab85-d0ea-4ac5-a5f9-5bdd12cca589/volumes/kubernetes.io~secret/kube-proxy-token-nvthm {} + 2>/dev/null
/proc/6076/mounts:tmpfs /var/lib/kubelet/pods/0104ab85-d0ea-4ac5-a5f9-5bdd12cca589/volumes/kubernetes.io~secret/kube-proxy-token-nvthm tmpfs rw,relatime 0 0
 

根据找出的进程号,看看是谁干的:

$ ps -ef | grep -v grep | grep 6076
root        6076    6057  0 Aug26 ?        00:01:54 /usr/local/loglistener/bin loglistener -c /usr/local/loglistener/etc/loglistener.conf
 

看下完整的进程树:

$ pstree -apnhs 6076
systemd,1 --switched-root --system --deserialize 22
  └─dockerd,1809 --config-file=/etc/docker/daemon.json
      └─docker-containe,1868 --config /var/run/docker/containerd/containerd.toml
          └─docker-containe,6057 -namespace moby -workdir /data/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/9a8457284ce7078ef838e78b79c87c5b27d8a6682597b44ba7a74d7ec6965365 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root ...
              └─loglistener,6076 loglistener -c /usr/local/loglistener/etc/loglistener.conf
                  ├─{loglistener},6108
                  ├─{loglistener},6109
                  ├─{loglistener},6110
                  ├─{loglistener},6111
                  └─{loglistener},6112
 

反查 Pod

如果占住这个目录的进程也是通过 Kubernetes 部署的,我们可以反查出是哪个 Pod 干的。

通过 nsenter 进入容器的 netns,查看 ip 地址,反查出是哪个 pod:

$ nsenter -n -t 6076
$ ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 10000
    link/ether 52:54:00:ca:89:c0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.244.70/24 brd 192.168.244.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:feca:89c0/64 scope link 
       valid_lft forever preferred_lft forever
$ kubectl get pod -o wide -A | grep 192.168.244.70
log-agent-24nn6                                      2/2     Running            0          84d     192.168.244.70    10.10.10.22    <none>           <none>
 

如果 pod 是 hostNetwork 的,无法通过 ip 来分辨出是哪个 pod,可以提取进程树中出现的容器 id 前几位,然后查出容器名:

$ docker ps | grep 9a8457284c
9a8457284ce7        imroc/loglistener     "/usr/local/logliste…"   34 hours ago        Up 34 hours                             k8s_loglistener_log-agent-wd2rp_kube-system_b0dcfe14-1619-43b5-a158-1e2063696138_1
 

Kubernetes 的容器名就可以看出该容器属于哪个 pod。

posted @   技术颜良  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2022-02-21 Golang 语言 gRPC 怎么使用?
2022-02-21 k8s云原生分布式块存储 --Longhorn 初体验
2022-02-21 Golang 语言极简 HTTP 客户端 GoRequest
2019-02-21 jenkins 备份配置信息
2019-02-21 rabbitMQ 3.6.15生产环境
点击右上角即可分享
微信分享提示