大规模部署lxc容器遇到的若干问题

  • 线程数控制

启动线程过多会导致资源不足引发的lxc-start命令无法执行问题,到致大量容器只执行了lxc-copy,而无法真正运行。具体情况应视服务器硬件条件(cpu,内存--在本项目部署中主要瓶颈在于cpu)以及当前服务器状态(当前主要是cpu占有率过高问题)而定。实测在cpu高占用下(90%+)线程数应为5以下,正常应为10-20线程数。

  • 由于多线程运行,无法有效监测执行针对lxc容器复制启动及运行所产生的cpu与内存开销改为在不启动其他应用程序的情况下监测整个物理机的cpu和内存使用率,且这一数据更有实际意义。

 

 

 

  • cpu占用过高问题

如图所示在lxc容器数量部署到1300左右cpu占用率开始从20%以下开始飙升,部署到2300左右飙升至80%,随后增速下降至3500台左右稳定在95-99%。(图示是按时间次序的,有所出入)

问题一是由于cpu占用率过高导致系统卡顿,最后几百台启动失败,最后甚至只能开启一个terminal终端窗口。

问题二是即使停止create新的lxc容器,仍有大量init进程和ksoftirqd/*+进程占用着cpu,导致cpu占用率居高不下得不到释放。

重启或许能暂时解决问题,但是还存在两个问题一是所使用的五张网卡在重启后不一定能完全起来,导致同样无法有效部署,二是重启后原先启动起来的容器会再次进入stopped状态,并且再次启动这些容器可能还会再次陷入cpu高占用的局面

  • 部署规模上限问题

在使用桥接模式进行部署的时候,由于linux内核的限制通过单张网卡桥接网络最多只能部署1024台主机。遂再启用四张网卡在每张网卡桥上配置1000台lxc容器的IP,子网掩码为255.255.0.0。

  • 网段规划

部署在五个网段内分别是:

172.10.0.0/16

172.20.0.0/16

172.30.0.0/16

172.40.0.0/16

172.50.0.0/16

上述每个网段内部署1000台容器,其中每个网段内部署的第一台主机从172.**.1.1起,每个/24网段内部署250台,部署空间为172.**.1.1-250 172.**.2.1-250 172.**.3.1-250 172.**.4.1-250。具体配置方法是先通过修改/etc/apt/network/interface文件手动配置网卡与网桥,再修改lxc网络配置文件lxc和lxc-net,将lxc网络设置为网桥br01,在模板容器中进入容器修改interface文件将其网卡配置为静态,并修改/var/lib/lxc/容器名/config文件,将其挂载到相应的网桥上。

  • 网卡启动问题

每次重启服务器后,由interface文件手动配置网桥的网卡(eno1,eno2,eno3,eno4,ens1f0,分别对应网桥br01-br05)会出现无法启动的情况,在这种情况下,ifconfig命令无法查询网卡信息。在这种情况下,可以命令行执行/etc/init.d/networking start重启网卡,虽然结果是failed,可以在执行完后几秒钟用Ctrl + C中断节约时间,但每次执行后都能启动一张网卡,通过ifconfig可以查询。

通过查阅业内相关工作,发现这是由于Linux网络管理工具导致的,Linux有两个管理工具network和networkManager,系统默认的优先选项是后者,因此对于存在冲突的网卡配置就无法启动该网卡,解决方式是禁用networkManager。

  • tty上限问题

lxc对于tty存在启动限制,需要进入lxc配置文件,将创建tty数量设置为0,tty和容器命令行交互相关,禁用tty就无法进入容器进行操作,但这并不影响项目所要达到的目标,遂禁用tty,lxc容器可以突破数量限制顺利启动。

  • 当前lxc容器启动受到CPU占用的限制,目前最大启动数约为4100,容器名分别为m0-999,n0-999,o0-999,p0-999,q0-99。

 

猜你喜欢

转载自blog.csdn.net/goodboydan/article/details/107100910
今日推荐