一、查看 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 /sys/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 感谢您,问题得到解决了,现已总结了具体过程。希望可以帮助到更多的人。
|