Docker-资源隔离和限制实现原理

你好,我是无羡,你也可以叫我Hinsteny·Hisoka.

今天在这里,我主要想探索一下Docker容器实现各种资源如用户、域名、进程、网络的隔离机制以及CPU、内存的限制原理,以便我们在遇到相关容器问题时有更快、更准确的排查思路!

概览

为何要搞容器化?

  • 一开始为了在同一个电脑(操作系统)上部署多个APP,并且希望APP彼此间互不影响;
  • 诞生了虚拟化技术(虚拟机),通过虚拟程序,在主操作系统上启动运行多个独立的虚拟操作系统,进而再运行各自的APP.
  • 虚拟化是将整个操作系统加载到独立进程空间运行,有点太浪费资源,而Docker诞生了;

Build Once, Run Anywhere!
Docker 是一个软件平台,让您可以快速构建、测试和部署应用程序。Docker 将软件打包成名为容器的标准化单元,这些单元具有运行软件所需的所有功能,包括库、系统工具、代码和运行时。使用 Docker,您可以将应用程序快速部署和扩展到任何环境中,并且知道您的代码将运行。

容器化要怎么搞?

类别包含项关键技术
隔离UTS、IPC、PID、Network、Mount、UserNamespace
控制CPU、MemoryCgroups

Namespace介绍

Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。用官方的话来说,Linux Namespace 将全局系统资源封装在一个抽象中,从而使 namespace 内的进程认为自己具有独立的资源实例。这项技术本来没有掀起多大的波澜,是容器技术的崛起让它重新引起了大家的注意。

Cgroups介绍

Linux Cgroups 是Linux提供的一种用于隔离限制资源的机制,能够实现对资源(CPU、内存、磁盘I/O、网络等)进行使用量限制、优先级排序、资源使用量统计及进程状态控制。

如何实现资源隔离?

UTS–域名、主机名

UTS名称空间提供了两个系统标识符的隔离 — 主机名和NIS域名。

PID–进程

PID名称空间隔离进程ID号空间,这意味着不同PID命名空间中的进程可以使用相同的PID。PID名称空间允许容器提供诸如挂起/恢复容器中的进程集将容器迁移到新主机,同时在其中运行进程容器保持相同的PID。

新的PID名称空间中的PID从1开始,有点像独立系统,并调用fork(2)、vfork(2)或clone(2)将生产具有唯一的pid的工艺名称空间。

IPC–进程间通讯(用到的消息队列、共享内存)

每个IPC名称空间都有自己的System V IPC标识符集 以及它自己的POSIX消息队列文件系统。创建的对象IPC名称空间对所有其他进程可见的成员,但对其他IPC名称空间中的进程不可见。

Mount–文件系统

所看到的挂载列表的挂载名称空间提供了隔离每个名称空间实例中的进程。因此,进程在每个挂载名称空间实例将看到不同的独立目录层次结构。

User–系统用户、用户组

用户名称空间隔离与安全相关的标识符和属性,特别是用户id和组id、根目录、密钥和
能力。进程的用户和组用户命名空间内外的id可以不同。在特别是,进程可以具有普通的非特权用户ID在用户名称空间之外,同时具有用户ID命名空间内的0;换句话说,进程已经满了用户名称空间内的操作权限,但是对命名空间之外的操作没有特权。

Network–容器的网络隔离与通讯

网络名称空间提供了对系统资源的隔离与网络相关:网络设备,IPv4和IPv6协议栈,IP路由表,防火墙规则,/proc/net
目录(它是到/proc/PID/net的符号链接)/sys/class/net目录,/proc/sys/net下的各种文件,port数字(套接字),等等。此外,还有网络名称空间隔离UNIX域抽象套接字命名空间。

如何实现资源控制?

CPU–计算资源

1、CPU份额控制

cpu.shares 按照份额比例分配CPU执行时间

如果同一个cgroup中的task-A设置值为100,task-B设置为200,那task-B获得是CPU时间就是task-A的两倍,不过前提是CPU资源达到了竞争状态;

2、CPU周期控制

cpu.cfs_period_us 指定CPU资源重分配的周期;
cpu.cfs_quota_us 指定在上述周期内,进程能分到的CPU执行时间;

cpu-period 和 cpu-quota 的单位为微秒(μs)。cpu-period 的最小值为 1000 微秒,最大值为1秒(10^6 μs),默认值为 0.1 秒(100000 μs)。cpu-quota 的值默认为 -1,表示不做控制。

Memory–内存资源

memory.limit_in_bytes 设置最大可用的内存大小(包含page cache).

实践

参考资料

Red Hat–Resource Management Guide: link

NameSpace-man7: link

Docker资源控制: link

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值