Docker学习(三)namespace and cgroups

来源:互联网 发布:捷豹车钥匙数据 编辑:程序博客网 时间:2024/06/15 23:43

NameSpace


pid namespace

不同用户的进程就是通过pid namespace隔离开的,且不同的namespace中可以有相同的pid。具有以下特征:
  • 每个namespace中的pid是有自己的pid=1的进程(类似/sbin/init进程)
  • 每个namespace中的进程只能影响自己的同一个namespace或子namespace中的进程
  • 因为/proc包含正在运行的进程,因此在container中的pseudo-filesystem的/proc目录只能看到自己namespace中的进程
  • 因为namespace允许嵌套,父namespace可以影响子namespace的进程,所以子namespace的进程可以在父namespace中看到,但是具有不同的pid
正是因为以上的特征,所有的LXC进程在docker中的父进程为docker进程,每一个LXC进程具有不同的namespace。同时由于允许嵌套,因此可以很方便的实现LXC in LXC。

mnt namespace

类似chroot,将一个进程放到一个特定的目录执行。mnt namespace允许不同namespace的进程看到的文件结构不同,这样每个namespace中的进程多看到的文件目录就被隔离开了。同chroot不同,每个namespace中的Container在/proc/mounts的信息值包含所在namespace的mount point。

net namespace

网络隔离是通过net namespace实现的,每个net namespace有独立的network devices,IP addresses,IP routing tables,/proc/net目录。这样每个container的网络就能隔离开。docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge连接在一起。

ipc namespace

container中的进程交互还是采用linux常见的进程交互方法(interprocess communication - IPC),包括常见的信号量、消息队列和共享内存。然而同VM不同,container的进程间交互实际上还是host上具有相同pid namespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息 - 每个IPC资源有一个唯一的32bit ID。

uts namespace

UTS(“UNIX Time - sharing System”)namespace允许每个container拥有独立的hostname和domain name,使其在网络上可以被视作一个独立的节点而非host上的一个进程。

user namespace

每个container可以有不同的user和group id,也就是说可以以container内部的用户在container内部执行程序而非host上的用户。

Control Groups(cgroups)

cgroups是乡里对资源的配额和度量。cgroyups的使用非常简单,提供类似的文件接口,在/cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中信建task文件,并将pid写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中新建子subsystem,{子系统前缀}.{资源项}是典型的配制方法,eg:
memory.usage_in_bytes及定义了该group在subsystem memory中的一个内存限制选项。另外,cgroups中的subsystem可以随意组合,一个subsystem可以再不同的group中,也可以一个group包含多个subsystem 。
我们主要关心cgroups可以限制哪些资源,即有哪些subsystem是我们关心的。

cpu

在cgroups中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义CPU轮转的优先级,因此具有较高CPU优先级的进程会更可能得到CPU运算。
通过将参数写入cpu.shares,即可定义改cgroups的CPU优先级。

cpusets

cpusets定义了有几个CPU可以被这个group使用,或那几个CPU可以共这个group使用。在某些场景下,单CPU绑定可以防止多核键缓存切换,从而提高效率

memory

内存相关的限制

blkio

block IO相关的统计和限制,byte/operation统计和限制(IOPS等),读写速度限制等,但是这里主要统计的都是同步IO

net_cls,cpuacct,devices,freezer等其他可管理项。

0 0
原创粉丝点击