docker資源隔離實現方式

2022-08-18 07:06:09 字數 1360 閱讀 8688

預設情況下,乙個容器沒有資源限制,幾乎可以使用宿主主機的所有資源。

docker提供了控制記憶體、cpu、block io。但是實際上主要是namespace和cgroup控制資源的隔離。

docker的隔離性主要運用namespace 技術。傳統上linux中的pid是唯一且獨立的,在正常情況下,使用者不會看見重複的pid。然而在docker採用了namespace,從而令相同的pid可於不同的namespace中獨立存在。如,a container 之中pid=1是a程式,而b container之中的pid=1同樣可以是a程式。雖然docker可透過namespace的方式分隔出看似是獨立的空間,然而linux核心(kernel)卻不能namespace,所以即使有多個container,所有的system call其實都是通過主機的核心處理,這便為docker留下了不可否認的安全問題。

namespace(命名空間)可以隔離哪些

使用namespace進行容器的隔離有什麼缺點呢?

最大的缺點就是隔離不徹底

1)容器知識執行在宿主機上的一種特殊的程序,那麼多個容器之間使用的就還是同乙個宿主機的作業系統核心

2)在linux核心中,有很多資源和物件是不能被namespace化的,最典型的例子是:時間即如果某個容器修改了時間,那整個宿主機的時間都會隨之修改

3)容器給應用暴露出來的攻擊面比較大,在生產環境中,沒有人敢把執行在物理機上的linux容器暴露在公網上

linux的 cgroups

強大核心工具cgroups

cgroups是linux的另外乙個強大的核心工具,有了cgroups,不僅可以限制被namespace隔離起來的資源,還可以為資源設定權重、計算使用量、操控任務(程序或縣城)啟停等。說白了就是:cgroups可以限制、記錄任務組所使用的物理資源(包括cpu,memory,io等),是構建docker等一系列虛擬化管理工具的基石。

cgroups 的作用

cgroups 為不同使用者層面的資源管理提供了乙個統一介面,從單個的資源控制到作業系統層面的虛擬化,cgroups提供了4大功能。

cgroups可以對任務使用的資源總額進行限制。

如 設定應用執行時使用的記憶體上限,一旦超過配額就發出oom提示

通過分配的cpu時間片數量以及磁碟io頻寬大小,實際上就相當於控制了任務執行的優先順序

cgroups可以統計系統的資源使用量

如cpu使用時長,記憶體用量等,這個功能非常適用於計費

cgroups 可以對任務進行掛起、恢復等操作

Docker安全之使用者資源隔離

namespace 隔離內容 核心版本 uts主機名與網域名稱 linux 2.6.19 ipc訊號量,訊息佇列和共享記憶體 linux 2.6.19 pid程序編號 linux 2.6.24 network 網路裝置,網路棧,埠 始於linux 2.6.24 完成於 linux 2.6.29 mo...

yarn資源隔離

yarn框架原理見 大資料處理離不開hadoop集群的部署和管理,對於本來硬體資源就不多的創業團隊來說,做好資源的共享和隔離是很有必要的,畢竟不像bat那麼豪,那麼怎麼樣能把有限的節點同時分享給多組使用者使用而且互不影響呢,我們來研究一下yarn多佇列做資源隔離 使用過第一代hadoop的同學應該比...

Hadoop YARN資源隔離技術

yarn對記憶體資源和cpu資源採用了不同的資源隔離方案。對於記憶體資源,它是一種限制性資源,它的量的大小直接決定應用程式的死活,因為應用程式到達記憶體限制,會發生oom,就會被殺死。cpu資源一般用cgroups進行資源控制,cgroups控制資源測試可以參見這篇博文cgroups控制cpu,記憶...