Linux 容器的建立和简单管理(1)


cgroups 简介

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 ,首先安装软件包:

  1. #apt-get install lxc 

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

图 2.lxc-checkconfig 命令

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


相关内容