容器基础(二):隔离与限制

本文探讨了Linux容器中的隔离技术,通过Namespace实现进程视图的隔离,而Docker利用此技术进行资源管理。尽管容器提供敏捷性和高性能,但其隔离性相比虚拟机并不彻底,多个容器共享同一宿主机内核。此外,介绍了Cgroups用于限制容器资源使用,如CPU、内存等,但Cgroups在资源限制方面存在不足,如/proc文件系统无法反映容器内的资源使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

隔离

Namespace:在Linux容器中用来实现“隔离”的技术手段,它实际上修改了应用进程看待整个计算机“视图”即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。 但对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别,都由宿主机操作系统统一管理,只不过这些被隔离的进程拥有额外设置过的Namespace参数。而Docker项目在这里扮演的角色,更多的是旁路式的辅助和管理工作。

虚拟机技术的实现,它里面必须运行一个完整的Guest OS 才能执行用户的应用进程,这就不可避免地带来了额外的资源消耗和占用。相比之下,容器化的用户应用,却是宿主机上的普通进程,不会带来虚拟化带来的性能损耗;另外,使用Namespace作为隔离手段的容器并不需要单独的Guest OS, 这使得容器额外的资源占用几乎可以忽略不计。

敏捷” 和“高性能”是容器相较于虚拟机最大的优势,也是它能够在PaaS这种更细粒度的资源管理平台上大行其道的重要原因。

但这也为容器技术带来了不足之处,基于Linux Namespace的隔离机制相比于虚拟化,最主要的问题就是:隔离得不彻底

首先,既然容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的还是同一个宿主机的操作系统内核。

其次,在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子就是:时间。

限制

Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等。

Linux Cgroups 的设计还是比较易用的,它就是一个子系统目录加上一组资源限制文件的组合。

Cgroups 对资源的限制能力也有很多不完善的地方,被提及最多的是/proc文件系统的问题。Linux下的/proc目录存储的是记录当前内核运行状态的一系列特殊文件,用户可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如CPU使用情况、内存占用率等,这些文件也是top指令查看系统信息的主要数据来源。

如果在容器里执行top指令,它显示的信息是宿主机的CPU和内存数据,而不是当前容器的数据。造成这个问题的原因就是,/proc文件系统并不知道用户通过Cgroups给这个容器做了什么样的资源限制,即:/proc文件系统不了解Cgroups限制的存在。

在生产环境中,这个问题必须进行修正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值