文章
服务器与存储管理
作者:Detlef Drewanz 和 Lenz Grimmer
|
2012 年 12 月发布(2013 年 1 月更新;转载自 eStep 博客)
第 8 部分 — 使用 Oracle Enterprise Manager Ops Center 管理虚拟化
第 7 部分 — Oracle Virtual Desktop Infrastructure 在虚拟化战略中的作用
第 6 部分 — Oracle VM VirtualBox — 个人桌面虚拟化
第 5 部分 — 网络虚拟化和网络资源管理
第 4 部分 — 资源管理是虚拟化的必备技术
第 3 部分 — Oracle Solaris 区域和 Linux 容器在虚拟化战略中的作用
第 2 部分 — Oracle VM Server for x86 在虚拟化战略中的作用
第 1 部分 — Oracle VM Server for SPARC 在虚拟化战略中的作用
在本系列的前两篇文章中,我们介绍了 Oracle VM Server for SPARC 和 Oracle VM Server for x86,它们提供基于虚拟机管理程序的硬件虚拟化。现在,我们将通过 Oracle Solaris 区域和 Linux 容器介绍操作系统级别的虚拟化,这是一种软件虚拟化类型。
Oracle Solaris 区域和 Linux 容器不是独立产品;它们是操作系统的特性。从原理上来说,这两种技术是相似的。它们是应用程序级的虚拟化技术,因此“高于”操作系统内核。所以与基于虚拟机管理程序的虚拟化不同,它们不增加额外的软件层。使用 Oracle Solaris 区域和 Linux 容器时,许多区域或容器共享一个操作系统内核。
为了展示这一点,我们重用本系列第一篇文章中的图片,其中显示了 Oracle Solaris 区域的位置(参见图 1)。在图 1 中,Linux 容器的位置大致与 Oracle Solaris 区域类似。这两种技术之间的差异主要在实现级别以及它们与操作系统的集成方式。

图 1. Oracle 虚拟化技术和产品
现在我们深入研究一下。
Oracle Solaris 区域技术是一种最先出现在 Solaris Express 和 Oracle Solaris 10 3/05 中的 Oracle Solaris 特性,原来称作 Oracle Solaris 容器。在 Oracle Solaris 11 中,我们现在正式称之为 Oracle Solaris 区域。
Oracle Solaris 区域技术为应用程序创建一个虚拟化层。我们可以将区域称作为应用程序提供活动场所的“沙盒”。全局区域容纳 Oracle Solaris 内核、设备驱动程序和设备、内存管理系统、文件系统,以及许多情况下都有的网络体系。其他区域称为非全局区域,彼此独立,但共享一个全局区域。

图 2. Oracle Solaris 区域
全局区域可看到所有物理资源,并向非全局区域提供对这些资源的公共访问。对应用程序而言,非全局区域就像单独的 Oracle Solaris 安装。
非全局区域有自己的文件系统、进程命名空间、安全边界和网络地址。根据要求,非全局区域也可以有自己的网络体系,具有单独的网络属性。虽然每个非全局区域还有一个单独的管理员登录用户 (root),但即使是特权用户,也无法从一个非全局区域闯入另一个相邻的非全局区域。相反,从全局区域来看,非全局区域只是由一个称为区域 ID 标记组合在一起的一组进程。
这种类型的虚拟化通常称为轻量型级拟化,因为在非全局区域运行的虚拟化层和应用程序几乎没有开销。因此,可以从操作系统获得原生 I/O 性能。所以,如果应用程序需要虚拟化或者要求高性能,区域是一个极好的选择。
由于所有非全局区域共享一个全局区域,因此所有区域运行同一级别的操作系统软件,只有一个例外。标记区域 运行非原生应用程序环境。例如,使用 Oracle Solaris 10,我们就可以创建旧标记的区域,如 Oracle Solaris 8 容器 (solaris8) 和 Oracle Solaris 9 容器 (solaris9),它们提供 Oracle Solaris 8 和 Oracle Solaris 9 运行时环境,但仍共享全局区域中的 Oracle Solaris 10 内核。使用 Oracle Solaris 11,可以创建 Oracle Solaris 10 标记区域 (solaris10)。
与 Oracle Solaris 10 中的区域相比,Oracle Solaris 11 中的区域与操作系统的集成度大大提高。Oracle Solaris 区域技术不再只是操作系统的一个附加特性。在区域的自动安装或更新方面,区域与操作系统的整个生命周期管理流程完美集成。而且,区域与内核安全特性更好的集成也可以对区域进行更多的委托管理。对 Oracle Solaris 11 中区域的进一步改进包括更好地与 ZFS 集成、统一使用引导环境、网络虚拟化特性以及 Oracle Solaris 资源管理。区域总是可以非常轻松地通过命令行建立,且易于使用。如果要使用图形工具配置区域,可以使用 Oracle Enterprise Manager Ops Center(将在本系列文章稍后部分介绍)。
前面已经讨论了 Oracle Solaris 区域,下面谈谈什么是 Linux 容器?它是不是与 Oracle Solaris 区域相同的技术,如果不是,这两种技术有什么区别?
以下是来自 LXC 项目页面的定义:
Linux 容器采取与系统虚拟化技术(如 KVM 和 Xen)截然不同的方法,技术首先是在仿真硬件上引导单独的虚拟系统,然后尝试通过半虚拟化和相关机制降低开销。而 LXC 并没有为提高效率就一下采用完全隔离,而是首先采用一种有效的机制(现有 Linux 进程管理)并添加隔离,从而产生一种与 chroot 一样可扩展、可移植的系统虚拟化机制,能够在一个服务器上同时支持成千上万的仿真系统,且同时为路由器和智能电话提供轻量级虚拟化选项。 Linux 容器项目大约开始于 2006 年,当时是作为 Linux 内核的一个外部补丁集。它从内核 2.6.29(2009 年 3 月)开始集成到主流 Linux 中。LXC 通过 Linux 内核的控制组(“Cgroups”)子系统提供资源管理,并通过进程命名空间提供资源隔离。利用这些内核特性,LXC 允许创建用户空间容器对象,这些对象可以为单个应用程序、整个操作系统或二者同时提供完全的资源隔离和资源控制。
Linux 容器可提供基本上原生的性能,您可以实时高效地管理资源分配。Linux 容器中运行的二进制文件实际上是直接在主机内核上作为正常进程运行的,就像任何其他进程一样。具体来说,这意味着 CPU 和 I/O 调度远比以前更公平、更可调,而且您可以获得原生磁盘 I/O 性能,而真的虚拟化(即使是对于使用 paravirt 模式的 Xen)是无法达到的。这意味着您甚至可以在 Linux 容器内运行有大量磁盘 I/O 的应用程序,如数据库。
与全虚拟化解决方案不同但类似于 Oracle Solaris 区域,LXC 不会让您运行任何其他非 Linux 操作系统(如专有操作系统或其他类型的 UNIX)。不过,您可以在同一主机内核上的不同容器中运行不同的 Linux 分发版本。例如,您可以在容器内运行一个 Oracle Linux 5 实例,而该容器托管在一个运行 Unbreakable Enterprise Kernel 第 2 版的 Oracle Linux 6 系统上。
因此在本质上,Linux 容器可以描述为一个“增强型”chroot 环境,它可以在各种隔离级别创建,但对 Linux 内核还是共享为一个隔离的进程组。
Oracle Solaris 区域和 Linux 容器为应用程序提供轻量级虚拟化运行时环境。从 Oracle Solaris 10 起,Oracle Solaris 区域技术就已经存在,现在已与 Oracle Solaris 11 高度集成。
Linux 容器技术可用作采用 Unbreakable Enterprise Kernel 的 Oracle Linux 技术预览,用于测试和评估。
Solaris 容器:
Linux 容器:
Detlef 是首席销售顾问,居住在德国波茨坦。他是 Oracle 北欧服务器架构师团队的一名服务器和 Oracle Solaris 专家。他于 1998 年加入 Sun Microsystems,现在是 Oracle 的一员。在此之前,Detlef 在 Hitachi Internetworking Frankfurt 任职网络支持,并且是罗斯托克大学计算机科学系的一名科研人员。Detlef 拥有计算机科学硕士学位。
Lenz Grimmer 是 Oracle Linux 产品管理团队的一员。他从 1995 年起就开始涉足 Linux 和开源软件。
| 修订版 1.1,2013 年 1 月 23 日 |