码头工人底层技术:
<强>码头工人底层的2个核心技术分别是名称空间和对照组强>
名称空间:是容器虚拟化的核心技术,用来隔离各个容器,可解决容器之间的冲突。
主要通过以下六项隔离技术来实现:
有两个伪文件系统:/proc和/sys/
<李> UTS:允许每个容器拥有独立的主机名(主机名)和域名(域名),使其在网络上可以被视作一个独立的节点而非主机上的一个进程。李> <李> IPC: contaner中进程交互还是采用linux常见的进程间交互方法,包括常见的信号量,消息队列和共享内存.container的进程间交互实际上还是主机上具有相同pid中的进程交互。李> <李> PID:不同用户的进程就是通过PID namesapce隔离开的,且不同名称空间中可以有相同PID。所有的LXC (linux容器)进程在码头工人中的父进程为码头工人进程,每个LXC进程具有不同的名称空间。李> <李> NET:不同用户的进程就是通过pidnamespace隔离开的,且不同名称空间中可以有相同pid。所有的LXC进程在码头工人中的父进程为码头工人进程,每个LXC进程具有不同的名称空间。李> <李> MNT:文件系统的挂载点。李> <李> USRE:每个集装箱可以有不同的用户和groupid,也就是说可以在容器内部用容器内部的用户执行程序而非主机上的用户。李>
引用><代码>只要解耦了这6项,其他系统资源即便有共用的情况,计算机也认为是在两个不同的系统中。代码>cgroup(控制程序对资源的占用)
实现cgroup是的主要目的是为不同用户层面的资源管理,提供一个统一化的接口。从单个进程的资源控制到操作系统层面的虚拟化。cgroup的作用:
引用>
1)资源的限制:cgroup可以对进程组使用的资源总额进行限制。
2)优先级分配:通过分配的cpu时间片数量及磁盘IO带宽大小,实际上就是相当于控制了进程运行的优先级
3)资源统计:cgroup可以统计系统资源使用量。比如cpu使用时间,内存使用量等。
可用于按量计费。
4)进程控制:可以对进程组执行挂起,恢复等操作。cgroup的应用:
<强> 1)内存和交换分区的限制:强>
容器内包括两个部分:物理内存和交换<代码>在码头工人中可以通过参数控制容器内存的使用: - m或——记忆:设置内存的使用限额 ——memory-swap:设置交换(交换分区)的使用限额代码>//基于centos镜像,限制内存为200米,交换分区的内存为300
<代码> [root@sqm-docker01 ~] #码头工人- - m 200——memory-swap 300运行centos 代码>进入容器查看限制的内存:
<代码> [root@05a0be7b870a/] #猫/sys/fs/cgroup/内存/memory.limit_in_bytes 209715200 #显示的是字节 [root@05a0be7b870a/] #猫/sys/fs/cgroup/内存/memory.memsw.limit_in_bytes 314572800 代码><强> 2)容器对cpu限制:强>
通过- c或者——cpu配额设置容器实验cpu的权重。如果不设置默认是1024 .<代码>//基于centos镜像,运行一个容器,名字为containerB, cpu权重限制为512: (root@sqm-docker01 ~) #码头工人————名字containerB - c 512 centos运行 [root@b2cf9f28ce1d/] #猫/sys/fs/cgroup/cpu/cpu.shares 512年代码><强> 3)限制容器的阻塞io(磁盘的读写):强>
个基点:每秒读写的数据量每秒.byte
iops:每秒io的次每秒数io。——device-read-bps:设置读取设备的bps
——device-write-bps:设置写入设备的bps——device-read-iops:设置读取设备的iops
引用>
——device-write-iops:设置写入设备的iops<代码>//创建一个容器名为甲壳,并限制该磁盘每秒写入的数量为为30 mb。 (root@sqm-docker01 ~) #码头工人运行————名字甲壳device-write-bps sda: 30 mb centos 代码><强>写入数据进行测试:强>
参数解释:
infile=从/dev/0中提取
输出文件=自定义一个名称
b=1米文件大小为1 m
数=800总共写800次。
oflag=直接:用来指定目录IO方式写文件,这样才会使——device-write-bps生效。码头工人底层技术名称空间,Cgroup应用