Container简介
第1节 Zone简介
1.1 服务器合并解决方案
1.2 资源共享
1.3 zone特性
第2节 Zone概念
2.1 Zone的类型
2.2 Zone的守护进程
2.3 Zone的文件系统
2.4 Zone的联网
2.5 Zone的命令的作用范围
2.6 Zone的状态
第3节 Zone配置
3.1 确定zone组件
3.2 分配文件系统空间
3.3 zonecfg工具
3.4 zonecfg的资源参数
3.5 zone配置概览
第4节 使用zoneadm命令
Solaris 10的Container简介
Solaris Container是一个完整的应用程序运行时环境。Solaris 10资源管理器和Solaris Zones软件分区技术是该容器的两个组成部分。这两个组件分别代表该容器能够实现的两种不同的功能,两者协同工作可以创建完整的容器环境。容器的 zone部分提供从应用程序到平台资源的虚拟映射。利用zone可以使应用程序组件彼此隔离,即使这些zone共享Solaris 操作系统的单个实例也是如此。利用资源管理功能,您可以对工作负荷收到的资源数量进行分配。
容器建立资源占用(如CPU)的边界。这些边界可以进行扩展,以适应容器中运行的应用程序的不断变化的处理要求。
图片附件: zone-0.jpg (2007-1-25 18:00, 11.73 K)
第1节 Zone简介
Solaris zone技术使Solaris 10操作系统可以进行软件分区,每软件分区相当于一个独立的操作系统,可以拥有独立的进程空间,所配给的资源,以及用户。ZONE的核心思想是把多个应用环境合并在单个服务器上。把多个应用部署在一个大型的,更具可扩性的服务器上比把各个应用单独分布在各个服务器上更能节约硬件开销和并能减少管理的复杂性。
1.1 服务器合并解决方案
在计划合并服务器时,市场上有多种解决方案。客户可选择以下三种类型的服务器解决方案:
1 域和分区 这是基于硬件的解决方案,包括Sun Fire? Domains和IBM LPARs
2 虚拟机器 这是应用层的解决方案,包括IBM VM和VMware
3 操作系统分区 这是基于操作系统层面的解决方案,包括FreeBSD Jails和Linux Vservers
Solaris的Zone属于操作系统分区类的解决方案。Zone提
供虚拟操作系统服务,对用户和应用而言就像不同的Solaris实例一样。这种架构隔离了进程,隐藏了底层的平台,并且使全局管理员能够允许以粒度级别使
用系统资源。这种隔离方式能够创建更安全的环境,之前必须运行在不同物理系统上的多种应用现在能够共存在同一台机器上的不同的zone里。
1.2 资源共享
Zone允许全局zone(global zone)的root用户划分系统资源给各个个体zone(individual zone)。每个zone维护它们各自的root密码和用户信息,这些信息和其他zone以及global系统之间是隔离的。每个zone都有独立的进程和文件系统空间,能够仅监视和影响本地进程。仅有单个处理器和单个磁盘的系统也能够支持几个zone,每个都有独立的资源,用户和进程空间,
Zone允许多个Solaris实例在单一硬件平台上同时进行操作。文件系统,处理器,网络接口都能被多个zone共享。分配给多个实例的物理资源还能够根据需要对可用资源进行调整和共享。个体zone能够从全局zone获得文件和配置。典型的zone环境如图所示:
图片附件: zone-1.jpg (2007-1-24 16:57, 66.38 K)
最底层是各种物理设备,网卡,存储等等;然后是Solaris操作系统母体,提供各种核心服务,以及各种管理控制功能;再往上就是用zone实现各种虚拟平台;最上层为在各个zone里面部署的各种应用。
1.3 zone特性
安全性
把网络服务放在zone里运行,限制了发生安全侵犯事件时的潜在损失。运行在一个zone里的进程,即使拥有一个超级用户信任状也无法影响另外一个 zone的活动性,比如仅能在全局zone中才能在总体上重启或关闭系统。管理员登陆到全局zone,可监视运行在其他zone的应用的活动性以及在总体上控制系统。全局zone是缺省的zone,是永久存在的。
隔离性
zone允许在同样的机器上配置多种应用,即使这些应用是在不同的信任域中操作,或需要独占一种全局资源,或使用全局配置出现困难。个体zone拥有自己的用户设置和root密码。个体zone的重启不会影响运行在系统上的其他zone。
虚拟化
zone提供了一个虚假的环境,能够把诸如物理设备,系统的主IP地址,主机名等隐藏起来,对应用而言是不可见的。同样的环境能够在不同物理机器上进行维护,能够很好的支持对应用进行快速配置和重配置。
粒度
zone能够以任意粒度级别提供隔离。一个zone不需要专用的CPU,物理设备,或物理内存块。通过OS的资源管理特性,这些资源能被运行在单个系统上的许多zone共同混合使用,或以一个zone为基础进行分配。
透明度
除非是为了达到必须的安全性和隔离性,应避免对应用的执行环境进行变更。Zone并没有提出一个新的API或ABI(application binary interface),它提供的是标准的Solaris接口和应用环境,并且对应用尝试执行有特权的操作做了一些限制。
第2节 Zone概念
要理解Solaris的zone软件分区技术,就必须了解这些zone的相关概念:zone的类型,zone的守护进程,zone的文件系统,zone的联网,zone的命令范围,zone的状态。
2.1 Zone的类型
Solaris 10操作系统支持两种类型的zone:global zone和non-global zone(非全局zone)
GLOBAL ZONE
每个Solaris 10系统都有一个global zone。global zone有两个功能。global zone是系统的缺省zone,同时也是用来执行系统范围的管理控制的默认zone。只有在global zone里才能够对非全局zone进行配置,安装,管理或反安装。如果全局管理员没有创建任何非全局zone,所有的进程都运行在global zone中。
只有global zone才能从系统硬件启动。对系统底部架构的管理,比如物理设备,路由或动态重配置(DR)都只能在global zone中才能进行。另外,global zone还包含一个完整的Solaris系统软件包的安装,还能包含未包括在系统安装包中的额外的软件
运行在global zone中的适当的有特权的进程能访问与其他zone关联的对象;而在global zone中无特权的进程可能可以执行(非全局zone中有特权的进程不能够进行)的操作。例如,global zone中的用户可以观看系统里每一个进程的信息。如果zone的这个功能在你的站点上出现问题,可以限制对global zone的访问。
global zone提供一个完整的数据库,包含所有已安装主机的信息。它仅保留global zone的配置信息,比如global zone主机名和文件系统表。只有global zone能认识到所有的设备和文件系统
在global zone中的每个zone都有一个zone名字。global zone的名字总是叫“global”。在zone启动时,系统会为每个zone分配一个唯一的数字标识(zone id)。Global zone的ZONE ID总是0。
NON-GLOBAL ZONE
非全局zone包含一个已安装的完整Solaris操作系统软件包的子集,也能包含从全局zone共享的solaris软件包以及其他的已安装的非共享的软件包。非全局zone能包含创建在非全局zone的其他软件包,这些软件包既不是通过全局zone共享的也不是通过软件包安装的。
非全局zone在Solaris内核从全局zone引导后进行共享操作。当zone启动后,系统会分配一个非0的zone ID,并且每个zone必须拥有一个用户定义的名字。
非全局zone不会意识到其他任何zone的存在。它无法安装管理与反安装任何其他zone
2.2 Zone的守护进程
Solaris系统使用两个daemon开控制zone的操作:zoneadmd和zsched
Zoneadmd守护进程是管理zone虚拟平台的首要进程。系统中每一个活动的(ready,running,shutting down)zone均有一个zoneadmd进程在运行。Zoneadmd进程负责:
1 管理zone的引导和关闭
2 分派zone ID和开启系统进程zsched
3 设置zone范围的资源控制
4 准备在zone配置文件中指定的zone的设备
5 安装(plumb)虚拟网络接口
6 挂载环回和常规文件系统
如果zoneadmd守护进程没在运行, zoneadm命令会自动开启它。每个活动的zone都有一个关联的内核进程,zsched。Zsched进程负责使zone子系统追踪每个zone的内核线程(thread)。代表zone正在工作的内核线程为zsched所拥有。
2.3 Zone的文件系统
在第一次初始化zone时,稀疏根模型(Sparse Root Model)会从global zone安装最小数量的文件。在这种模式下,只有确定的几个root包被安装到非全局zone,它们是在全局zone进行正常安装时的所需的root包以及全局管理员可能选择的其他任何root包的子集。在这种方式下,在一个物理系统上,管理员可能会拥有正在同时运行的一个操作系统的不同版本。
如果需要在一个zone和全局zone间共享文件,可通过NFS挂载成只读文件系统。缺省时,/lib,/platform,/sbin和/usr均以这种方法挂载。共享的文件系统的例子如图所示:
图片附件: zone-2.jpg (2007-1-24 16:57, 34.79 K)
一旦安装好一个zone,它就不再需要全局zone,除非有文件系统使用NFS的方式被挂载。如果从个体zone中删除一个重要的文件,只会影响本 zone。如果从global zone中删除一个重要的文件并且导致global zone操作系统不能工作,每个zone也都不能工作;如果全局操作系统依然可工作,并且被删除的文件对zone而言不是必要的,则个体zone不会受到影响。
对于正在使用NFS进行挂载的文件而言,从global zone删除重要文件的情形就像在一个典型的客户-服务器环境中一样。Zone对于该文件的依赖将决定删除该文件将对zone产生的影响。
安装好一个zone后,zone就象完全独立于global zone那样开始工作。就算一个应用或补丁被添加到global zone,对个体zone而言新添加的应用或补丁是不可用的,除非添加应用的文件系统也被zone所挂载。即使文件系统被挂载,可能还有库,头文件或其他必须的已安装的文件对个体zone而言是不可用的。如果一个应用或补丁被添加到一个非全局zone里,情况与此类似。一个zone无法回写到已挂载的文件系统,而要正确的安装应用或补丁可能需要回写文件系统。因此要添加一个应用或补丁,只能对全局zone和非全局zone进行逐一安装。
注意:非全局zone不能作为一个NFS服务器
2.4 Zone的联网
每个需要连接网络的非全局zone都可有一个或多个专用的IP地址。这些地址与逻辑接口关联,通过ifconfig命令放置在zone里。例如,假设全局zone的主网络接口为e1000g0,那么非全局zone的逻辑网络接口可为e1000g0:1
通过zonecfg配置的zone接口在zone启动时会被自动安装(plumb)并放置进zone里。在zone运行时,可用ifconfig命令来添加或删除逻辑接口。只有全局zone管理员才能修改接口配置和网络路由(route)。
可在全局zone配置IPMP,并把它扩展到非全局zone。在配置非全局zone时,把它的IP地址放进IPMP组中,然后,如果全局zone的一个接口失效,非全局zone的地址将会移动到另外一个网络接口卡。
2.5 Zone的命令的作用范围
全局zone为每个各个zone提供底层支持。配置变更会影响全局系统,个体zone,或zone里的一个资源类型。一个命令所能影响的级别通常叫做命令的作用范围。全局范围影响每个zone;资源范围仅影响你正在操作的个体zone或参数。例如,zonecfg命令提示会根据情况改变以表示一个命令或子命令的当前作用范围。
2.6 Zone的状态
为了理解zone的操作性能,你必须理解它的各种状态。Zone就像典型的solaris 10 OS安装一样操作,但没有诸如POST或OBPROM之类的资源。作为替代,这些设定和测试由全局zone来管理。当配置,启用,使用一个个体zone 时,在zoneadm命令输出中关于它的状态区域随之而变。
图片附件: zone-3.jpg (2007-1-24 16:57, 15.14 K)
一个zone可能出现的状态定义如下:
UNDEFINED
Zone的配置还未完成,还未被提交到稳定的储藏库(stable storage,比如硬盘相对内存而言就是稳定的存储库)。当一个zone的配置被删除时也常出现这个状态
CONFIGURED
Zone的配置已完成并被提交给稳定的储藏库。但是,初始化引导后必须指定的关于zone的应用环境的要素要未准备好。
INCOMPLETED
这是一个过渡状态。在一个安装或反安装操作期间,zoneadm会把目标zone的状态设置为incomplete。随着操作的成功完成,目标zone就会被设置成正确的状态。但是,如果一个zone无法完成安装过程,将会一直停留在这个状态。
INSTALLED
在这个状态时,在系统上的zone的配置被例示。通过zoneadm命令来校验配置能够成功的在指定的solaris系统上使用。包被安装在zone的根路径下。在这个状态,zone和虚拟平台没有关联。
READY
在这个状态,可为zone建立虚拟平台;内核创建zsched进程,安装网络接口,挂载文件系统,配置各种设备;系统分配唯一的zone ID。在这个状态,和zone关联的进程还未被开启。
RUNNING
在这个状态,和zone应用环境关联的用户进程正在运行。一旦与应用环境关键的第一个用户进程(init)被创建,zone立刻进入running状态。
SHUTTING-DOWN和DOWN
这些状态是过渡状态,当zone正被停机时会看到这些状态。但是,如果一个zone无法被关闭,将会停留在这些状态之一。
第3节 Zone配置
配置一个zone的步骤包括:
1 确定用来制造zone的组件
2 配置zone的资源
3 配置zone
4 校验并提交已配置的zone
3.1 确定zone组件
在为你的环境设计zone,你必须考虑用来制造每个zone配置的组件。这些组件包括:
1 zone的名字
2 到zone的根的zone路径
3 zone的网络接口
4 zone里挂载的文件系统
5 zone里配置的设备
3.2 分配文件系统空间
一个zone能使用的磁盘空间大小没有限制。全局zone管理员负责空间限制。即使一个小型的的单处理器系统也能支持许多个zone同时运行。安装在全局 zone里的包的数量会影响创建zone所需要的空间。包的数量和空间需求是影响zone占用多少磁盘空间最主要的要素。
n 正常情况下,当全局zone安装了所有标准的Solaris包时,每个非全局zone都需要大约100MB的磁盘空间
n 默认时,安装在全局zone中的任何额外的包也会移植到非全局zone,非全局zone所需的磁盘空间数量也随之增加。非全局zone中放置这些额外包的目录位置在资源inherit-pkg-dir中指定
你可以用软分区(soft partition)把磁盘分片或逻辑卷划分成分区,把这些分区作为zone的根,从而限制zone对磁盘空间的使用。软分区最多可创建8192个分区。
另外,建议每个zone分配40M的额外内存;当然,拥有足够交换空间的机器对此没有需求。
3.3 zonecfg工具
zonecfg命令用来配置zone。Zonecfg命令能以交互式模式运行,或命令行模式,或者是命令-文件模式。这个命令的基本功能(其他许多功能超出本书范围,请参阅SUN官方文件):
n 创建或删除zone配置
n 设置被添加到配置中的资源的属性
n 查询或校验配置
n 提交配置
n 回复到先前的配置
n 退出zonecfg会话
zonecfg工具提供了几个子命令用来配置和规定zone。根据当前作用范围,有些子命令能影响环境;Zonecfg提示会显示作用范围是全局还是资源范围。许多子命令能够使用-f或force标记,如果使用此标记,子命令将不会使用交互式询问保护。
子命令 描述
add 添加一个资源到zone
cancel 从资源范围退回到全局。部分被指定的资源被丢弃
commit 校验设定,并把内存中正确的配置保存到磁盘。此后使用revert命令将会回退到这个保存点。
create 为指定的zone在内存中创建一个配置
delete 从内存中删除配置
end 校验被分派的参数,并回到全局范围
export 打印配置到标准输出或指定的输出文件
info 显示当前配置,如资源设置,全局根路径,自动引导,或池等
remove (根据作用范围)删除一个或多个资源
select 选择一个资源,并改变到它的作用范围。
set 设置参数的值(在内存中)
verify 校验暂放在内存中的配置。确保所有的资源需要的属性已被指定,并且zone路径也已被指定
revert 取消在内存中的任何配置,并回退到上一次提交被执行时的状态
exit 提交当前在内存中的设置并退出zonecfg工具。这个命令会自动提交配置信息到稳定的存储库
3.4 zonecfg的资源参数
zonecfg工具中的资源类型包括:
ZONE NAME
Zone name定义zone的名字,用来向配置工具标识各个个体zone
ZONEPATH
Zone path定义zone路径,是指向到zone的根的路径
FS
分配文件系统的资源参数。使用special参数可让本地zone在单独的目录下挂载全局系统的资源。Fs资源的可用参数:
dir Zone内的挂载点路径。
special 在zone内的挂载点所使用的全局文件系统,也可指定物理分片
type 文件系统类型,即zone内核和文件系统如何相互作用
options 可使用的选项和Mount命令类似
INHERIT-PKG-DIR
用此目录访问来自于全局系统的软件包。在这个目录中的软件包的内容,被非全局zone以只读模式从全局zone继承。缺省的inherit-pkg-dir资源有:/lib,/platfrom,/sbin,/usr
NET
准备给非全局zone使用的全局系统接口的逻辑接口。当zone从installed状态切换到ready状态时,网络接口被安装(plumb)
DEVICE
指定Select,add,remove命令所能调用的设备。当zone从installed状态切换到ready状态时,它能拥有已被配置的设备。
ATTR
使全局管理员能分派常规属性设定,比如名字类型和值。类型必须是int,uint(unsigned),boolean或string。
3.5 zone配置概览
要创建一个zone,首先必须以root身份或有root特权的RBAC用户登陆到全局系统。下面列出配置一个名字为test-zone的所需步骤:
一、 开始配置zone
新的zone名字为“test-zone”,设置新zone的根路径在全局zone下的路径(此路径必须为root帐号所拥有,权限为700),并让其在全局zone启动时也自动启动。
global# zonecfg -z test-zone
zonecfg:test-zone> create
zonecfg:test-zone> set zonepath=/export/home/test-zone
zonecfg:test-zone> set autoboot=true
二、 配置zone的文件系统
1. 指定文件系统的挂载点为/mnt;
2. 指定块专用文件/dev/dsk/c0t0d0s7将被挂载到test-zone的/mnt;
3. 指定裸设备专用文件/dev/rdsk/c0t0d07。Zoneadmd守护进程在挂载文件系统之前,将以非交互式模式自动运行fsck命令,对这个设备进行检查。
4. 指定文件系统类型为UFS
5. 指定系统的特定选项,此例中启用了文件系统日志记录。
zonecfg:test-zone> add fs
zonecfg:test-zone:fs> set dir=/mnt
zonecfg:test-zone:fs> set special=/dev/dsk/c0t0d0s7
zonecfg:test-zone:fs> set raw=/dev/rdsk/c0t0d0s7
zonecfg:test-zone:fs> set type=ufs
zonecfg:test-zone:fs> add options [logging]
zonecfg:test-zone:fs> end
三、 配置(从全局zone共享的)被环回挂载的文件系统。指定全局zone的/usr/sfw目录将被环回挂载。
zonecfg:test-zone> add inherit-pkg-dir
zonecfg:test-zone:inherit-pkg-dir> set dir=/usr/sfw
zonecfg:test-zone:inherit-pkg-dir> end
四、 配置网络。指定zone要使用的物理网络接口为e1000g0,IP地址为10.10.10.101。
zonecfg:test-zone> add net
zonecfg:test-zone:net> set physical=e1000g0
zonecfg:test-zone:net> set address=192.168.0.1
zonecfg:test-zone:net> end
五、 配置设备
zonecfg:test-zone> add device
zonecfg:test-zone:device> set match=/dev/sound/*
zonecfg:test-zone:device> end
六、 配置属性。属性的名字为comment,类型为string,并定义此属性的具体内容
zonecfg:test-zone> add attr
zonecfg:test-zone:attr> set name=comment
zonecfg:test-zone:attr> set type=string
zonecfg:test-zone:attr> set value="The test zone is for test destination"
zonecfg:test-zone:attr> end
七、 校验与提交并退出zone配置
zonecfg:test-zone> verify
zonecfg:test-zone> commit
zonecfg:test-zone> exit
现在已经配置好test-zone,下一步可以进行test-zone的安装。
查看ZONE配置文件
当你把zone的配置提交到稳定的储藏库后,配置文件以XML格式保存在/etc/zones/目录中。
# more /etc/zones/test-zone.xml
删除已配置的资源
# zonecfg –z test-zone
zonecfg:test-zone:net> remove net physical=e1000g0
zonecfg:test-zone:net> commit
zonecfg:test-zone:net> end
第4节 使用zoneadm命令
zoneadm命令是安装和管理非全局zone的基本工具。使用zoneadm命令进行的操作必须从全局zone运行。Zoneadm能够:校验zone 的配置,安装zone,启动zone,重启zone,显示正在运行的zone的信息,反安装zone,使用zonecfg命令删除zone。
● 验证已配置的ZONE
你可以在开始安装一个zone之前对其配置进行校验,如果跳过这一步骤,当你开始安装zone时,校验依然会自动执行。必须是全局管理员才能执行校验和安装步骤。
# zoneadm –z test-zone verify
● 安装一个已配置的ZONE
# zoneadm –z testzone install
在安装过程中,可打开另外一个终端窗口,查看文件系统的:
# df –h | grep /export/home/test-zone
/lib 1.3G 650M 583M 53% /export/home/test-zone/root/lib
/platform 1.3G 650M 583M 53% /export/home/test-zone/root/platform
/sbin 1.3G 650M 583M 53% /export/home/test-zone/root/sbin
/usr 4.5G 3.0G 1.4G 68% /export/home/test-zone/root/usr
/dev/dsk/c1t1d0s0 5.9G 6.0M 5.8G 1% /export/home/test-zone/root/mnt
查看已安装的zone并校验它的状态
# zoneadm list –iv
ID NAME STATUS PATH
0 global running /
- test-zone installed /export/home/test-zone
● 启动ZONE
启动zone将使zone进入运行状态(running)。如果zone的资源属性autoboot设置为true,当全局zone启动时会自动启动该zone,autoboot的预设值为false。可以在installed或ready状态手工启动zone。
Zone每一次重新进入ready或running状态,系统为zone分配的唯一ID就递增(从ready状态到running除外)。
# zoneadm -z test-zone ready
# zoneadm list –vi
ID NAME STATUS PATH
0 global running /
1 test-zone ready /export/home/test-zone
# zoneadm list –v
ID NAME STATUS PATH
0 global running /
1 test-zone running /export/home/test-zone
● ZONE停机
使用zoneadm的halt命令把zone的应用环境和虚拟平台移除,然后让zone回到Installed状态。所有的进程都被kill,设备配置被取消,网络接口被卸除,文件系统被卸载,内核数据结构被摧毁。
# zoneadm –z test-zone halt
● 重启ZONE
# zoneadm –z test-zone reboot
● 登陆ZONE并开始工作
初次登陆zone开始配置操作系统环境,需要用-C登陆到zone的控制台模式:
# zlogin -C test-zone
[已连接到区域 'test-zone' 控制台]
Hostname: test-zone
Select a Language
0. English
1. Simplified Chinese
Please make a choice (0 - 1), or press h or ? for help:0
…..
系统会询问你关于终端类型,主机名(此例为solaris-1),时间区域以及root密码等信息。如果使用CDE终端窗口,可选择dtterm,如果使用其他类型的窗口,选择vt100。全部设置完后,zone重启然后进入控制台登陆提示窗口:
solaris-1 console login:
要从zone的控制台退出,使用~.组合键
# ~.
[与区域 'test-zone' 控制台的连接已关闭]
在配置完zone的操作系统环境设置后,可直接登陆zone
# zlogin test-zone
[已连接到区域 'test-zone' pts/5]
Last login: Wed Jan 24 14:31:47 on pts/5
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
● 删除ZONE
如果准备删除一个zone,先把需要保留的数据备份;然后停机zone,释放被zone占用的系统内存。Zone的停机(halt)并不是温顺的和受控的shutdown过程,因此从全局zone对正在运行的zone进行停机操作可能会导致数据丢失。
1. 查看当前已有的zone的状态
# zoneadm list -cp
0:global:running:/
1:test-zone:running:/export/home/test-zone
2. 让test-zone停机
# zoneadm –z test-zone halt
# zoneadm list -cp
0:global:running:/
-:test-zone:installed:/export/home/test-zone
3. 现在除了文件系统空间外,test-zone不再使用系统的其他资源,可以进行zone的卸除操作释放被zone占用的空间
# zoneadm –z test-zone uninstall
Are you sure you want to uninstall zone work-zone (y/[n])? Y
# zoneadm list -cp
0:global:running:/
-:test-zone: configured:/export/home/test-zone
4. 删除zone配置
# zoneadm –z test-zone delete
转载于:https://blog.51cto.com/kelvin_net/757542