容器以host模式运行时通过进程ID查找对应的容器名称

场景:

应用服务通过docker-compose部署的,部分服务的以host网络模式运行,通过从top命令中获取的PID无法直接获取到对应的容器名称,经分析测试后可通过父进程查找

非host网络模式可直接通过以下命令查找容器名称

docker inspect -f "{{.Id}} {{.State.Pid}} {{.Name}} " $(docker ps -q) | grep <PID>

host网络模式可直接通过以下命令查找容器名称

  • 通过top命令获取进程PID
  • 获取对应进程PID的父进程
ps -ef | grep -v grep | grep <PID> | awk '{print $3}'
  • 通过上一步的父进程获取容器名称
docker inspect -f "{{.Id}} {{.State.Pid}} {{.Name}} " $(docker ps -q) | grep <PID>


通过进程ID查找k8s pod名称

docker inspect -f "{{.Id}} {{.State.Pid}} {{.Config.Hostname}}" $(docker ps -q) | grep <PID>

通过服务端口查找容器名称

docker inspect -f "{{.Id}} {{.State.Pid}} {{.Name}} {{.Config.ExposedPorts}}" $(docker ps -q) | grep <PORT>

pod按内存排序

docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h

pod按CPU排序

docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -rk 3 -h

查看节点污点

for i in $(kubectl get nodes --kubeconfig kube.conf  | grep -v "NAME" | awk '{print $1}'); do kubectl describe node/$i --kubeconfig kube.conf| egrep -A 2 '(Taints|projectcalico.org/IPv4Address)'; printf %b "--------------------\n";done
posted @ 2022-03-14 18:07  默读自我  阅读(209)  评论(0)    收藏  举报