
一、查看 docker container 的 Cgroup 我是使用如下方式:
$ docker ps|grep nginx $ docker inspect 4e35d36bc919 | grep -i pid "Pid": 20513, "PidMode": "", "PidsLimit": null, $ cd /sys/fs/cgroup/memory $ cat cgroup.procs # 20513 ,可以看到 docker nginx 的 container 的 PID 为 20513 的已经生效 $ cat memory.limit_in_bytes 二、但是在 K8S 中找了半天也找不到 Pod 的 Cgroups
# 使用下面命令设置了 CPU 和 Memory $ kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=500m,memory=128Mi # 查看是否生效 $ kubectl get deploy nginx-deployment -oyaml ... spec: containers: resources: limits: cpu: 500m memory: 128Mi ... 得到如上 yaml 证明已经修改 CPU 、Memory 成功了。
问题:K8S 如何查看 Pod 的 Cgroup ?换句话说我想找到“使用 kubectl set resources 命令设置 CPU 、Memory 的 Cgroup 在 Linux 上的实现”,因为是初学者,所以希望各位前辈通俗易懂最好有命令可以提供一下,不胜感激!!!!感谢每一位回复的前辈,谢谢
docker 已配置:cgroupdriver=systemd
docker version:20.10.17
kubernetes version:v1.22.2
感谢各位前辈的解答,问题得以解决,总结如下:
# 查看所有deployment $ kubectl get deploy NAME READY nginx-deployment 3/3 # 查看所有ReplicaSet $ kubectl get rs NAME DESIRED CURRENT READY nginx-deployment-754bf85c9 3 3 3 # 查看所有Pod $ kubectl get po NAME READY nginx-deployment-754bf85c9-49ns4 1/1 nginx-deployment-754bf85c9-5rxrk 1/1 nginx-deployment-754bf85c9-lvj49 1/1 # 查看此deployment的所有docker container,拿到3个Pod的docker container ID $ docker ps |grep nginx-deployment-754bf85c9 195328818fcf badcb27ef1c3 bae9808897ed $ docker inspect 195328818fcf |grep -i pid "Pid": 7483, $ docker inspect badcb27ef1c3 |grep -i pid "Pid": 7064, $ docker inspect bae9808897ed |grep -i pid "Pid": 6642, # 列出Pid=7483的所有Cgroups路径,得到下列Cgroups路径 $ cat /proc/7483/cgroup 8:cpu,cpuacct:/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice/docker-195328818fcf8fb487f12939cc883d9bc9b1dd9369bf4ed22dc3c64a79cb91ef.scope 5:memory:/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice/docker-195328818fcf8fb487f12939cc883d9bc9b1dd9369bf4ed22dc3c64a79cb91ef.scope # 进入Pid=7483的Cgroup Memory路径 $ cd /sys/fs/cgroup/memory/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice/docker-195328818fcf8fb487f12939cc883d9bc9b1dd9369bf4ed22dc3c64a79cb91ef.scope # 使用pstree命令查看进程关系树 $ pstree -up 7483 nginx(7483)-+-nginx(7537,systemd-resolve) |-nginx(7538,systemd-resolve) `-nginx(7539,systemd-resolve) $ cat cgroup.procs 7483 # 这个是本进程,下面三个Pid都是子进程号忽略即可 7537 7538 7539 $ cat memory.limit_in_bytes 134217728 bytes也就是128MB # 下面是Cgroup CPU系统的示例 $ cd /sys/fs/cgroup/cpu/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice/docker-195328818fcf8fb487f12939cc883d9bc9b1dd9369bf4ed22dc3c64a79cb91ef.scope $ cat cpu.cfs_quota_us # 50000 # 最后,查看Pid为7064、6642也是一样的,这里就不展示了。 1 root01 2022-08-08 11:38:57 +08:00 kubectl describe pod podname -n namespace |
2 andyangyu 2022-08-08 11:47:32 +08:00 pod 最后也是调度到某一台服务器上的 container ,在那台服务器上查看 container 就行 |
3 kalllllllen 2022-08-08 11:58:52 +08:00 用 kubectl describe 就可以 |
4 1point 2022-08-08 12:29:23 +08:00 cat /sy/fs/cgroup/memory/memory.limit_in_bytes |
5 jenrey OP @kalllllllen describle 看不到关于此 Pod 的 Cgroup 目录信息。而我在`/sys/fs/cgroup/memory/`下又无法找到此 Pid 的 Cgroups |
6 jenrey OP @root01 不太行,还是看到不 Cgroup 信息。我在`/sys/fs/cgroup/memory/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice`目录找到了 deployment 的 cgroups ,但是我是挨个文件看的,最后发现此目录下的`memory.limit_in_bytes`内的值为 134217728Bytes ,也就是 128MB ,但是我现在希望得到此目录与 Pod 的对应关系。 |
7 martinqian 2022-08-08 14:24:02 +08:00 下面这个方式是可以拿到的,AWS EKS 1.22 ```bash kubectl get pods -n namespace -o wide ssh ... ps -ax | grep nginx | grep -v grep cat /proc/$pid/cgroup ``` |
8 jenrey OP @martinqian 感谢您,问题得到解决了,现已总结了具体过程。希望可以帮助到更多的人。 |