
Estoy ejecutando LXC en Archlinux.
Tengo una combinación de contenedores Arch, Fedora, Centos, Debian y Ubuntu LXC, cada uno basado en systemd.
Si intento abrir más de 19 contenedores LXC, se iniciará el contenedor número 20, pero sin que systemd se ejecute en su interior. ( ps aux
muestra solo bash
,, init
y ps
)
Pensé que esto podría estar relacionado con la cantidad de archivos abiertos, ya que un contenedor centos a veces informa "demasiados archivos abiertos" cuando ejecutopoweroff
dentro de él mientras tengo una gran cantidad de contenedores LXC en ejecución. Pero aumenté los límites de archivos.como se describe en este enlace, reinicié y verifiqué los cambios, pero mi problema persiste.
¿Qué podría estar causando esto?
Respuesta1
Si su problema ocurre con contenedores sin privilegios (es decir, que usan espacios de nombres de usuario), en lugar de contenedores privilegiados (es decir, raíz), creo que esto sería causado por un límite restringido en el uso de la interfaz inotify para el mismo usuario que ejecuta contenedores. . Aparentemente systemd se basa en inotify. El paquete Debian buster LXC incluye una configuración que afloja el sysctl fs.inotify.max_user_instances
en/etc/sysctl.d/30-lxc-inotify.conf
:
# Defines the maximum number of inotify listeners. # By default, this value is 128, which is quickly exhausted when using # systemd-based LXC containers (15 containers are enough). # When the limit is reached, systemd becomes mostly unusable, throwing # "Too many open files" all around (both on the host and in containers). # See https://kdecherf.com/blog/2015/09/12/systemd-and-the-fd-exhaustion/ # Increase the user inotify instance limit to allow for about # 100 containers to run before the limit is hit again fs.inotify.max_user_instances = 1024
Eldocumentación relevante para esta configuracióndice:
/proc/sys/fs/inotify/max_user_instances
Esto especifica un límite superior en la cantidad de instancias de inotify que se pueden crear por ID de usuario real.
Si su instalación de LXC no incluye dicha configuración, puede verificar si simplemente se ejecuta en el host:
sysctl -w fs.inotify.max_user_instances=1024
solucionará el problema.