No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 13 al intentar crear cgroup

No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 13 al intentar crear cgroup

Hasta donde tengo entendido, la jerarquía 13 apunta a "nombre = systemd", he estado intentando ejecutar un lxc-execute algo simple dentro de un entorno de desarrollo de Docker con lo siguiente:

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-ejecutar

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

rastro

/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

He estado intentando contener un ejecutable y estoy empezando a preguntarme si tal vez debería usar solo cgroups, ya que todo este asunto de contenedores en contenedores parece un poco confuso.

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

¿En qué casos sería necesario montar systemd como escribible? ¿Por qué lxc/systemd me estaría buscando para montar 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

Intenté usar imágenes de Docker para ubuntu 17.04, 16.04 y alpine:latest, todos con los mismos resultados. Intenté usar lxc 2.07, 2.08 y 2.1.1, principalmente con los mismos resultados.

Durante mi proceso de aprendizaje pude resolver errores similares:

  • No se pudo encontrar un punto de montaje grabable para la jerarquía 4 de cgroup al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 5 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía 6 de cgroup al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 7 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 8 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 9 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 10 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 11 al intentar crear cgroup
  • No se pudo encontrar un punto de montaje grabable para la jerarquía de cgroup 12 al intentar crear cgroup

Usando 2 métodos diferentes, creo que resolví el montaje de la jerarquía de cgroup estándar para los primeros 12, pero 13 por alguna razón no funciona:

  1. montar -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} # y luego usando rootfs o una configuración de tipo mount.entry

Alguna información más relacionada:

gato /etc/*-liberación

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-ejecutar --versión

2.1.0-devel

versión acoplable

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

¿Qué tan estrechamente relacionadas están estas solicitudes de extracción?

Algunas ideas/preguntas relacionadas han sido que no debería usar contenedores en contenedores y debería usar solo una máquina virtual completa (no resuelve el problema de usabilidad).

  • ¿Podría intentar recompilar? ¿sistema?
  • ¿Quizás haya algo que ver con los parámetros de arranque del kernel?
  • ¿Quizás estoy usando versiones incorrectas de cgroupv1 y cgroupv2?
  • ¿Es posible desactivar el intento de montar jerarquías de cgroup?
  • ¿Está esto relacionado con cómo Docker hace /sbin/init e inicia el espacio de nombres inicial del grupo c?

Cualquier ayuda sería muy apreciada.

También posiblemente relacionado:

Investigamos un poco más y también encontré esta información, que muestra más información sobre el material inicial de cgroup cgfs, posiblemente relacionado con 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

información relacionada