天天看點

PouchContainer 支援 LXCFS 實作高可靠容器隔離引言LXCFS 業務場景PouchContainer 內建 LXCFS總結

在實體機和虛拟機時代,公司内部逐漸形成了自己的一套工具鍊,諸如編譯打包、應用部署、統一監控等,這些工具已經為部署在實體機和虛拟機中的應用提供了穩定的服務。接下來将從監控、運維工具、應用部署等方面詳細闡述 LXCFS 在上述業務容器化過程中發揮的作用。

可以看到,tsar 對程序、IO、CPU 的監控都依賴 /proc 檔案系統。

當容器内 /proc 檔案系統提供的是主控端資源資訊時,這類監控不能監控容器内資訊。為了滿足業務需求,需要适配容器監控,甚至需要單獨為容器内監控開發另一套監控工具。這種改變勢必會拖慢甚至阻礙企業現存業務容器化的步伐,容器技術要盡可能相容公司原有的工具鍊,兼顧工程師的使用習慣。

PouchContainer 支援 LXCFS 可以解決上述問題,依賴 /proc 檔案系統的監控、運維工具,部署在容器内或主控端上對工具是透明的,現存監控、運維工具無需适配或重新開發,即可平滑遷移到容器内,實作容器内的監控和運維。

接下來讓我們從執行個體中直覺感受一下,在一台 Ubuntu 虛拟機中安裝 PouchContainer 0.3.0 :

systemd 拉起 pouchd ,預設不開啟 LXCFS,此時建立的容器無法使用 LXCFS 的功能,我們看一下容器内相關 /proc 檔案的内容:

可以看到,在容器内看到的 /proc/meminfo、uptime 檔案的輸出與主控端一緻,雖然啟動容器的時候指定了記憶體為 50M,/proc/meminfo 檔案并未展現出容器内的記憶體限制。

在主控端内啟動 LXCFS 服務,手動拉起 pouchd 程序,并指定相應的 LXCFS 相關參數:

啟動容器,擷取相應的檔案内容:

使用 LXCFS 啟動的容器,讀取容器内 /proc 檔案,可以得到容器内的相關資訊。

對于大部分對系統依賴較強的應用,應用的啟動程式需要擷取系統的記憶體、CPU 等相關資訊,進而進行相應的配置。當容器内的 /proc 檔案無法準确反映容器内資源的情況,會對上述應用造成不可忽視的影響。

例如對于一些 Java 應用,也存在啟動腳本中檢視 /proc/meminfo 動态配置設定運作程式的堆棧大小,當容器記憶體限制小于主控端記憶體時,會發生配置設定記憶體失敗引起的程式啟動失敗。對于 DPDK 相關應用,應用工具需要根據 /proc/cpuinfo 擷取 CPU 資訊,得到應用初始化 EAL 層所使用的 CPU 邏輯核。如果容器内無法準确擷取上述資訊,對于 DPDK 應用而言,則需要修改相應的工具。

簡而言之,容器啟動時,通過-v 将主控端上 LXCFS 的挂載點 /var/lib/lxc/lxcfs/proc/ 挂載到容器内部的虛拟 /proc 檔案系統目錄下。此時在容器内部 /proc 目錄下可以看到,一些列proc檔案,包括 meminfo, uptime, swaps, stat, diskstats, cpuinfo 等。具體使用參數如下:

為了簡化使用,pouch create 和 run 指令行提供參數 <code>--enableLxcfs</code>, 建立容器時指定上述參數,即可省略複雜的 <code>-v</code> 參數。

PouchContainer 支援 LXCFS 實作容器内 /proc 檔案系統的視圖隔離,将大大減少企業存量應用容器化的過程中原有工具鍊和運維習慣的改變,加快容器化進度。有力支撐企業從傳統虛拟化到容器虛拟化的平穩轉型。