LXC: systemd дает сбой после 19-го контейнера

LXC: systemd дает сбой после 19-го контейнера

Я использую LXC на Archlinux.

У меня есть комбинация контейнеров Arch, Fedora, Centos, Debian и Ubuntu LXC, каждый из которых основан на systemd.

Если я попытаюсь открыть более 19 контейнеров LXC, 20-й контейнер запустится, но без запущенного systemd внутри. ( ps auxпоказывает только bash, init, и ps)

Я думал, что это может быть связано с количеством открытых файлов, так как контейнер centos иногда сообщает "слишком много открытых файлов", когда я запускаю poweroffего внутри, в то время как у меня запущено большое количество контейнеров LXC. Но я увеличил лимиты файловкак описано в этой ссылке, перезагрузил и проверил изменения, но проблема осталась.

Что может быть причиной этого?

решение1

Если ваша проблема возникает с непривилегированными (т. е. использующими пользовательские пространства имен) контейнерами, а не с привилегированными (т. е. root) контейнерами, я полагаю, что это вызвано ограниченным лимитом на использование интерфейса inotify для того же пользователя, который запускает контейнеры. По-видимому, systemd полагается на inotify. Пакет Debian buster LXC включает настройку, ослабляющую sysctl fs.inotify.max_user_instancesв/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

Theсоответствующая документация для этого параметрарассказывает:

/proc/sys/fs/inotify/max_user_instances
Это определяет верхний предел количества экземпляров inotify, которые могут быть созданы для одного реального идентификатора пользователя.

Если ваша установка LXC не включает такую ​​настройку, вы можете просто проверить, запущена ли она на хосте:

sysctl -w fs.inotify.max_user_instances=1024

решит проблему.

Связанный контент