大規模部署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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章