您好,登錄后才能下訂單哦!
《深入剖析Kubernetes - 06 | 白話容器基礎(二):隔離與限制》
1、隔離
虛擬機VM與 容器 docker的主要區別在于,虛擬機依賴 Hypervisor 層實現資源隔離和虛擬化,而容器的實現都是依賴OS 本身
虛擬機VM 在不做優化的情況下,本身就會占用100-200M 的內存,另外如果涉及到宿主機一些底層調用,都必須經過虛擬化軟件的攔截和處理,這里會多一層性能損耗,主要體現在網絡 和磁盤 I/O
容器的隔離機制也不是十全十美,最大的問題就是隔離不徹底,主要體現在:
(1) 例如在容器內執行free、top 等命令,看到的數據都是宿主機上面的信息,原因是 proc 并沒有隔離;另外一個例子,很多應用程序運行在容器中都不能很好的識別內存、CPU的限制,典型的如 java
(2) 雖然每個容器可以通過mount namespace隔離的機制掛載不同的操作系統文件,但底層都是基于同一個操作系統(同一個操作系統內核),這就意味著在windows 上運行linux容器,或者低版本linux宿主機上運行高版本linux容器都是不可以的
2、限制 (cgroups)
通過cgroups 實現對一個進程組的資源使用上限進行限制,如內存、cpu、網絡帶寬、磁盤等
Cgroups 給用戶暴露出來的操作接口是文件系統,即它以文件和目錄的方式放在/sys/fs/cgroup 路徑下
root@ubuntu:~#?mount?-t?cgroup cgroup?on?/sys/fs/cgroup/systemd?type?cgroup?(rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd) cgroup?on?/sys/fs/cgroup/hugetlb?type?cgroup?(rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup?on?/sys/fs/cgroup/memory?type?cgroup?(rw,nosuid,nodev,noexec,relatime,memory) cgroup?on?/sys/fs/cgroup/cpuset?type?cgroup?(rw,nosuid,nodev,noexec,relatime,cpuset) cgroup?on?/sys/fs/cgroup/freezer?type?cgroup?(rw,nosuid,nodev,noexec,relatime,freezer) cgroup?on?/sys/fs/cgroup/pids?type?cgroup?(rw,nosuid,nodev,noexec,relatime,pids) cgroup?on?/sys/fs/cgroup/net_cls,net_prio?type?cgroup?(rw,nosuid,nodev,noexec,relatime,net_cls,net_prio) cgroup?on?/sys/fs/cgroup/devices?type?cgroup?(rw,nosuid,nodev,noexec,relatime,devices) cgroup?on?/sys/fs/cgroup/perf_event?type?cgroup?(rw,nosuid,nodev,noexec,relatime,perf_event) cgroup?on?/sys/fs/cgroup/cpu,cpuacct?type?cgroup?(rw,nosuid,nodev,noexec,relatime,cpu,cpuacct) cgroup?on?/sys/fs/cgroup/blkio?type?cgroup?(rw,nosuid,nodev,noexec,relatime,blkio)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。