一台机器上同时运行的 LXC 容器数量是否有实际限制?
显然,这取决于节点规格(CPU、RAM 等),但我真正想知道的是直接在操作系统上运行进程的成本与在同一台机器上的专用容器中运行相同进程的成本?如果您必须对开销差异进行量化,那么开销是多少?这是找出一台服务器上应运行的最大 lxc 容器数量的好方法吗?
答案1
如上所述,开销很小。切换命名空间通常没有开销(即使对于主机进程,这些字段也已经存在),因此主要开销来自 LXC 需要创建的少量额外资源,通常是 4-5 个绑定挂载,可能有几个 tmpfs 挂载,两个 VETH 设备和一个回送设备。
由于库通常在容器之间共享,因此即使启动 init 和一堆其他进程也不会耗费那么多资源。
总而言之,回答您的问题非常困难:)如果您采用单个进程并比较它在主机上运行或在容器中运行,则该特定进程的开销将为 0。实际的 LXC 开销来自该进程的父进程和该进程可能使用的其他资源(网络设备,...)。
无论如何,我最近没有进行任何疯狂的基准测试,但几个月前,我设法在一台配备 4GB RAM 的简单 Pentium4 机器上运行了大约一千个带有 init 系统的简单 apache2 容器。这些容器共享其 rootfs 以充分利用共享内存,但一切仍然启动正常。
哦,关于 pid_max 限制,它实际上不是一个限制,因为现在它可以一直增加到 2^64(至少在 64 位系统上),所以 32768 的限制已经成为过去。
答案2
开销非常低,你可以运行大量不做任何事情的容器,但这也没什么意思。你可以在系统中运行多少个有用的容器,取决于你如何定义有用。你必须测试实际用例并看看。
不过,一个实际限制是允许的 pid 数量。您可以通过查看来了解这一点/proc/sys/kernel/pid_max
。但出于上述原因,它可能不是一个有用的数字。