《深入剖析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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。