Linux容器工具(LXC)的建立和管理技巧

Linux容器工具(LXC)的建立和管理技巧

最初的 LXC 技术是由 IBM 研发的,目前已经进入 Linux 内核主线,这意味着 LXC 技术将是目前最有竞争力的轻量级虚拟容器技术,本文将循序渐进地介绍在 Linux 容器的建立和管理方法。本文使用的 Linux 发行版本是 Ubuntu 12.04 。

LXC 项目由一个 Linux 内核补丁和一些用户空间(userspace) 工具组成。这些工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。2.6.29 版本后的 Linux 内核版本已经包含该补丁提供的大部分功能。所以强烈建议使用最新的内核源代码。LXC 在资源管理方面依赖 Linux 内核的 cgroups (Control Groups) 系统,cgroups 系统是 Linux 内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。它最初由 Google 的工程师提出,后来被整合进 Linux 内核。cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段,可以说没有 cgroups 就没有 LXC。cgroups 文件系统结构见图 1 。

图 1.cgroups 文件系统结构

相关名词解释

控制族群(control group):控制族群就是一组按照某种标准划分的进程。cgroups 中的资源控制都是以控制族群为单位实现。一个进程可以加入到一个控制族群,也可以迁移到另一个控制族群。

层级(hierarchy)。控制族群可以组织成 hierarchical 的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。

子系统(subsytem)。一个子系统就是一个资源控制器,比如中央处理器子系统就是控制中央处理器时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。主要包括如下 9 个子系统:

blkio : 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等)。

cpu : 这个子系统使用调度程序提供对 中央处理器的 cgroup 任务访问。

cpuacct : 这个子系统自动生成 cgroup 中任务所使用的中央处理器报告。

cpuset : 这个子系统为 cgroup 中的任务分配独立中央处理器(在多核系统)和内存节点。

devices : 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。

freezer : 这个子系统挂起或者恢复 cgroup 中的任务。

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

net_cls : 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。

ns :ns 子系统提供了一个将进程分组到不同名称空间的方法。在具体名称空间中,进程可彼此互动,但会与在其它名称空间中运行的进程隔绝。这些分开的名称空间在用于操作系统级别的虚拟化时,有时也称之为容器。

搭建第一个 LXC 虚拟计算机

本文使用的 Linux 发行版是 Ubuntu 12.10 ,首先安装软件包:

#apt-get install lxc

安装软件包后要检查 Linux 发行版的内核对 LXC 的支持情况,可以使用下面命令 lxc-checkconfig 查看,见图 2 。

图 2.lxc-checkconfig 命令

lxc-checkconfig 命令检查之后如果所有项目显示“enabled”表示可以直接使用 LXC。