前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S集群pod名称与pid互查

K8S集群pod名称与pid互查

原创
作者头像
chen1900s
发布2023-10-06 16:20:00
3.2K0
发布2023-10-06 16:20:00
举报
文章被收录于专栏:TKE学习

在日常运维过程中经常需要根据pid查是哪个pod,或者需要查这个pod的进程id。比如我们查看某台 Kubernetes Node 节点负载高时候。通过 top 或者 pidstat 命令获取 Pid,但是这个PID对应的是哪个POD容器导致的,这个时候就需要根据PID查询对应容器信息

查询某个pod的进程PID

代码语言:javascript
复制
kubectl describe pod  <podName>   -n  <namespace>
或者是登录对应节点 通过如下命令查询
#节点是dockerd运行时
1. docker ps  | grep   <podName>
2. docker inspect <容器id>   | grep -i pid
3. 或者使用这个命令:docker inspect <容器id> --format '{{.State.Pid}}'


#节点是containerd运行时
1. crictl pods | grep <pod名>,取第1列为pod_id
2. crictl ps   | grep <pod_id>,取第1列为容器id
3. crictl inspect <容器id> | grep -i pid ,取第1行为容器pid

describe或者是docker ps 查看POD对应容器ID
describe或者是docker ps 查看POD对应容器ID
containerd运行时
containerd运行时

根据PID查询pod name

所有的进程都会在/proc/有自己的文件夹

1,通过 top 或者 pidstat 命令获取 Pid

例如进程:1042832

top命令
top命令

2,cat /proc/1042832/cgroup 显示的最后一列就是容器的id ,前面一部分是POD的UUID

代码语言:javascript
复制
cat /proc/1042832/cgroup

可以通过容器ID去查询容器,或者是通过POD的UUID去查看POD信息

例如:批量查下集群POD的uid

代码语言:javascript
复制
kubectl get pods -o custom-columns=Namespace:..metadata.namespace,podName:.metadata.name,podIP:.status.podIP,podStatus:.status.phase,nodeIP:.status.hostIP,Pod_ID:.metadata.uid,ContainerName:.spec.containers[*].name

示例:
[root@VM-249-107-tencentos ~]# kubectl get pods -o custom-columns=Namespace:..metadata.namespace,podName:.metadata.name,Pod_ID:.metadata.uid  -A | grep 5c1369b0-2b65-4280-9b05-2475684a049b
输出:
default       memory-request-limit-d66c5f9f8-dhr2t   5c1369b0-2b65-4280-9b05-2475684a049b

或者获取到容器ID

代码语言:javascript
复制
cat /proc/1042832/cgroup | head -1 | awk -F '/' '{print $5}'  #进程ID 替换成自己查到的进程ID
代码语言:javascript
复制
docker inspect  <容器ID>   | grep  -i pod

根据容器ID 查询的POD信息
根据容器ID 查询的POD信息

总结成一个脚本getPodName.sh ,提前需要安装q工具yum install -y jq

代码语言:javascript
复制
#!/usr/bin/env bash

get_pod_name() {
  CID=`cat /proc/${pid}/cgroup | head -1 | awk -F '/' '{print $5}'`
  CID=$(echo ${CID:0:8})
  podname=$(docker inspect $CID | jq '.[0].Config.Labels."io.kubernetes.pod.name"')
  ns=$(docker inspect $CID | jq '.[0].Config.Labels."io.kubernetes.pod.namespace"')
  echo $ns:$podname
}

pid=$1
get_pod_name

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查询某个pod的进程PID
  • 根据PID查询pod name
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档