Solaris ゾーンBy Amy Rich Solaris 10 オペレーティングシステムには、Solaris コンテナテクノロジという興味深い新機能があります。 このテクノロジによって、システムリソースを仮想化し、複数のソフトウェア区画を 1 つのインスタンスの OS で使用できます。 Solaris コンテナの機能は、主に Solaris ゾーン区分化テクノロジとリソース管理ツールの 2 つのコンポーネントから成り立っています。 Solaris ゾーン機能は、実行中のアプリケーション用の異なる環境を作成することを可能にし、リソース管理フレームワークは、CPU やメモリといったシステムリソースの割り当て、管理、アカウント処理を実現します。 Solaris コンテナの機能はハードウェアへの依存性がなく、Solaris 10 OS に対応しているものであれば、どのマシンでも使用できます。 Solaris コンテナの開発はまだ継続されています。 そのため、Solaris 10 OS の将来のビルドでは、柔軟性と機能の一層の強化が見込まれます。 詳細については、docs.sun.com にある System Administration Guide: Solaris Containers -- Resource Management and Solaris Zones を参照してください。 BigAdmin の Solaris Zones のページも参考にしてください。 Solaris ゾーンソフトウェアとはSolaris ゾーン機能は、FreeBSD Jails と同じ基本概念に基づいています。 FreeBSD Jails と Solaris ゾーンのどちらでも、実行環境のそれぞれのビューはお互いに完全に隔離され、ある環境にあるプロセスは別の環境にあるプロセスにシグナルを送出できず、そのプロセスを参照することさえできません。 Jails とゾーンでは、1 つのインスタンスのオペレーティングシステムだけが共有されるため、CPU が 1 つしかないマシンでも、複数の実行環境が共存できます。 ゾーンには、グローバルゾーンと非グローバルゾーンの 2 種類があります。 Solaris ゾーン機能が有効になっているマシンには、1 つのグローバルゾーンと最大で 8191 の非グローバルゾーンがあります。 1 台のマシンで使用できる最大ゾーン数は、そのマシンのハードウェアリソースによって決まります。 それぞれのゾーンには、起動時に ID が割り当てられます。 グローバルゾーンの I D は常に 0 になり、起動可能な Solaris カーネルはグローバルゾーンだけに収容されます。 すべてのデバイス、ファイルシステム、他のゾーンを認識できるのはグローバルゾーンだけです。 また、グローバルゾーンは、非グローバルゾーンの設定、インストール、管理を行える唯一のゾーンでもあります。 非グローバルゾーンには、グローバルゾーンにインストールされた Solaris OS のサブセットが収容されます。 さらに、グローバルゾーンにインストールされていないパッケージも組み込むことができます。 それぞれの非グローバルゾーンには、そのゾーンに関連するインストール済みのソフトウェアパッケージを記録した専用のパッケージデータベースがあり、グローバルゾーンや他の非グローバルゾーンとの間でパッケージの情報は共有されません。 非グローバルゾーンには、ローカライズされた設定情報や、他のゾーン固有のファイルやディレクトリも含まれています。 非グローバルゾーンの設定
非グローバルゾーンを作成するには、グローバルゾーンの管理者が zonecfg -z <ゾーン名> zonecfg -z <ゾーン名> <サブコマンド> zonecfg -z <ゾーン名> -f <コマンドファイル> zonecfg help
add <リソースタイプ>
(グローバルスコープ)
add <プロパティ名> <プロパティ値>
(リソーススコープ)
cancel
commit
create [-F] [ -b | -t <テンプレート> ]
delete [-F]
end
exit [-F]
export [-f <出力ファイル>]
help [commands] [syntax] [usage] [<コマンド名>]
info [<リソースタイプ> [<プロパティ名>=<プロパティ値>]*]
remove <リソースタイプ> { <プロパティ名>=<プロパティ値> }
(グローバルスコープ)
remove <プロパティ名>=<プロパティ値>
(リソーススコープ)
revert [-F]
select <リソースタイプ> { <プロパティ名>=<プロパティ値> }
set <プロパティ名>=<プロパティ値>
verify
基本的なゾーンを設定するには、 zonecfg -z myzone zonecfg:myzone> create zonecfg:myzone> export create -b set autoboot=false add inherit-pkg-dir set dir=/lib end add inherit-pkg-dir set dir=/platform end add inherit-pkg-dir set dir=/sbin end add inherit-pkg-dir set dir=/usr end
この段階で、デフォルトのテンプレートを変更します。
ここでは、ゾーン zonecfg:myzone> set zonepath=/zones/myzone zonecfg:myzone> set autoboot=true zonecfg:myzone> add net zonecfg:myzone:net> set address=192.168.1.7/24 zonecfg:myzone:net> set physical=hme0 zonecfg:myzone:net> end zonecfg:myzone> add inherit-pkg-dir zonecfg:myzone:inherit-pkg-dir> set dir=/opt/sfw zonecfg:myzone:inherit-pkg-dir> end zonecfg:myzone> add fs zonecfg:myzone:fs> set dir=/usr/local zonecfg:myzone:fs> set special=/data zonecfg:myzone:fs> set type=lofs zonecfg:myzone:fs> add options [nodevices] zonecfg:myzone:fs> end zonecfg:myzone> verify zonecfg:myzone> export create -b set zonepath=/zones/myzone set autoboot=true add inherit-pkg-dir set dir=/lib end add inherit-pkg-dir set dir=/platform end add inherit-pkg-dir set dir=/sbin end add inherit-pkg-dir set dir=/usr end add inherit-pkg-dir set dir=/opt/sfw end add fs set dir=/usr/local set special=/data set type=lofs add options nodevices end add net set address=192.168.1.7/24 set physical=hme0 end zonecfg:myzone> commit zonecfg:myzone> export -f /tmp/myzone-zone.cfg zonecfg:myzone> exit これで、ゾーンの設定が完了し、設定を実行するためのテンプレートが zoneadm -z <ゾーン名> <サブコマンド> [<オプション>] zoneadm [-z <ゾーン名>] list [<オプション>] zoneadm help
boot halt help [subcommand] install list [-cipv] ready reboot uninstall [-F] verify 非グローバルゾーンのインストールと起動ゾーンをインストールするには、次のコマンドを入力するだけで済みます。 zoneadm -z myzone install Preparing to install zone <myzone>. Creating list of files to copy from the global zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <779> packages on the zone. Initialized <779> packages on zone. Successfully initialized zone <myzone>.
次に、ゾーンを起動して実行環境を立ち上げ、 zoneadm -z myzone boot zlogin -C myzone インストール後の初めての起動なので、内部的な命名規則が何もなく、コンソールを介して必要な情報の入力が要求されます。 デフォルトでは、ゾーンのホスト名はゾーン名と同じになります。 ホスト名を指定する場合、ゾーンの内部的なネームサービス (DNS、LDAP、ファイル、NIS、NIS+ など) に基づいて、ゾーンの IPv4 アドレスのいずれか 1 つに変換できるものを指定する必要があります。 ゾーンでは、グローバルゾーンとはまったく別のネームサービスを使用できます。 同じネームサービスを使用したとしても、そのサービスはグローバルゾーンのサービスとは完全に独立して動作します。
ゾーンでは、 実行中のそれぞれのゾーンの状態は、次のコマンドによってグローバルゾーンから参照できます。 zoneadm list -v
ID NAME STATUS PATH
0 global running /
2 myzone running /zones/myzone
この出力から、新しいゾーンが起動され、使用できる状態になっていることを確認できます。
非グローバルゾーンから
新しい起動されたゾーンは、新しくインストールされたマシンに似ています。
まだユーザーアカウントはなく、システムのデフォルト設定を除けば設定情報もありません。
したがって、新しいゾーンを本番で使用できるようにするには、まずアカウントを作成し、ソフトウェアを追加し、ゾーンの設定をカスタマイズする必要があります。
その後、グローバルゾーンの管理者は zlogin -l <ユーザー> <ゾーン名>
zlogin myzone ls -al / total 126 drwxr-xr-x 19 root other 512 Mar 8 12:45 . drwxr-xr-x 19 root other 512 Mar 8 12:45 .. lrwxrwxrwx 1 root root 9 Mar 8 12:03 bin -> ./usr/bin drwxr-xr-x 2 root other 512 Mar 8 12:02 data drwxr-xr-x 10 root other 1024 Mar 8 12:45 dev drwxr-xr-x 51 root sys 3584 Mar 8 13:36 etc drwxr-xr-x 2 root sys 512 Feb 12 11:42 export dr-xr-xr-x 1 root root 1 Mar 8 12:45 home drwxr-xr-x 5 root sys 512 Mar 8 12:03 kernel drwxr-xr-x 4 root bin 4608 Feb 12 12:17 lib drwxr-xr-x 2 root sys 512 Mar 8 12:04 mnt dr-xr-xr-x 1 root root 1 Mar 8 12:45 net drwxr-xr-x 5 root sys 512 Mar 8 12:03 opt drwxr-xr-x 43 root sys 1536 Feb 12 11:52 platform dr-xr-xr-x 64 root root 30400 Mar 8 16:27 proc drwxr-xr-x 2 root sys 1024 Feb 12 11:48 sbin drwxrwxrwt 4 root sys 314 Mar 8 16:19 tmp drwxr-xr-x 38 root other 1024 Jul 18 2003 usr drwxr-xr-x 33 root sys 512 Mar 8 12:45 var
非対話モードの
ゾーン zlogin myzone shutdown -y -i0 -g0 zoneadm -z myzone uninstall -F zonecfg -z myzone delete -F グローバルゾーンからの非グローバルゾーンの情報の取得と設定zonecfg、zoneadm、zonename、zlogin を使用できるだけでなく、さまざまな標準システムコマンドも、グローバルゾーンからゾーンの情報を参照・変更できるように修正されています。
プロセスの制御
/bin/ps -efo user,zone,pid,ppid,c,stime,tty,time,comm |grep myzone
root myzone 18386 1 0 12:45:24 ? 00:00 /usr/sbin/syslogd
root myzone 18527 1 0 12:47:04 ? 00:00 /usr/lib/ssh/sshd
root myzone 18630 18527 0 13:38:26 ? 00:03 /usr/lib/ssh/sshd
root myzone 18300 1 0 12:45:22 ? 00:00 init
root myzone 18512 1 0 12:45:33 ? 00:01 /usr/sfw/sbin/snmpd
root myzone 18399 1 0 12:45:24 ? 00:00 /usr/sbin/cron
root myzone 18638 18634 0 13:38:31 pts/2 00:00 -sh
root myzone 18523 18300 0 12:47:03 ? 00:00 /usr/lib/saf/sac
root myzone 18401 1 0 12:45:25 ? 00:00 /usr/lib/autofs/automountd
daemon myzone 18324 1 0 12:45:23 ? 00:00 /usr/lib/crypto/kcfd
root myzone 18656 18638 0 13:44:26 pts/2 00:00 tcsh
daemon myzone 18349 1 0 12:45:23 ? 00:00 /usr/sbin/rpcbind
root myzone 18400 1 0 12:45:24 ? 00:00 /usr/sbin/nscd
root myzone 18402 1 0 12:45:25 ? 00:00 /usr/sbin/inetd
smmsp myzone 18435 1 0 12:45:29 ? 00:00 /usr/lib/sendmail
root myzone 18434 1 0 12:45:29 ? 00:00 /usr/lib/sendmail
root myzone 18442 1 0 12:45:29 ? 00:00 /usr/lib/utmpd
root myzone 18297 1 0 12:45:09 ? 00:00 zsched
root myzone 18618 18300 0 13:37:58 zoneconsole \
00:00 /usr/lib/saf/ttymon
root myzone 18496 1 0 12:45:31 ? 00:00 /usr/dt/bin/dtlogin
root myzone 18526 18523 0 12:47:03 ? 00:00 /usr/lib/saf/ttymon
多くのコマンドが拡張され、ゾーンを基準にして出力をフィルタ処理したり、プロセスの所属先のゾーンを入力として指定できるようになりました。 Solaris OS では、 ファイルシステム グローバルゾーンから df -Z / (/dev/dsk/c0t1d0s0 ): 1881482 blocks 247016 files /devices (/devices ): 0 blocks 0 files /usr (/dev/dsk/c0t1d0s3 ): 859490 blocks 271499 files /proc (proc ): 0 blocks 1837 files /etc/mnttab (mnttab ): 0 blocks 0 files /dev/fd (fd ): 0 blocks 0 files /var (/dev/dsk/c0t1d0s4 ): 1889810 blocks 239530 files /var/run (swap ): 2111168 blocks 15280 files /tmp (swap ): 2111168 blocks 15280 files /zones (/dev/dsk/c0t1d0s5 ): 60468666 blocks 3681959 files /zones/myzone/root/dev(/zones/myzone/dev ): 60468666 blocks 3681959 files /zones/myzone/root/lib(/lib ): 1881482 blocks 247016 files /zones/myzone/root/opt/sfw(/opt/sfw ): 60468666 blocks 3681959 files /zones/myzone/root/platform(/platform ): 1881482 blocks 247016 files /zones/myzone/root/sbin(/sbin ): 1881482 blocks 247016 files /zones/myzone/root/usr(/usr ): 859490 blocks 271499 files /zones/myzone/root/usr/local(/data ): 1881482 blocks 247016 files /zones/myzone/root/proc(proc ): 0 blocks 1837 files /zones/myzone/root/etc/mnttab(mnttab ): 0 blocks 0 files /zones/myzone/root/dev/fd(fd ): 0 blocks 0 files /zones/myzone/root/var/run(swap ): 2111168 blocks 15280 files /zones/myzone/root/tmp(swap ): 2111168 blocks 15280 files ネットワーキング
ifconfig <インタフェース> zone {<名前> | <数値>}
ifconfig hme0:3 plumb 192.168.1.8 netmask 255.255.255.0 zone myzone up
グローバルゾーンから、グローバルゾーンに限定された IP インタフェースのリストを出力するには、 ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
inet 192.168.1.7 netmask ff000000
lo0:1: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
zone myzone
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:20:9e:b5:40
hme0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
zone myzone
inet 192.168.1.7 netmask ffffff00 broadcast 192.168.1.255
ifconfig -aZ
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>
mtu 8232 index 1
inet 192.168.1.7 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 2
inet 192.168.1.4 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:20:9e:b5:40
アカウンティング 拡張アカウンティング ( 参考情報
Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License. |
BigAdmin SubscriptionsBigAdmin Areas
BigAdmin Sun Center
BigAdmin Topics |