首页 > 系统相关 >k8s 根据系统进程号查询pod容器和根据容器查询进程号

k8s 根据系统进程号查询pod容器和根据容器查询进程号

时间:2024-04-07 10:36:53浏览次数:27  
标签:容器 kubernetes 4aaa 986a 4ac6 查询 io 进程 1a5133a4bcf1


根据pod可以查看容器名字所在节点定位容器名字。
kubectl get pod -o wide

[root@k69 ~]# docker inspect 0cd46baf447b|egrep Pid "Pid": 346, "PidMode": "", "PidsLimit": 0, [root@k69 ~]# ps aux|egrep 346 root 346 7.5 0.8 25819208 2299124 ? Ssl Apr06 131:51 java -jar /xxxx.jar

=====================================================================================================


在管理 Kubernetes 集群的过程中,我们经常会遇到这样一种情况:在某台节点上发现某个进程资源占用量很高,却又不知道是哪个容器里的进程。有没有办法可以根据 PID 快速找到 Pod 名称呢?

假设现在有一个 prometheus 进程的 PID 是 14338

1. Container ID

要获取容器的 ID,可以查看 PID 对应的 cgroup 信息:

cat /proc/14338/cgroup

11:blkio:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
10:cpuset:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
9:freezer:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
8:hugetlb:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
7:perf_event:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
6:cpuacct,cpu:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
5:pids:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
4:devices:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
3:net_prio,net_cls:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
2:memory:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c
1:name=systemd:/kubepods/burstable/pod8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1/d6f24b62ea28e9e67f7bc06f98de083cc49454f353389cd396f5d3ac6448f19c

可以看到该进程对应的容器 ID 为 d6f24b62...,可以再优化一下上面的命令,直接获取容器 ID:

$ CID=$(cat /proc/14338/cgroup | awk -F '/' '{print $5}')

$ echo ${CID:0:8}
d6f24b62

最后一步根据容器 ID 获取 Pod 名称,如果你的容器运行时是 containerd 或 crio,可以使用 crictl 来获取容器信息:

# Go Template
$ crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' d6f24b62
prometheus-k8s-0

# jq
$ crictl inspect d6f24b62|jq '.status.labels["io.kubernetes.pod.name"]'
"prometheus-k8s-0"


2. Pod UID

面来看看第二种方法,先根据 PID 直接获取 Pod UID

$ cat /proc/14338/mountinfo | grep "etc-hosts" | awk -F / {'print $6'}
8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1

然后根据 Pod UID 获取 Pod 名称:

$ crictl ps -o json | jq  '.[][].labels | select (.["io.kubernetes.pod.uid"] == "8e018a8e-4aaa-4ac6-986a-1a5133a4bcf1") | .["io.kubernetes.pod.name"]'|uniq
"prometheus-k8s-0"



"Labels": {
"annotation.io.kubernetes.container.hash": "53c04b42",
"annotation.io.kubernetes.container.ports": "[{\"name\":\"8500tcp02\",\"containerPort\":8500,\"protocol\":\"TCP\"}]",
"annotation.io.kubernetes.container.restartCount": "0",
"annotation.io.kubernetes.container.terminationMessagePath": "/dev/termination-log",
"annotation.io.kubernetes.container.terminationMessagePolicy": "File",
"annotation.io.kubernetes.pod.terminationGracePeriod": "30",
"io.kubernetes.container.logpath": "/var/log/pods/188ab140-f391-11ee-a7ab-061d22000bfb/madp-ccy-biz/0.log",
"io.kubernetes.container.name": "madp-ccy-biz",
"io.kubernetes.docker.type": "container",
"io.kubernetes.pod.name": "madp-ccy-biz-7646c6845f-2xn4x",
"io.kubernetes.pod.namespace": "ccy",
"io.kubernetes.pod.uid": "188ab140-f391-11ee-a7ab-061d22000bfb",
"io.kubernetes.sandbox.id": "5135369e0258abebaf0a846629e4bec967c7a4b86f3dde79c8e973e51409b9db"
}










 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:容器,kubernetes,4aaa,986a,4ac6,查询,io,进程,1a5133a4bcf1
From: https://www.cnblogs.com/gaoyuechen/p/18118524

相关文章

  • MySQL分组查询以及内连接查询
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • 一条SQL查询语句是如何执行的
    这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID......
  • MySQL左右连接查询
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • MySQL左右表联合查询
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • MySQL多表联合查询+分组+排序
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • 左右表查询
    SELECTstudentId'学生id',userName'学生姓名',sum(score)'学生总分',count(score)'考试科目数量',avg(score)'各科目平均分'fromresultINNERJOINstudentonresult.studentId=student.idGROUPBYstudentId,userNameHavingAVG(SCORE)......
  • Linux进程API接口功能介绍和使用方法
    目录概述1进程基本操作1.1fork函数1.2终止进程1.3exec族函数1.4wait函数1.5守护进程2使用进程相关API的范例2.1创建进程2.1.1功能介绍2.1.2编写代码2.1.3运行结果2.2等待退出函数2.2.1功能介绍2.2.2编写代码2.2.3运行结果2.3使用守护进程2......
  • ISBN信息查询api接口
     基本说明:接口地址:http://data.isbn.work/openApi/getInfoByIsbn?isbn={isbn}&appKey={appkey}返回格式:json请求方式:get请求示例:http://data.isbn.work/openApi/getInfoByIsbn?isbn=9787513159074&appKey=ae1718d4587744b0b79f940fbef69e77伽薇 809137232请求参数说明:名......
  • Linux--进程的概念(一)
    目录一、冯诺依曼体系结构二、操作系统2.1什么是操作系统2.2操作系统的意义三、进程3.1进程的基本概念3.2描述进程——PCB3.3进程和程序的区别3.4task_struct-PCB的一种3.5task_struct的内容分类四、如何查看进程4.1通过系统文件查看进程4.2通过ps指令查看进......
  • Linux进程概念(二):进程的基本概念与进程的创建
    目录进程的基本概念进程控制块-PCB学前补充预备知识创建(子)进程创建(子)进程的原因理解fork有两个返回值进程的基本概念基本概念:程序的一个执行实例,正在执行的程序等内核层面:担当分配系统资源(CPU时间、内存)的实体操作系统如何管理进程:先描述:操作系统将一个磁盘中......