docker內部的資源限制
namespace的資源隔離
使用clone()在創建的新進程中同時創建namespacen
查看/proc/[pid]/ns文件n
通過setns()加入一個已存在的namespacen
通過unshare()在原先進程上進行namespace隔離n
fork()系統調用n
(1)UTS(主機名與域名)
提供了主機和域名的隔離n
進程間通信涉及到的IPC資源包括常見的信號量、消息隊列n
(3)PID(進程編號)
可以實現兩個不同的namespace下的進程存在相n
(4)Network(網路設備、網路棧、埠等)
網路資源的隔離,包括網路設備、IPv4、IPv6協議棧、IP路由表、防火牆、/proc/net目錄、/sys/class/net目錄、套接字等n
(5)Mount(掛載點)
通過對文件系統的掛載點,起到隔離的作用n
(6)User(用戶和用戶組)
包括標識符和屬性,包括用戶ID、用戶組ID、root目錄、key以及特殊許可權。n
cgroups資源限制
cgroups最初的名字為process container,由Google工程師提出的,屬於Linux內核提供一個機制,這種機制將根據需求把一系列任務及其子任務整合(或分隔)到按資源劃分到不同的組內,從而為系統資源管理提供一個統一的框架。
功能:
(1)資源限制:主要是對資源使用的總額進行限制;
(2)優先順序分配:通過分配的CPU時間片數量及磁碟IO帶寬大小,控制者任務運行的優先順序;
(3)資源統計:統計資源的使用量,(CPU使用時長、內存用量等)
(4)任務控制:對任務進行掛起或恢復等操作。
實現方式
本質上是鉤子原理,當任務在運行時,當涉及到某些資源時,就會觸發鉤子上附帶的子系統進行檢測。
如果當資源超過限制及限額之後時,需要docker設置OOM Control(內存超限控制),那麼進程就會收到OOM的信號,並且結束任務,否則進程就會掛起,進入到睡眠狀態,直到cgroup中其他進程釋放了足夠的內存資源為止。
推薦閱讀:
※Docker 的應用場景在哪裡?
※密碼1212@KubeCon北美峰會幹貨直播培訓課
※[52ABP實戰課程系列]Docker&Ubuntu從入門到實戰開課啦~
※基於Docker、NodeJs實現高可用的服務發現
TAG:Docker |