在运维过程中经常需要根据pid查是哪个pod,或者需要查这个pod的进程id。
比如我们收到监控报警,某台 Kubernetes Node 节点负载高。通过 top 或者 pidstat 命令获取 Pid
查询某个pod的进程PID
1 | kubectl describe pod xxxpod |

找到其运行的node节点和docker容器id。
快捷操作:
1 | kubectl get pod busybox -o=jsonpath='{.status.containerStatuses[0].containerID}' |
ssh到该node节点执行
1 | docker inspect 容器id --format '{{.State.Pid}}' |
如果是containerd
1 | crictl inspect 容器id | grep -i pid |
根据PID查询pod name
根据所有的进程都会在/proc/有自己的文件夹。
比如PID是22586

cat /proc/22586/cgroup 显示的最后一列就是容器的id
把他截取出来
1 | cat /proc/22586/cgroup | head -1 | awk -F '/' '{print $5}' |
然后就可以docker inspect了
1 | docker inspect d569f04a |

在Config.Labels下可以看到pod的name和namespace
总结成一个脚本getPodName.sh
1 | #!/usr/bin/env bash |
用到了jq工具,需要提前安装
1 | yum install -y jq |