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

第 33 章 配置 lx 标记区域(任务)

本章介绍如何在基于 x64 或 x86 的系统上配置 lx 标记区域。此过程与配置 Solaris 区域的过程基本相同。配置标记区域时不需要使用其中一些属性。

规划和配置 lx 标记区域(任务图)

在将系统设置为使用区域之前,必须先收集信息,并决定如何配置区域。以下任务图概括了如何规划和配置 lx 区域。

任务 

说明 

参考 

规划区域策略。 

  • 确定要在区域中运行哪些应用程序。

  • 评估磁盘空间的可用性,以便可以保存区域内的文件。

  • 如果您也使用资源管理功能,请确定如何使资源管理范围能够覆盖整个区域。

  • 如果要使用资源池,请根据需要配置池。

请参见系统和空间要求区域中使用的资源池

确定区域的名称和路径。 

基于命名约定决定区域的名称。推荐使用 Zetabyte 文件系统 (Zetabyte File System, ZFS) 上的路径。当源 zonepath 和目标 zonepath 都驻留在 ZFS 上并且位于同一个池中,zoneadm clone 命令会自动使用 ZFS 来克隆区域。

请参见资源和属性类型《Oracle Solaris ZFS 管理指南》

获取或配置区域的 IP 地址。 

根据配置的不同,您必须为需要网络访问的每个非全局区域获取至少一个 IP 地址。 

请参见确定区域主机名并获取网络地址《系统管理指南:IP 服务》

确定是否要在区域内挂载文件系统。 

查看您的应用程序要求。 

有关更多信息,请参见在区域中挂载的文件系统

确定应使哪些网络接口可在区域中使用。 

查看您的应用程序要求。 

有关更多信息,请参见共享 IP 网络接口

确定是否必须更改缺省的非全局区域权限集。 

检查权限集: 缺省权限集、可以添加和删除的权限,以及目前不能使用的权限。 

请参见资源和属性类型非全局区域中的权限

配置区域。 

使用 zonecfg 可以创建区域的配置。

请参见如何配置、检验和提交 lx 标记区域

检验并提交已配置的区域。 

确定指定的资源和属性是否在虚拟系统上有效。 

请参见如何配置、检验和提交 lx 标记区域

如何配置 lx 标记区域

使用 zonecfg(1M) 手册页中所述的 zonecfg 命令可执行以下操作。


提示 –

如果您知道将要使用 CD 或 DVD 在 lx 标记区域中安装应用程序,请在最初配置标记区域时,使用 add fs 在全局区域内添加对 CD 或 DVD 介质的只读访问权限。然后可以使用 CD 或 DVD 在标记区域中安装产品。


当使用 zonecfg 实用程序配置区域时,您可以使用 revert 子命令来撤消资源设置。请参见如何恢复区域配置

配置多个 lx 标记区域的脚本中提供了用于在系统中配置多个区域的脚本。

要显示非全局区域配置,请参见如何显示标记区域的配置


提示 –

配置完标记区域之后,最好复制该区域的配置。将来您可以使用此备份来恢复区域。以超级用户或主管理员的身份,将区域 lx-zone 的配置列显到文件。以下示例使用名为 lx-zone.config 的文件。


global# zonecfg -z lx-zone export > lx-zone.config

有关更多信息,请参见如何恢复单个非全局区域


Procedure如何配置、检验和提交 lx 标记区域

请注意,不能在启用标签的 Trusted Solaris 系统中使用 lx 标记区域。zoneadm 命令将不检验配置。

要执行此过程,您必须是全局区域中的全局管理员。

  1. 成为超级用户或承担主管理员角色。

    有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”

  2. 用所选的区域名称来设置区域配置。

    此示例过程中使用名称 lx-zone


    global# zonecfg -z lx-zone
    

    如果是第一次配置该区域,则可以看到以下系统消息:


    lx-zone: No such zone configured
    Use 'create' to begin configuring a new zone.
  3. 使用 SUNWlx 模板创建新 lx 区域配置。


    zonecfg:lx-zone> create -t SUNWlx
    

    或者,也可以创建空区域并显式设置标记:


    zonecfg:lx-zone> create -b
    zonecfg:lx-zone> set brand=lx
    
  4. 设置区域路径,在此过程中为 /export/home/lx-zone


    zonecfg:lx-zone> set zonepath=/export/home/lx-zone
    
  5. 设置自动引导值。

    如果设置为 true,则在引导全局区域时将自动引导该区域。请注意,要自动引导区域,还必须启用区域服务 svc:/system/zones:default。缺省值为 false


    zonecfg:lx-zone> set autoboot=true
    
  6. 为区域设置持久引导参数。


    zonecfg:lx-zone> set bootargs="-i=altinit"
    
  7. 如果在系统上启用资源池,则将该池与区域进行关联。

    此示例使用名为 pool_default 的缺省池。


    zonecfg:lx-zone> set pool=pool_default
    

    因为资源池允许进行一次可选的调度类分配,所以可以使用池功能来设置一个缺省的调度程序,而不是非全局区域的系统缺省值。有关说明,请参见如何将池与调度类关联创建配置

  8. 修改缺省权限集。


    zonecfg:lx-zone> set limitpriv="default,proc_priocntl"
    

    proc_priocntl 权限用于在实时类中运行进程。

  9. 将 CPU 份额值设置为 5。


    zonecfg:lx-zone> set cpu-shares=5
    
  10. 添加内存上限。


    zonecfg:lx-zone> add capped-memory
    
    1. 设置内存上限。


      zonecfg:lx-zone:capped-memory> set physical=50m
      
    2. 设置交换内存上限。


      zonecfg:lx-zone:capped-memory> set swap=100m
      
    3. 设置锁定内存上限。


      zonecfg:lx-zone:capped-memory> set locked=30m
      
    4. 结束指定。


      zonecfg:lx-zone:capped-memory> end
      
  11. 添加文件系统。


    zonecfg:lx-zone> add fs
    
    1. 设置文件系统的挂载点,在此过程中为 /export/linux/local


      zonecfg:lx-zone:fs> set dir=/export/linux/local
      
    2. 指定全局区域中的 /opt/local 将要在所配置的区域中挂载为 /export/linux/local


      zonecfg:lx-zone:fs> set special=/opt/local
      

      在非全局区域中,/export/linux/local 文件系统是可读写的。

    3. 指定文件系统类型,在此过程中为 lofs


      zonecfg:lx-zone:fs> set type=lofs
      

      此类型指明了内核与文件系统的交互方式。

    4. 结束文件系统指定。


      zonecfg:lx-zone:fs> end
      

    可多次执行此步骤来添加多个文件系统。

  12. 添加网络虚拟接口。


    zonecfg:lx-zone> add net
    
    1. 以下面格式设置 IP 地址:区域的 IP 地址/网络掩码。在此过程中使用了 10.6.10.233/24


      zonecfg:lx-zone:net> set address=10.6.10.233/24
      
    2. 设置网络接口的物理设备类型,在此过程中为 bge 设备。


      zonecfg:lx-zone:net> set physical=bge0
      
    3. 结束指定。


      zonecfg:lx-zone:net> end
      

    可多次执行此步骤来添加多个网络接口。

  13. 通过使用 attr 资源类型在此区域中启用全局区域中存在的音频设备。


    zonecfg:lx-zone> add attr
    
    1. 将名称设置为 audio


      zonecfg:lx-zone:attr> set name=audio
      
    2. 将类型设置为 boolean


      zonecfg:lx-zone:attr> set type=boolean
      
    3. 将值设置为 true


      zonecfg:lx-zone:attr> set value=true
      
    4. 结束 attr 资源类型指定。


      zonecfg:lx-zone:attr> end
      
  14. 检验区域的配置。


    zonecfg:lx-zone> verify
    
  15. 提交区域的配置。


    zonecfg:lx-zone> commit
    
  16. 退出 zonecfg 命令。


    zonecfg:lx-zone> exit
    

    请注意,即使您没有在提示符下明确键入 commit,也会在键入 exit 或出现 EOF 时自动执行 commit

在命令行中使用多个子命令

提示 –

zonecfg 命令还支持通过同一个 shell 调用多条子命令,这些子命令放在引号中并用分号进行分隔。


global# zonecfg -z lx-zone "create -t SUNWlx; set zonepath=/export/home/lx-zone"

下一步执行的操作

请参见安装和引导 lx 标记区域来安装已提交的区域配置。

配置多个 lx 标记区域的脚本

可以使用此脚本在系统中配置和引导多个区域。此脚本采用以下参数:

要执行此脚本,您必须是全局区域中的全局管理员。全局管理员在全局区域中拥有超级用户权限或承担主管理员角色。


#!/bin/ksh
#
# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%   %I%    %E% SMI"
if [[ -z "$1" || -z "$2" || -z "$3" || -z "$4" ]]; then
    echo "usage: $0 <#-of-zones> <zonename-prefix> <basedir> <template zone>"
    exit 2
fi
if [[ ! -d $3 ]]; then
    echo "$3 is not a directory"
    exit 1
fi
state=`zoneadm -z $4 list -p 2>/dev/null | cut -f 3 -d ":"`
if [[ -z "$state" || $state != "installed" ]]; then
    echo "$4 must be an installed, halted zone"
    exit 1
fi

template_zone=$4

nprocs=`psrinfo | wc -l`
nzones=$1
prefix=$2
dir=$3

ip_addrs_per_if=`ndd /dev/ip ip_addrs_per_if`
if [ $ip_addrs_per_if -lt $nzones ]; then
	    echo "ndd parameter ip_addrs_per_if is too low ($ip_addrs_per_if)"
	    echo "set it higher with 'ndd -set /dev/ip ip_addrs_per_if <num>"
	    exit 1
fi

i=1
while [ $i -le $nzones ]; do
	zoneadm -z $prefix$i clone $template_zone > /dev/null 2>&1
	if [ $? != 0 ]; then
		echo configuring $prefix$i
		F=$dir/$prefix$i.config
		rm -f $F
		echo "create -t SUNWlx" > $F
		echo "set zonepath=$dir/$prefix$i" >> $F
		zonecfg -z $prefix$i -f $dir/$prefix$i.config 2>&1 | \
		    sed 's/^/    /g' 
	else
		echo "skipping $prefix$i, already configured"
	fi
	i=`expr $i + 1`
done

i=1
while [ $i -le $nzones ]; do
	j=1
	while [ $j -le $nprocs ]; do
		if [ $i -le $nzones ]; then
			if [ `zoneadm -z $prefix$i list -p | \
			    cut -d':' -f 3` != "configured" ]; then
				echo "skipping $prefix$i, already installed"
			else
				echo installing $prefix$i
				mkdir -pm 0700 $dir/$prefix$i
				chmod 700 $dir/$prefix$i
				zoneadm -z $prefix$i install -s -d /path/to/ISOs > /dev/null 2>&1 &
				sleep 1	# spread things out just a tad
			fi
		fi
		i=`expr $i + 1`
		j=`expr $j + 1`
	done
	wait
done

i=1
para=`expr $nprocs \* 2`
while [ $i -le $nzones ]; do
	date
	j=1
	while [ $j -le $para ]; do
		if [ $i -le $nzones ]; then
			echo booting $prefix$i
			zoneadm -z $prefix$i boot &
		fi
		j=`expr $j + 1`
		i=`expr $i + 1`
	done
	wait
done

Procedure如何显示标记区域的配置

要执行此过程,您必须是全局区域中的全局管理员。

  1. 成为超级用户或承担主管理员角色。

    有关如何创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”

  2. 显示区域配置。


    global# zonecfg -z zonename info
    

修改、恢复或删除区域配置

以下各节包含用于修改、恢复或删除区域配置的过程。