通过进程PID查找podName

背景:日常运维工作中,经常会遇到机器负载过高的情况,可能是由于某些进程消耗了过多的 CPU 或内存资源。我们需要首先查看运行在节点上的进程,并确定哪些进程造成了负载过高的情况。一种常见的做法是使用进程 ID(PID)来反查相关的 Pod 名称,这样可以帮助我们定位到具体的服务。

相关工具:crictl、jq

1、获取进程的 PID

在宿主机上,使用 ps、top 或 pidstat 等命令找到你想要查询的进程的 PID

2、查找容器 ID(当容器运行时为containerd时)

通过查看 /proc/<PID>/cgroup 文件来找到与进程关联的pod的uid。这个文件通常会包含容器的完整 cgroup 路径

3、查看pod id和name

当容器运行时为containerd时

#传递正确的 containerd.sock路径与第二步获取的pod uid
#方法1
crictl -r unix:///data/containerd/data/containerd.sock pods -q | while read -r pod; do
  if crictl -r unix:///data/containerd/data/containerd.sock inspectp "$pod" | grep -q "749bcf4a_fa3b_4c44_a891_49d9857aad1d"; then
    name=$(crictl -r unix:///data/containerd/data/containerd.sock inspectp "$pod" | jq -r '.info.config.metadata.name')
    echo "Pod ID: $pod, Name: $name"
  fi
done

#方法二
#进入master节点
#传入指定的nodeName和uid,过滤该节点所有pod找到指定的pod
kubectl get pods --all-namespaces --field-selector spec.nodeName=10.167.0.11 -oyaml |grep -C 10 749bcf4a_fa3b_4c44_a891_49d9857aad1d

当容器运行时为docker时,不需要第二步获取podID

#进入到目标节点
docker ps -q |xargs docker inspect --format '{{.State.Pid}}, {{.Name}}'|grep 进程PID
  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值