暖暖的咖啡吧

导航

容器技术-docker实现原理之控制组概念(cgroups)

Docker容器与虚拟机的区别

虚拟机实现资源隔离的方法是利用一个独立的Guest OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的. 例如,为了虚拟化内存,Hypervisor会创建一个shadow page table,正常情况下,一个page table可以用来实现从虚拟内存到物理内存的复制.

相比虚拟机实现资源限制和环境隔离的方案,Docker就显得简练很多,它不像虚拟机一样重新加载一个操作系统内核,而是利用Linux内核特性实现的隔离,运行容器的速度几乎等同于直接启动进程。

关于Docker实现原理,简单总结如下:

  • 使用镜像管理功能,利用Docker的镜像分层、写时复制、内容寻址、联合挂载技术实现了一套完整的容器文件系统及运行环境,再结合镜像仓库,镜像可以快速下载和共享,方便在多环境部署。
  • 使用CGroups限制系统的资源使用,比如一台16核32GB的机器上只让容器使用2核4GB。使用CGroups还可以为资源设置权重,监控并计算使用量,操控任务(进程或线程)启停.
  • 使用Namespaces实现了系统环境的隔离,Namespaces允许一个进程以及它的子进程从获得的宿主机内核资源(网络栈、进程列表、挂载点等)里获得一个仅自己可见的隔离区域,让同一个Namespace下的所有进程可以相互通信,但对外界进程一无所知,仿佛运行在一个独占的操作系统中.

什么是Cgroups控制组?

 

为什么要有CGroups?

CGroups技术最初是Google开发的,在2008年1月份加入到Linux 2.6.24版本的内核中. CGroups主要提供统一的接口来管理进程或整个操作系统级别的虚拟化(其中就已经包括Linux容器)

  • 资源限制:限制进程使用的内存,CPU等资源上限.
  • 优先级:一个或多个控制组可以分配更多或更少的CPU,I/O
  • 记录:CGroups资源使用情况会被记录并计算.
  • 控制:进程或进程组可以被冻结,停止或重启.

Linux的CGroups控制组技术简单说就是一系列的控制器管理技术. 比如,内存控制器,CPU控制器.

 

怎样访问及管理控制组资源?

(Debian) # apt-get install libcgroup1 cgroup-tools

 

posted on 2019-07-19 10:38  一杯雾气袅袅的咖啡  阅读(363)  评论(0)    收藏  举报