系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones

区域如何工作

可以将一个非全局区域想象为一个盒子。一个或多个应用程序可在这个盒子中运行,而不与系统的其余部分交互。Solaris 区域使用灵活、软件自定义的边界将各软件应用程序或服务分隔开来。然后,便可分别管理在 Solaris 操作系统的同一实例中运行的应用程序。因此,为了符合配置要求,不同版本的同一应用程序可以在不同区域中运行。

指定给某区域的进程可以处理、监视指定给同一区域的其他进程,并可直接与这些进程进行通信。进程不能对指定给系统中其他区域的进程执行这些功能,也不能对未指定给区域的进程执行这些功能。指定给不同区域的进程只能通过网络 API 进行通信。

从 Solaris 10 8/07 开始,IP 网络可按两种不同的方式进行配置,具体用哪种方式取决于该区域是具有其自己的专用 IP 实例还是将 IP 层配置和状态与全局区域共享。有关区域中 IP 类型的更多信息,请参见区域网络接口。有关配置信息,请参见如何配置区域

每个 Solaris 系统都包含一个全局区域。全局区域具有双重功能。全局区域既是系统的缺省区域,也是用于在整个系统中实施管理控制的区域。如果全局管理员未创建任何非全局区域(简称为区域),则所有进程都在全局区域中运行。

只能从全局区域配置、安装、管理或卸载非全局区域。只有全局区域才可从系统硬件进行引导。只能在全局区域中进行系统基础结构(如物理设备)的管理、共享 IP 区域中的路由或动态重新配置 (dynamic reconfiguration, DR)。全局区域中运行的具有适当权限的进程可以访问与其他区域关联的对象。

全局区域中的非特权进程可以执行非全局区域中不允许特权进程执行的操作。例如,全局区域中的用户可以查看有关系统中每个进程的信息。如果此功能会使站点出现问题,则可以限制对全局区域进行访问。

包括全局区域在内的每个区域都会被指定一个区域名称。全局区域始终命名为 global。每个区域还具有唯一的数字标识符,这是引导区域时由系统指定的。全局区域始终映射到 ID 0。区域名称和数字 ID 在使用 zonecfg 命令中介绍。

每个区域还具有节点名称,此名称完全独立于区域名称。节点名称由区域管理员指定。有关更多信息,请参见非全局区域节点名称

每个区域都具有一个与全局区域根目录相对的根目录路径。有关更多信息,请参见使用 zonecfg 命令

缺省情况下,非全局区域的调度类设置为系统的调度类。有关在区域中设置调度类的方法讨论,请参见区域中的调度类

您可以使用 priocntl(1) 手册页中所述的 priocntl,在不更改缺省调度类和不重新引导的情况下将正在运行的进程移至其他调度类。

区域功能总结

下表总结了全局区域和非全局区域的特征。

区域类型 

特征 

全局 

 

  • 由系统指定 ID 0

  • 提供正在系统上运行的可引导的 Solaris 内核的单个实例

  • 包含 Solaris 系统软件包的完整安装

  • 可以包含其他软件包或未通过软件包安装的其他软件、目录、文件以及其他数据

  • 提供一个完整一致的产品数据库,该数据库包含安装在全局区域中的所有软件组件的有关信息

  • 仅存放特定于全局区域的配置信息,如全局区域主机名和文件系统表

  • 是识别所有设备和所有文件系统的唯一区域

  • 是识别非全局区域存在和配置的唯一区域

  • 是可以从中配置、安装、管理或卸载非全局区域的唯一区域

非全局 

 

  • 引导区域时由系统指定区域 ID

  • 共享从全局区域引导的 Solaris 内核下的操作

  • 包含完整 Solaris 操作系统软件包中已安装的一部分

  • 包含从全局区域共享的 Solaris 软件包

  • 可以包含未从全局区域共享的其他已安装的软件包

  • 可以包含在非全局区域上创建的,未通过软件包安装或者未从全局区域共享的其他软件、目录、文件以及其他数据

  • 具有一个完整一致的产品数据库,该数据库包含安装在非全局区域中的所有软件组件的有关信息,无论这些组件存在于非全局 区域上还是从全局区域中只读共享

  • 不识别其他任何区域的存在

  • 无法安装、管理或卸载其他区域,包括其本身

  • 仅具有特定于非全局区域的配置信息,例如非全局区域主机名和文件系统表

  • 可以具有自己的时区设置

如何管理非全局区域

全局管理员具有超级用户权限或主管理员角色。当全局管理员登录到全局区域时,可以将系统作为一个整体进行监视和控制。

区域管理员可以管理非全局区域。全局管理员为区域管理员指定区域管理配置文件。区域管理员的权限仅限于某个非全局区域。

如何创建非全局区域

全局管理员使用 zonecfg 命令,通过为区域虚拟平台和应用程序环境指定各种参数来配置区域。然后,全局管理员安装区域,使用区域管理命令 zoneadm 将软件包中的软件安装到为区域建立的文件系统分层结构。全局管理员可以使用 zlogin 命令登录到已安装的区域。首次登录时,会完成区域的内部配置。然后使用 zoneadm 命令引导区域。

有关区域配置的信息,请参见第 17 章。有关区域安装的信息,请参见第 19 章。有关区域登录的信息,请参见第 21 章

非全局区域状态模型

非全局区域可以处于以下六种状态之一:

已配置

区域配置已完成并提交到稳定存储器。但是,那些必须在初始引导之后指定的区域应用程序环境元素还不存在。

未完成

在安装或卸载操作期间,zoneadm 将目标区域的状态设置为未完成。成功完成操作之后,便将状态设置为正确的状态。

已安装

已在系统上实例化区域配置。zoneadm 命令用于检验是否可以在指定的 Solaris 系统上成功使用配置。软件包安装在区域的根路径下。在此状态下,区域没有关联的虚拟平台。

就绪

已建立区域的虚拟平台。已由内核创建 zsched 进程,已设置网络接口且可用于该区域,已挂载文件系统,并且已配置设备。系统会指定唯一的区域 ID。在此阶段,没有启动与区域关联的进程。

正在运行

正在运行与区域应用程序环境关联的用户进程。创建了与应用程序环境关联的第一个用户进程 (init) 之后,区域便会立即进入正在运行状态。

正在关闭和关闭

这两种状态是停止区域时出现的过渡状态。但是,因某种原因无法关闭的区域将会在这两种状态下停止。

第 20 章zoneadm(1M) 手册页介绍了如何使用 zoneadm 命令在这些状态之间进行转换。

表 16–1 影响区域状态的命令

当前区域状态 

适用的命令 

已配置 

zonecfg -z zonename verify

zonecfg -z zonename commit

zonecfg -z zonename delete

zoneadm -z zonename attach

zoneadm -z zonename verify

zoneadm -z zonename install

zoneadm -z zonename clone

您还可以使用 zonecfg 重命名处于已配置或已安装状态的区域。

未完成 

zoneadm -z zonename uninstall

已安装 

zoneadm -z zonename ready(可选)

zoneadm -z zonename boot

zoneadm -z zonename uninstall 可从系统中卸载指定区域的配置。

zoneadm -z zonename move path

zoneadm -z zonename detach

zonecfg -z zonename 可用于添加或删除 attrbootargscapped-memorydatasetdedicated-cpudevicefsip-typelimitprivnetrctlscheduling-class 属性。您还可以重命名处于已安装状态的区域。无法更改 inherit-pkg-dir 资源。

就绪 

zoneadm -z zonename boot

zoneadm halt 加上系统重新引导可使区域从就绪状态恢复为已安装状态。

zonecfg -z zonename 可用于添加或删除 attrbootargscapped-memorydatasetdedicated-cpudevicefsip-typelimitprivnetrctlscheduling-class 属性。无法更改 inherit-pkg-dir 资源。

正在运行 

zlogin options zonename

zoneadm -z zonename reboot

zoneadm -z zonename halt 可使就绪区域恢复为已安装状态。

zoneadm halt 加上系统重新引导可使区域从正在运行状态恢复为已安装状态。

zonecfg -z zonename 可用于添加或删除 attrbootargscapped-memorydatasetdedicated-cpudevicefsip-typelimitprivnetrctlscheduling-class 属性。无法更改 zonepathinherit-pkg-dir 资源。


注 –

通过 zonecfg 更改的参数不会影响正在运行的区域。必须重新引导区域才能使更改生效。


非全局区域特征

区域提供的隔离几乎可细化到您所需的任何程度。区域不需要专用的 CPU、物理设备或部分物理内存。可以在单个域或系统中运行的多个区域之间复用这些资源,也可借助操作系统中可用的资源管理功能为每个区域分别分配这些资源。

每个区域都可提供一组自定义的服务。要执行基本进程隔离,一个进程只能看到同一区域中的各个进程,或向这些进程发送信号。区域间的基本通信是通过每个区域的 IP 网络连接来完成的。在某个区域中运行的应用程序看不到其他区域的网络流量。即使各个软件包的流使用同一物理接口,也会维护这种隔离。

每个区域都在文件系统分层结构中拥有一个位置。因为每个区域都只限于文件系统分层结构中的一个子树,所以在某一特定区域中运行的工作负荷不能访问在其他区域中运行的另一个工作负荷的盘上数据。

命名服务使用的文件驻留在区域本身的根文件系统视图中。因此,不同区域的命名服务之间相互分离并可单独配置。

将资源管理功能用于非全局区域

如果您使用资源管理功能,则应当使此功能可以完全控制区域范围。通过指定上述控制范围,可以创建更完整的虚拟机模型,可对其中的名称空间访问、安全隔离和资源使用情况进行完全控制。

对于将各种资源管理功能用于区域的任何特殊要求,将在本手册中介绍这些功能的各章节中介绍。