LXC:systemd 在第 19 个容器之后失败

LXC:systemd 在第 19 个容器之后失败

我在 Archlinux 上运行 LXC。

我有 Arch、Fedora、Centos、Debian 和 Ubuntu LXC 容器的组合,每个容器都基于 systemd。

如果我尝试打开超过 19 个 LXC 容器,第 20 个容器将启动,但内部不会运行 systemd。 (ps aux仅显示bashinit、 和ps

我认为这可能与打开文件的数量有关,因为当我运行poweroff大量 LXC 容器时,centos 容器有时会报告“打开文件太多”。但我增加了文件限制如此链接中所述,重新启动并验证更改,但我的问题仍然存在。

可能是什么原因造成的?

答案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

此设置的相关文档告诉:

/proc/sys/fs/inotify/max_user_instances
这指定了每个真实用户 ID 可以创建的 inotify 实例数量的上限。

如果您的 LXC 安装不包含此类设置,您可以检查是否只是在主机上运行:

sysctl -w fs.inotify.max_user_instances=1024

将解决问题。

相关内容