初学者问一个略显深入的问题: K8S 如何查看 Pod 的 Cgroup - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jenrey
V2EX    Kubernetes

初学者问一个略显深入的问题: K8S 如何查看 Pod 的 Cgroup

  •  2
     
  •   jenrey 2022-08-08 11:27:32 +08:00 3355 次点击
    这是一个创建于 1205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一、查看 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

    第 1 条附言    2022-08-08 15:41:36 +08:00

    感谢各位前辈的解答,问题得以解决,总结如下:

    # 查看所有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也是一样的,这里就不展示了。 
    8 条回复    2022-08-08 15:42:59 +08:00
    root01
        1
    root01  
       2022-08-08 11:38:57 +08:00
    kubectl describe pod podname -n namespace
    andyangyu
        2
    andyangyu  
       2022-08-08 11:47:32 +08:00
    pod 最后也是调度到某一台服务器上的 container ,在那台服务器上查看 container 就行
    kalllllllen
        3
    kalllllllen  
       2022-08-08 11:58:52 +08:00
    用 kubectl describe 就可以
    1point
        4
    1point  
       2022-08-08 12:29:23 +08:00
    cat /sy/fs/cgroup/memory/memory.limit_in_bytes
    jenrey
        5
    jenrey  
    OP
       2022-08-08 13:48:41 +08:00
    @kalllllllen describle 看不到关于此 Pod 的 Cgroup 目录信息。而我在`/sys/fs/cgroup/memory/`下又无法找到此 Pid 的 Cgroups
    jenrey
        6
    jenrey  
    OP
       2022-08-08 14:00:16 +08:00
    @root01 不太行,还是看到不 Cgroup 信息。我在`/sys/fs/cgroup/memory/kubepods.slice/kubepods-pod089f877c_815d_4f1d_8a18_c8d4dc528932.slice`目录找到了 deployment 的 cgroups ,但是我是挨个文件看的,最后发现此目录下的`memory.limit_in_bytes`内的值为 134217728Bytes ,也就是 128MB ,但是我现在希望得到此目录与 Pod 的对应关系。
    martinqian
        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
    ```
    jenrey
        8
    jenrey  
    OP
       2022-08-08 15:42:59 +08:00
    @martinqian 感谢您,问题得到解决了,现已总结了具体过程。希望可以帮助到更多的人。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3143 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:40 PVG 20:40 LAX 04:40 JFK 07:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86