天天看点

lmctfy:让我用集装箱为你的程式打包

这项项目旨在提供一组以用户的意图为原点的高级api,来实现对容器概念的抽象化。这些创建的容器自身也通过继承也可以拥有了自己的容器、也能够被其他的用户程序所管理。

lmctfy 内包含一个c++库和一个cli(命令行界面程序)

<a target="_blank"></a>

编译本程序需要使用make和g++4.7。 lmcfy使用了c++11,所以需要支持这项功能的编译器。我们在ubuntu 12.04+ 上测试过编译。如果有为其他环境的编译提供支持的补丁,我们很高兴而且希望这越多越好。

lmctfy 依赖下列几个库,需要这些库存在于你的计算机系统里。

<a href="https://code.google.com/p/protobuf/" target="_blank">protocol buffers</a>

<a href="https://code.google.com/p/gflags/" target="_blank">gflags</a>

<a href="https://code.google.com/p/re2/" target="_blank">re2</a>

编译lmctfy的cli:

make -j &lt;线程数&gt; lmctfy

cli程序会生成在 bin/lmctfy/cli/lmctfy

编译lmctfy的库:

make -j &lt;线程数&gt; liblmctfy.a

库文件会生成在 bin/liblmctfy.a.

编译和运行所有的ui测试:

make -j &lt;线程数&gt; check

为了运行lmctfy,我们必须首先初始化计算机。这只需要运行一次就可以,而且一般是在计算机第一次启动时候就完成了。当cgroup的hierarchies已经挂载了,接下来通常一个空的配置会可以让lmctfy自动监测到目前的挂载。

lmctfy init ""

这样,机器就可以被lmctfy使用、进行容器的操作。

容器的命名系统简化了文件系统的路径,因为以后只需要一系列容器的继承(容器的容器、子容器、子子容器)就可以了───O(≧∇≦)O──── 。

容器名称允许的字符集:

英文字母+阿拉伯数字 ([a-za-z0-9]+)

下划线 (_)

横县 (-)

英文句号 (.)

绝对路径是从容器(比如是/sys/subcont)的根目录(/)开始计算的。容器的名字也可以是相对的(比如subcont)。一般地(除非特殊情况说明),都是沿用一般的文件路径方式。

例子

创建一个容器:

lmctfy create &lt;名称&gt; &lt;参数&gt;

例子 (创建一个内存限制在100mb的容器):

lmctfy create memory_only "memory:{limit:100000000}"

销毁一个容器:

lmctfy destroy&lt;名称&gt;

从根目录递归显示当前机器的所有容器:

lmctfy list containers -r /

你也可以只列出当前的子容器:

lmctfy list containers

在一台容器中运行命令:

lmctfy run &lt;名称&gt; &lt;命令行&gt;

例子:

lmctfy run test "echo hello world"

lmctfy run /test/sub bash

lmctfy run -n /test "echo hello from a daemon"

键入lmctfy help查看全部的命令和文档

lmctfy项目通过两个层(cl1、cl2)来实现一个容器栈。cl1围绕着驱动进程,并执行cl2制定的容器策略。cl1会为更高层创建和维护容器的抽象。她应当是唯一直接和内核交流以维护容器的层。 cl2发展和设定容器策略,她使用cl1来执行策略和操控容器。比如,cl2(后台进程)实现了一个策略:所有容器的cpu和内存使用总和不可以超过现提供的cpu和内存资源(以防止对内存资源的过度使用)。为了执行这条策略,她(cl2)会使用cl1(library/cli)来创建带这条内存限制规则的容器。另一条对应的策略可能包括了允许过度使用x%的机器资源或者对不同资源的多重层次控制。

lmcfty项目现在提供了cl1组件,cl2还没有实现。

现在只提供高性能cpu和内存隔离。在我们的路线图中我们还需要实现以下几项:

磁盘io隔离: 这部分几乎完成了,但是我们还缺少控制器和资源处理器。

网络隔离: 这部分和cgroup实现还在计划中。

命名空间支援: 给所有命名空间支援并且整合到相关的资源中。

根文件系统支援: 识别并建立根文件系统。

磁盘镜像: 可以导入和导出容器的根文件系统的镜像。

支持暂停/继续: 使用继承的freezer。

还原点恢复: 可以建立还原点并恢复到不同机器的容器中。

最基础的cl2 应当有一个容器策略来保证在机器不允许超载运行情况下的资源合理分配。我们的目标是cl2最终实现提供不同层次的服务。在这个框架下一些层次可以比其他的获得更多好的服务。

监控和统计支持。

管理功能和功能检查。

服务的质量保证和执行。

lmctfy 最初的设计和实现是在一个自定义的内核上(一个原生linux内核外加一些列自选的补丁)上。由此,一些特性在这些内核补丁上跑得最理想。但是lmctfy应该在没有他们得情况下正常运行。她应当监测可用得内核支援并且与之适应。我们已经在原生的 ubuntu 的 3.3 和 3.8 系列内核上测试过。如果你发现在其他版本内核下的问题,请汇报。

一些相关的内核补丁:

cpu 延时: 这个补丁为cpu hierarchy增加了cpu.lat的cgroup 文件。她限制了cgroup能预测的cpu唤醒延时时间。

cpu 柱状图统计: 这个补丁为cpuacct hierarchy增加了cpuacct.histogram cgroup 文件。她为cpu计划行为提供了多种柱状图方案。

oom 管理: 一系列的补丁,用于在内存用尽的情况下执行优先权。

  原文发布时间为:2013-10-04

本文来自云栖社区合作伙伴“linux中国”

继续阅读