容器基礎(二) 隔離與限制

2021-09-30 21:02:02 字數 1313 閱讀 3500

隔離

namespace:在linux容器中用來實現「隔離」的技術手段,它實際上修改了應用程序看待整個計算機「檢視」即它的「視線」被作業系統做了限制,只能「看到」某些指定的內容。但對於宿主機來說,這些被「隔離」了的程序跟其他程序並沒有太大區別,都由宿主機作業系統統一管理,只不過這些被隔離的程序擁有額外設定過的namespace引數。而docker專案在這裡扮演的角色,更多的是旁路式的輔助和管理工作。

虛擬機器技術的實現,它裡面必須執行乙個完整的guest os 才能執行使用者的應用程序,這就不可避免地帶來了額外的資源消耗和占用。相比之下,容器化的使用者應用,卻是宿主機上的普通程序,不會帶來虛擬化帶來的效能損耗;另外,使用namespace作為隔離手段的容器並不需要單獨的guest os, 這使得容器額外的資源占用幾乎可以忽略不計。

敏捷」 和「高效能」是容器相較於虛擬機器最大的優勢,也是它能夠在paas這種更細粒度的資源管理平台上大行其道的重要原因。

但這也為容器技術帶來了不足之處,基於linux namespace的隔離機制相比於虛擬化,最主要的問題就是:隔離得不徹底

首先,既然容器只是執行在宿主機上的一種特殊的程序,那麼多個容器之間使用的還是同乙個宿主機的作業系統核心。

其次,在linux核心中,有很多資源和物件是不能被namespace化的,最典型的例子就是:時間。

限制

linux cgroups 的全稱是 linux control group。它最主要的作用,就是限制乙個程序組能夠使用的資源上限,包括cpu、記憶體、磁碟、網路頻寬等。

linux cgroups 的設計還是比較易用的,它就是乙個子系統目錄加上一組資源限制檔案的組合。

cgroups 對資源的限制能力也有很多不完善的地方,被提及最多的是/proc檔案系統的問題。linux下的/proc目錄儲存的是記錄當前核心執行狀態的一系列特殊檔案,使用者可以通過訪問這些檔案,檢視系統以及當前正在執行的程序的資訊,比如cpu使用情況、記憶體佔用率等,這些檔案也是top指令檢視系統資訊的主要資料**。

如果在容器裡執行top指令,它顯示的資訊是宿主機的cpu和記憶體資料,而不是當前容器的資料。造成這個問題的原因就是,/proc檔案系統並不知道使用者通過cgroups給這個容器做了什麼樣的資源限制,即:/proc檔案系統不了解cgroups限制的存在。

在生產環境中,這個問題必須進行修正。

容器基礎(二)之程序的資源限制

結論 對於 docker 等大多數 linux 容器來說,cgroups 技術是用來製造約束的主要手段,而 namespace 技術則是用來修改程序檢視的主要方法。在介紹完容器的 隔離 技術之後,我們再來說說容器的 限制 問題。我還是以pid namespace為例,來給你解釋這個問題。雖然容器內的...

容器技術與資源隔離

簡單的講就是,linux namespace 允許使用者在獨立程序之間隔離 cpu 等資源。程序的訪問許可權及可見性僅限於其所在的 namespaces 因此,使用者無需擔心在乙個 namespace 內執行的程序與在另乙個 namespace 內執行的程序衝突。甚至可以同一臺機器上的不同容器中執行...

Flutter 基礎篇(十七) 尺寸限制容器

在flutter中,提供了constrainedbox sizedbox unconstrainedbox aspectratio來限制子元素的尺寸。constrainedbox主要用於對子元件進行額外的約束,比如,約束子元件的最小高度 class constrainedwidget extends...