关于容器技术

不羁的心 提交于 2019-12-02 16:12:53

容器技术主要包括Namespace和Cgroup这两个内核特性

Namespace又称为命名空间(也可翻译为名字空间),它主要做访问隔离,其原理是针对一类资源进行抽象,并将其封装在一起提供一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而它们彼此之间是不可见的,所以就可以做到访问隔离。

Cgroup是contrl group简称,又称为控制组,它主是要做资源控制,其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。

容器组成

容器=cgroup+namespace+rootfs+容器引擎(用户太工具)

Cgroup:资源控制

Namesapce:访问隔离

rootfs:文件系统隔离

容器引擎:生命令周期控制

Cgroup介绍

Cgroup中实现的子系统及其作用如下

devices:设备权限控制

cpuset:分配指定的CPU和内存节点

cpu:控制CPU占用率

cpuacct:统计CPU使用情况

memory:限制内存的使用上限

freezer:冻结(暂停)Cgroup中的进程

net_cls:配合tc(traffic controller)限制网络带宽

net_prio:设置进程的网络流量优先级

huge_tlb:限HugeTLB的使用

perf_event:允许Perf工具基于Cgroup分组做性能监测

Cgroup的接口和使用

挂载cgroupfs

[root@localhost ~]# mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset/

查看cgroupfs

[root@localhost etc]# ls /sys/fs/cgroup/cpuset/
cgroup.clone_children cpuset.cpu_exclusive cpuset.mem_exclusive cpuset.memory_pressure_enabled cpuset.sched_load_balance tasks
cgroup.event_control cpuset.cpus cpuset.mem_hardwall cpuset.memory_spread_page cpuset.sched_relax_domain_level
cgroup.procs cpuset.effective_cpus cpuset.memory_migrate cpuset.memory_spread_slab notify_on_release
cgroup.sane_behavior cpuset.effective_mems cpuset.memory_pressure cpuset.mems release_agent

创建cgroup

[root@localhost ~]# mkdir /sys/fs/cgroup/cpuset/child

通过mkdir创建一个新的目录,也创建了一个新的Cgroup

配置Cgroup

[root@localhost ~]# echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.cpus
[root@localhost ~]# echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.mems

 

使用能Cgroup
[root@localhost ~]# echo $$ > /sys/fs/cgroup/cpuset/child/tasks 

通过将进程ID写入tasks文件就可以把进程移动到这个Cgroup中,并且这个进程产生的所有子进程也会自动放在Cgroup里,这时Cgroup才真正起作用了,

Cgroup子系统介绍

cpuset子系统可以为一组进程分配指定的CPU和内存节点。

cpuset的主要接口如下

cpuset.cpus:允许进程使用的CPU列表(例如0~4,9)

cpuset.mems:允许进程使用的内存节点列表(例如0~1)

cpu子系统用于限制进程的CPU利用率

CPU比重分配:这个特性

CPU带宽限制

实时进程的CPU带宽限制

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!