cgroup을 생성하려고 할 때 cgroup 계층 구조 13에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.

cgroup을 생성하려고 할 때 cgroup 계층 구조 13에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.

계층 구조 13이 "name=systemd"를 가리키는 것으로 이해하는 한, 다음 명령을 사용하여 docker 개발 환경에서 약간 더 간단한 lxc-execute를 실행하려고 했습니다.

docker run -i -t --cap-add=SYS_PTRACE --cap-add=SYS_ADMIN lxc-build:phantomjs-test

lxc.conf

lxc.arch = x86_64
lxc.rootfs.path = /home/tester
lxc.uts.name = phantom_container
lxc.idmap = u 0 1000 65536
lxc.idmap = g 0 1000 65536
lxc.pty.max = 1
lxc.tty.max = 1
lxc.execute.cmd = phantomjs

lxc 실행

/home/tester # XDG_RUNTIME_DIR='' lxc-execute --name bork -f /home/tester/default.conf -l TRACE -o okay.log

추적하다

/home/tester # cat okay.log 
    INFO     lxc_confile - confile.c:set_config_idmaps:1575 - Read uid map: type u nsid 0 hostid 1000 range 65536
    INFO     lxc_confile - confile.c:set_config_idmaps:1575 - Read uid map: type g nsid 0 hostid 1000 range 65536
    TRACE    lxc_commands - commands.c:lxc_cmd_init:1323 - Creating abstract unix socket "/usr/local/var/lib/lxc/bork/command"
    TRACE    lxc_start - start.c:lxc_init_handler:563 - Unix domain socket 4 for command server is ready
    TRACE    lxc_start - start.c:lxc_init:578 - initialized LSM
    TRACE    lxc_start - start.c:lxc_init:584 - read seccomp policy
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STARTING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    TRACE    lxc_start - start.c:lxc_init:591 - set container state to "STARTING"
    TRACE    lxc_start - start.c:lxc_init:619 - set environment variables
    TRACE    lxc_start - start.c:lxc_init:625 - ran pre-start hooks
    DEBUG    lxc_start - start.c:setup_signal_fd:278 - Set SIGCHLD handler with file descriptor: 5.
    TRACE    lxc_start - start.c:lxc_init:636 - set up signal fd
    DEBUG    console - console.c:lxc_console_peer_default:513 - using "/dev/tty" as peer tty device
    DEBUG    console - console.c:lxc_console_signal_init:178 - Created signal fd 9
    DEBUG    console - console.c:lxc_console_winsz:86 - Set window size to 204 columns and 59 rows
    TRACE    lxc_start - start.c:lxc_init:643 - created console
    TRACE    lxc_conf - conf.c:lxc_ttys_shift_ids:2870 - chowned console "/dev/pts/1"
    TRACE    lxc_start - start.c:lxc_init:649 - shifted tty ids
    INFO     lxc_start - start.c:lxc_init:651 - container "bork" is initialized
    DEBUG    storage - storage/storage.c:storage_query:252 - Detected rootfs type "dir"
    INFO     lxc_cgroup - cgroups/cgroup.c:cgroup_init:67 - cgroup driver cgroupfs initing for bork

    # I've been really focused on this error
    ERROR    lxc_cgfs - cgroups/cgfs.c:lxc_cgroupfs_create:901 - Could not find writable mount point for cgroup hierarchy 13 while trying to create cgroup.


    ERROR    lxc_start - start.c:lxc_spawn:1245 - Failed creating cgroups.
    DEBUG    lxc_network - network.c:lxc_delete_network:3123 - Deleted network devices
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to ABORTING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    ERROR    lxc_start - start.c:__lxc_start:1503 - Failed to spawn container "bork".
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STOPPING
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered
    TRACE    lxc_start - start.c:lxc_serve_state_clients:350 - Set container state to STOPPED
    TRACE    lxc_start - start.c:lxc_serve_state_clients:353 - No state clients registered

나는 실행 파일을 컨테이너화하려고 노력해 왔으며 컨테이너 내의 전체 컨테이너가 약간 혼란스러워 보이기 때문에 cgroup을 사용해야 하는지 궁금해지기 시작했습니다.

tester@04de411cd0fe:~$ cat /proc/1/cgroup

13:name=systemd:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
12:pids:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
11:hugetlb:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
10:net_prio:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
9:perf_event:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
8:net_cls:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
7:freezer:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
6:devices:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
5:memory:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
4:blkio:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
3:cpuacct:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
2:cpu:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f
1:cpuset:/docker-ce/docker/04de411cd0fe22b59d5508bbfc137631d1867b9a56104d9db80ca66b061f4b1f

어떤 상황에서 systemd를 쓰기 가능으로 설치해야 합니까? lxc/systemd에서 systemd를 마운트하라고 요청하는 이유는 무엇입니까?

tester@04de411cd0fe:~$ mount | grep cgroup

tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cpuset on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)
blkio on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
memory on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
devices on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
freezer on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
net_cls on /sys/fs/cgroup/net_cls type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls)
perf_event on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
net_prio on /sys/fs/cgroup/net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_prio)
hugetlb on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
pids on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)


/home/tester # cat /proc/cgroups

#subsys_name    hierarchy   num_cgroups enabled
cpuset  1   22  1
cpu 2   22  1
cpuacct 3   22  1
blkio   4   22  1
memory  5   23  1
devices 6   22  1
freezer 7   22  1
net_cls 8   22  1
perf_event  9   22  1
net_prio    10  22  1
hugetlb 11  22  1
pids    12  22  1

우분투 17.04, 16.04 및 alpine:latest에서 도커 이미지를 사용해 보았지만 동일한 결과가 나왔습니다. 나는 lxc 2.07, 2.08 및 2.1.1을 사용해 보았지만 거의 동일한 결과를 얻었습니다.

학습 과정에서 비슷한 오류를 해결할 수 있었습니다.

  • cgroup을 생성하려고 할 때 cgroup 계층 구조 4에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 5에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 6에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 7에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 8에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 9에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 10에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 11에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.
  • cgroup을 생성하려고 할 때 cgroup 계층 구조 12에 대해 쓰기 가능한 마운트 지점을 찾을 수 없습니다.

두 가지 다른 방법을 사용하여 처음 12개의 표준 cgroup 계층 구조 설치 문제를 해결했지만 13개는 어떤 이유로 작동하지 않았습니다.

  1. 마운트 -t cgroup cpuset -o cpuset /sys/fs/cgroup/cpuset/
  2. cd project && mkdir -p sys/fs/cgroup/{net_prio,pids,hugetlb,freezer,cpuset,cpu,devices,perf_event,memory,cpuacct,net_cls,blkio} # 그런 다음 rootfs 또는 mount.entry 유형 구성을 사용합니다.

추가 관련 정보:

cat/etc/*-release

3.6.2
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.6.2
PRETTY_NAME="Alpine Linux v3.6"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

uname -a

Linux 8fd6247b5665 4.9.60-linuxkit-aufs #1 SMP Mon Nov 6 16:00:12 UTC 2017 x86_64 Linux

lxc-실행--버전

2.1.0-devel

도커 버전

Version 17.11.0-ce-mac40 (20561)
Channel: edge
d8fd0f1f4a

이러한 풀 요청은 얼마나 관련이 있나요?

몇 가지 관련 생각/질문은 컨테이너 내의 컨테이너를 사용해서는 안 되며 전체 가상 머신(가용성 문제는 해결되지 않음)을 사용해야 한다는 것입니다.

  • 다시 컴파일해 볼 수 있나요? 체계?
  • 커널 부팅 매개변수와 관련이 있을까요?
  • 어쩌면 잘못된 버전의 cgroupv1 및 cgroupv2를 사용하고 있는 것일까요?
  • cgroup 계층 구조를 마운트하려는 시도를 비활성화할 수 있습니까?
  • 이는 docker가 /sbin/init를 실행하고 초기 cgroup 네임스페이스를 시작하는 방법과 관련이 있습니까?

어떤 도움이라도 대단히 감사하겠습니다.

또한 관련될 수 있습니다:

그래서 더 많은 조사를 하면서 초기 cgroup cgfs 내용에 대한 추가 정보를 보여주는 이 정보도 찾았습니다 name=systemd. 다음과 관련이 있을 수 있습니다.

/home/tester # cat /usr/share/doc/lxcfs/README.Debian
...
/home/tester # cat /usr/share/pam-configs/cgfs

Name: Create cgroups for user login sessions
Default: yes
Priority: 0
Session-Type: Additional
Session:
    optional    pam_cgfs.so -c freezer,memory,name=systemd


/home/tester # cat /etc/pam.d/common-session

session [default=1]         pam_permit.so
session requisite           pam_deny.so
session required            pam_permit.so
session optional            pam_umask.so
session required    pam_unix.so 
session optional    pam_systemd.so 
session optional    pam_cgfs.so -c freezer,memory,name=systemd

관련 정보