gpt4 book ai didi

docker - kubernetes pod 中的容器是否属于同一 cgroup?

转载 作者:行者123 更新时间:2023-12-02 11:30:00 24 4
gpt4 key购买 nike

在多容器 Kubernetes pod 中,容器是同一个 cgroup(连同 pod)的一部分还是为每个容器创建一个单独的 cgroup。

最佳答案

群组
pod 中的容器共享 cgroup 层次结构的一部分,但每个容器都有自己的 cgroup。我们可以试试这个并验证我们自己。

  • 启动一个多容器 pod。
  • # cat mc2.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: two-containers
    spec:
    restartPolicy: Never
    containers:
    - name: container1
    image: ubuntu
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]

    - name: container2
    image: ubuntu
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
    # kubectl apply -f mc2.yaml
    pod/two-containers created
  • 找到宿主机上的进程cgroups
  • # ps -ax | grep while | grep -v grep
    19653 ? Ss 0:00 /bin/bash -c -- while true; do sleep 30; done;
    19768 ? Ss 0:00 /bin/bash -c -- while true; do sleep 30; done;
    # cat /proc/19653/cgroup
    12:hugetlb:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    11:memory:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    10:perf_event:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    9:freezer:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    8:cpuset:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    7:net_cls,net_prio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    6:cpu,cpuacct:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    5:blkio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    4:pids:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    3:devices:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    2:rdma:/
    1:name=systemd:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    0::/
    # cat /proc/19768/cgroup
    12:hugetlb:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    11:memory:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    10:perf_event:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    9:freezer:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    8:cpuset:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    7:net_cls,net_prio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    6:cpu,cpuacct:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    5:blkio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    4:pids:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    3:devices:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    2:rdma:/
    1:name=systemd:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/e10fa18a63cc26de27f3f79f46631cd814efa3ef7c2f5ace4b84cf5abce89765
    0::/
    如您所见,Pod 中的容器共享 cgroup 层次结构,直到 /kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011然后他们得到了自己的 cgroup。 ( These containers are under besteffort cgroup because we have not specified the resource requests )
    Another clue that containers run in their own cgroup is that kubernetes allows you to set resource requests at the container level.
    您还可以通过登录容器并查看/proc/self/cgroup 文件来找到容器的 cgroup。 (如果启用了 cgroup 命名空间,这在最新版本的 kubernetes 中可能不起作用)
    # kubectl exec -it two-containers -c container2 bash
    # root@two-containers:# cat /proc/self/cgroup
    12:hugetlb:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    11:memory:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    10:perf_event:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    9:freezer:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    8:cpuset:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    7:net_cls,net_prio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    6:cpu,cpuacct:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    5:blkio:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    4:pids:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    3:devices:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    2:rdma:/
    1:name=systemd:/kubepods/besteffort/poda9c80282-3f6b-4d5b-84d5-a137a6668011/ed89697807a981b82f6245ac3a13be232c1e13435d52bc3f53060d61babe1997
    0::/

    命名空间
    默认情况下,pod 中的容器也共享网络和 IPC 命名空间。
    # cd /proc/19768/ns/
    # /proc/19768/ns# ls -lrt
    total 0
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 uts -> uts:[4026536153]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 user -> user:[4026531837]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 pid_for_children -> pid:[4026536154]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 pid -> pid:[4026536154]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 net -> net:[4026536052]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 mnt -> mnt:[4026536152]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 ipc -> ipc:[4026536049]
    lrwxrwxrwx 1 root root 0 Jul 4 01:41 cgroup -> cgroup:[4026531835]
    # cd /proc/19653/ns
    # /proc/19653/ns# ls -lrt
    total 0
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 uts -> uts:[4026536150]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 user -> user:[4026531837]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 pid_for_children -> pid:[4026536151]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 pid -> pid:[4026536151]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 net -> net:[4026536052]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 mnt -> mnt:[4026536149]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 ipc -> ipc:[4026536049]
    lrwxrwxrwx 1 root root 0 Jul 4 01:42 cgroup -> cgroup:[4026531835]
    如您所见,容器共享网络和 IPC 命名空间。您还可以使用 shareProcessNamespace 使容器共享 pid 命名空间pod 规范中的字段。
    https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace

    cgroup:[4026531835] is same for both the containers. Is this(cgroup namespace) different from the cgroups they (containers) are part of.


    cgroups 限制了一个进程(或一组进程)可以使用的资源(cpu、内存等)。
    命名空间隔离并限制进程(或一组进程)对系统资源(如网络、进程树等)的可见性。有不同的命名空间组,如网络、IPC 等。其中一个命名空间是 cgroup 命名空间。使用 cgroup 命名空间,您可以限制一个进程(或一组进程)中其他 cgroup 的可见性
    cgroup 命名空间虚拟化进程的 cgroups 的 View 。目前,如果您尝试 cat /proc/self/cgroup从容器内,您将能够看到从全局 cgroup 根开始的完整 cgroup 层次结构。这可以使用 cgroup 命名空间来避免,可以从 kubernetes v1.19 获得。 . Docker also supports this from version 20.03 .在创建容器时使用 cgroup 命名空间时,您会看到 cgroup 根目录为 /在容器内部,而不是看到全局 cgroups 层次结构。
    https://man7.org/linux/man-pages/man7/cgroup_namespaces.7.html

    关于docker - kubernetes pod 中的容器是否属于同一 cgroup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62716970/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com