关于 Linux containers 配置文件简单介绍

1.Cgroup部分(所有Cgroup子系统的配置参数均可以通过lxc-cgroup 命令进行动态获得或者调整)

LXC采用Cgroup来对容器进行资源管理,因此Cgroup的各个子系统均可以使用。实际上使用LXC之前,必须执行mount none -t cgroup /cgroup 挂载cgroup,或者采用echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab让系统每次启动自动挂载Cgroup。这样以来Cgroup的所有子系统自动挂载到了一个hierarchy,LXC在创建容器的时候就在/ group下创建一个子group以实现对容器的资源控制,我们就可以根据需要设定相应子系统的参数来达到目的。

Cgroup部分的配置都是以lxc.cgroup.[subsystem name].key=value的形式出现的.例如:lxc.cgroup.cpu.shares=512 lxc.cgroup.cpuset.cpus=1.2

下面介绍下用到的Cgroup的子系统的用法(更多关于Cgroup的介绍,请到RedHat官方文档网上下载)

cpu 子系统调度对 cgroup 的 CPU 访问。可根据以下参数调度对 CPU 资源的访问,每个参数都独立存
在于 cgroup 虚拟文件系统的伪文件中:

cpu.shares
包含用来指定在 cgroup 中的任务可用的相对共享 CPU 时间的整数值。例如:在两个 cgroup 中都
将 cpu.shares 设定为 1 的任务将有相同的 CPU 时间,但在 cgroup 中将 cpu.shares 设定为 2
的任务.

特别说明:根据实验结果以及源代码分析,根目录的shares值默认是1024,同一层次的task和task group平等的接受调度。也就说在根group下有task A 子group B 子group C,如果B的shares值为512,C的shares值为1024,那么task A 和group B 的进程和 group C中的进程CPU份额大致应该是2:1:2。(当然如果task或者group B用不到那么多份额,会自动让给其他task或group)

cpuset 子系统为 cgroup 分配独立 CPU 和内存节点。可根据用以下参数指定每个 cpuset,每个参数
都在控制组群虚拟文件系统中有单独的伪文件:

cpuset.cpus(强制)
指定允许这个 cgroup 中任务访问的 CPU。这是一个用逗号分开的列表,格式为 ASCII,使用小横
线("-")代表范围,例如:cpuset.cpus=1,2-4

特别说明:单线程程序即使分配多个核心也只会用一个,对于有fork调用的程序,系统会做SMP均衡,但是所有进程仍然在限定的CPU上运行。

cpuset.mems(强制)
指定允许这个 cgroup 中任务可访问的内存节点。这是一个用逗号分开的列表,格式为 ASCII,使
用小横线("-")代表范围,例如:cpuset.mems=1,3-5

特别说明:此选项在SMP架构的机器不需要设置,机器只有一个内存节点。主要针对NUMA的机器使用

memory 子系统自动生成 cgroup 中任务使用的内存资源报告,并设定由那些任务使用的内存限制:

memory.limit_in_bytes
设定用户内存的最大量(包括文件缓存)。如果没有指定单位,则将该数值理解为字节。

特别说明:在有swap空间的机器上单独设置这个选项,malloc超过限制值,程序仍然能够可以运行,原因在于程序将内存的数据交换到了swap空间,不会超限。可以使用/sbin/swapoff关掉swap空间(不推荐)

memory.memsw.limit_in_bytes
设定最大内存与 swap 用量之和。如果没有指定单位,则将该值解读为字节。

特别说明:设置这个选项之前,必须设定memory.limit_in_bytes,且memory.limit_in_bytes必须小于或等于此选项的值。在有swap空间的机器上,设置了这个选项,可以严格控制程序对内存的使用,只要malloc超过这个值,就会被系统kill掉

 blkio子系统

块 I/O(blkio)子系统控制并监控 cgroup 中的任务对块设备的 I/O 访问。在部分这样的伪文件中写入值可限制访问或者带宽,且从这些伪文件中读取值可提供 I/O 操作信息

blkio.weight
指定 cgroup 默认可用访问块 I/O 的相对比例(加权),范围在 100 到 1000。这个值可由具体设备的 blkio.weight_device 参数覆盖。此数值跟cpu.share类似,以访问时间的比例的形式起作用。默认根group的值为1000.如果再根下面建立两group,分别设置weight为500和1000,那么IO时间比值为1:2.更多的说明可以参考内核文档。

 blkio.weight_device
指定对 cgroup 中可用的具体设备 I/O 访问的相对比例(加权),范围是 100 到 1000。这个值的格式为major:minor weight,其中 major 和
minor 是在《Linux 分配的设备》中指定的设备类型和节点数,我们也称之为 Linux 设备列表,您
可以参考 http://www.kernel.org/doc/Documentation/devices.txt

blkio.throttle.read_bps_device

针对特定的 major:minor 设备的读bps的上限限制(bps指byte per second,即每秒的byte数)

blkio.throttle.write_bps_device

针对特定的 major:minor 设备的写bps的上限限制

 blkio.throttle.read_iops_device

针对特定的 major:minor 设备的读ios的上限限制(ios指io per second,即每秒的io次数)

blkio.throttle.write_iops_device

针对特定的 major:minor 设备的写ios的上限限制

此四个参数可以同blkio.weight blkio.weight_device以前使用,系统将同时满足着些限制。

2.network部分
network部分的配置均以lxc.network开头.

lxc.network.type指定用于容器的网络类型:

empty:新的网络空间会为容器建立,但是没有任何网络接口

veth:新的网络空间会为容器建立,容器将链接到lxc.network.link定义的网桥上,从而与外部通信。网桥必须在预先建立。

macvlan:新的网络空间会为容器建立,一个macvlan的接口会链接到lxc.network.link上。

phys:新的网络空间会被建立,然后lxc.network.link指定的物理接口会被分配给容器

lxc.network.flags用于指定网络的状态

up:网络处于可用状态

lxc.network.link用于指定用于和容器接口通信的真实接口,比如一个网桥br0

lxc.network.name用于指定容器的网络接口的名字,与宿主接口不在一个命名空间。如果不指定,lxc为自动分配一个

lxc.network.hwaddr用于指定容器的网络接口的mac地址

lxc.network.ipv4用于指定容器的网络接口的ipv4地址,如果不设置或者设为0.0.0.0则表示,容器将通过dhcp的方式获得ip地址

lxc.network.ipv6用于指定容器的网络接口的ipv6地址

3.rootfs部分
lxc.rootfs用于指定容器的虚拟根目录,设定此项以后,容器内所有进程将会把此目录根目录,不能访问此目录之外的路径,相当于chroot的效果

 

PS:用这几个部分已经可以配一个比较完整的应用容器了,提供了cpu memory IO资源控制,提供单独的网络、根目录空间,再结合Loop文件或者LVM做一下硬盘限制就更好了。

时间: 2024-10-25 16:02:27

关于 Linux containers 配置文件简单介绍的相关文章

Linux curl使用简单介绍

<转自:http://www.cnblogs.com/-clq/archive/2012/01/29/2330827.html> Linux curl使用简单介绍[日期:2008-01-29]     来源:Linux公社  作者:notech Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧! $ curl http://www.linuxidc.com 回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了  

Linux curl使用简单介绍 (转)

Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧! $ curl http://www.linuxidc.com 回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了 ~ 2) 嗯,要想把读过来页面存下来,是不是要这样呢? $ curl http://www.linuxidc.com > page.html 当然可以,但不用这么麻烦的! 用curl的内置option就好,存下http的结果,用这个option: -

Linux集群和自动化维2.1 Shell和Python语言的简单介绍

第2章 生产环境下的Shell和Python脚本 接触Linux系统十多年了,Shell和Python脚本都已经完全融入笔者的生活中了.虽然Shell脚本只是一个简单的解释型语言,不受开发人员的重视,但对于系统运维工程师来说,它的作用举足轻重,它就像我们的瑞士军刀一样,可以帮助我们简化日常的工作并减少工作量.在系统维护工作中,Shell脚本常常能比用C或C++语言编写的程序更快地解决相同的问题,此外,Shell脚本具有很好的可移植性,有时跨越Unix与POSIX兼容的系统,只须略作修改即可,甚至

简单介绍一下Linux下的FTP命令

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   我是用虚拟机装了Linux,真实系统是Windows XP,在Windows XP下用Serv-u软件架设了FTP服务器,然后我们就可以在虚拟机的Linux下登录该FTP服务器下载或上传文件了,不同的仅是在Linux下是在命令行里输入相关FTP命令来完成的,应该也有像FlashFXP.CuteFTP这一类的Linux专用软件,不过我孤陋寡闻,不了解,也就不误人子

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息,包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题.因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux下软

Android init.rc文件简单介绍_Android

Android init.rc文件简单介绍 init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件. 该文件在ROM中是只读的,即使有了root权限,可以修改该文件也没有.因为我们在根目录看到的文件只是内存文件的镜像.也就是说,android启动后,会将init.rc文件装载到内存.而修改

Android init.rc文件简单介绍

Android init.rc文件简单介绍 init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件. 该文件在ROM中是只读的,即使有了root权限,可以修改该文件也没有.因为我们在根目录看到的文件只是内存文件的镜像.也就是说,android启动后,会将init.rc文件装载到内存.而修改

web.config 简单介绍

web 叫做web.config当然就是配置网站用的啦 很多东西都可以在这里设置下面简单介绍一下web.config是一个xml文档(现在越来越流行用xml做配置文件了)根元素是configuration 然后包含一个system.web节点 在第三层次是对站点的各种设置web.config可以设置的标签非常之多,那么,简单的做个介绍,当用到的时候可以去好好查阅在web系统中自定义的设置 我经常使用它来保存数据库的一些相关连接数据 之后读取很方便关于浏览器的设置 比如是否允许JavaApplet

PHP.ini安全配置检测工具pcc简单介绍

  这篇文章主要介绍了PHP.ini安全配置检测工具pcc简单介绍,这款工具非常实用,可以检测PHP配置文件中得配置项是否存在安全隐患,并提出相应的配置建议,需要的朋友可以参考下 概述 前一段时间,在工作中遇到了一个开源程序,该程序主要用来检测PHP配置文件中得配置项是否存在安全隐患,并提出相应的配置建议,使PHP程序更加安全. 使用 这个程序使用起来非常简单,大家可以自行使用.下面是程序运行截图: