LXC: 19번째 컨테이너 이후 systemd가 실패함

LXC: 19번째 컨테이너 이후 systemd가 실패함

저는 Archlinux에서 LXC를 실행하고 있습니다.

저는 각각 systemd를 기반으로 하는 Arch, Fedora, Centos, Debian 및 Ubuntu LXC 컨테이너의 조합을 가지고 있습니다.

19개가 넘는 LXC 컨테이너를 열려고 하면 20번째 컨테이너가 시작되지만 내부에서 systemd가 실행되지 않습니다. ( ps aux단지 bash, init및 를 표시함 ps)

저는 이것이 열린 파일 수와 관련이 있을 수 있다고 생각했습니다. 왜냐하면 poweroff많은 수의 LXC 컨테이너가 실행 중인 동안 centos 컨테이너 내부에서 실행할 때 때때로 "열린 파일이 너무 많습니다"라고 보고하기 때문입니다. 그런데 파일 한도를 늘렸어요이 링크에 설명된 대로, 재부팅하고 변경 사항을 확인했지만 문제가 지속됩니다.

이 문제의 원인은 무엇입니까?

답변1

권한 있는(예: 루트) 컨테이너가 아닌 권한 없는(즉: 사용자 네임스페이스 사용) 컨테이너에서 문제가 발생하는 경우 이는 컨테이너를 실행하는 동일한 사용자에 대한 inotify 인터페이스 사용에 대한 제한된 제한으로 인해 발생한다고 생각합니다. . 분명히 systemd는 inotify에 의존합니다. 데비안 버스터 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

문제를 해결할 것입니다.

관련 정보