【读书笔记】06 | 白话容器基础(二):隔离与限制

《深入剖析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)


猜你喜欢

转载自blog.51cto.com/pmghong/2398765