
Estou executando o LXC no Archlinux.
Eu tenho uma combinação de contêineres Arch, Fedora, Centos, Debian e Ubuntu LXC, cada um baseado em systemd.
Se eu tentar abrir mais de 19 contêineres LXC, o 20º contêiner será iniciado, mas sem o systemd rodando dentro dele. ( ps aux
mostra apenas bash
,, init
e ps
)
Achei que isso poderia estar relacionado ao número de arquivos abertos, já que um contêiner centos às vezes relata "muitos arquivos abertos" quando executo poweroff
dentro dele enquanto tenho um grande número de contêineres LXC em execução. Mas aumentei os limites dos arquivosconforme descrito neste link, reiniciei e verifiquei as alterações, mas meu problema persiste.
O que poderia estar causando isso?
Responder1
Se o seu problema ocorrer com contêineres não privilegiados (ou seja: usando namespaces de usuário), em vez de contêineres privilegiados (ou seja: root), acredito que isso seria causado por um limite restrito no uso da interface inotify para o mesmo usuário executando contêineres . Aparentemente, o systemd depende do inotify. O pacote Debian buster LXC inclui uma configuração que afrouxa o sysctl fs.inotify.max_user_instances
em/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
Odocumentação relevante para esta configuraçãodiz:
/proc/sys/fs/inotify/max_user_instances
Isso especifica um limite máximo para o número de instâncias do inotify que podem ser criadas por ID de usuário real.
Se a sua instalação do LXC não incluir tal configuração, você pode verificar se está simplesmente executando no host:
sysctl -w fs.inotify.max_user_instances=1024
resolverá o problema.