StepbystepS10Zone
目次
Table of Contents |
Solaris 10 Zone †
1.Zones 概要 †
1)Zones の概念
Solaris Zonesは、物理的にひとつのserver上に、複数の仮想serverを実現する画期的な新機能です。
つまり、serverがひとつしかなくても、複数の仮想serverによって、複数のシステムを独立、分離した
状態で運用することが可能です。それぞれの仮想serverは、設定、セキュリティ、管理、システムリソース
を含め、お互いに影響を与え合うことなく動作します。この機能により、ユーザは、多数のマシンに対する
コストや管理の複雑さから解放され、より大規模でスケーラビリティを備えたserver machine上で、
複数のシステムを統合的に運用することが可能になるのです。
この仮想serverをzoneと呼びます。各zoneは、他のzoneから隔離されておりお互いを意識することは
ありません。各々のzoneは、異なるroot passwordを持ち、各zoneのroot userは、自分のzoneの
外側に対しては何もすることができません。
2)global zone と non-global zone
zoneには、"global zone"と "non-global zone"の2種類があります。
Solars10をインストールしたその環境がglobal zone、
その上に構築される仮想serverがnon-global zoneです。
- 特徴
- "global zone"
non-global zoneを定義、インストール、管理、アンインストールし、
ハードウェアのbootができる唯一の環境。
すべてのzoneのプロセスやファイルにアクセスすることができます。
- "global zone"
- "non-global zone"
他のzoneの存在を全く認識しません。non-global zone自身の、
host name, file system,IP addressなどを持ちます。
global zoneの上に、複数のnon-global zoneを作成することができます。
3)Zones 開発エピソード
Andrew Tucker -- Solaris Zones Architect のコメントより抜粋
「Zonesの元々のアイディアは、数年前に、我々がサーバの統合について 顧客と話をしていた時に始まりました。その時点で、Solaris OSには、いくつかの リソース管理機能、例えば、管理者が異なるアプリケーションに対して、どのように CPUを割当てるかを制御できるようにする、といった機能が追加されていました。 顧客は、自分たちのサーバの利用率を向上させることに、とても興味はあったのだど、 ひとつのマシン上で複数のアプリケーションを"stack"したり、統合することができな かった。その原因のうちいくつかは、リソース割当てに関するものだったが、多くの ところは、アプリケーションを、configuration, security, そして administrationの 点においても独立させる必要があったからでした。 これらの問題を解決するために、開発したのがZonesなのです。」
2.zoneの作成 (zonecfg) †
non-global zoneを作成する手順を説明します。
<index> 設定項目、オペレーションは、次の順番になっています。
1.zone name 2) 2.create 3) 3.zone path 4) 4.inherit-pkg-dir 5)-7) 5.file system 8)-12) 6.autoboot value 13) 7.network virtual interface 14)-17) 8.resource pool 18) 9.zone-wide resource control 19)-22) 10.comment 23)-27) 11.export 28) 12.verify 29) 13.commit 30) 14.exit 31)
<step by step>
説明を読みながら、ご自分の環境でオペレーションをお試しください。
準備)あらかじめ、superuserになるか、Primary Administrator roleになっておきます。
1)現在のzone設定について状況を確認します。
# zoneadm list -vc
次の表示より、ユーザーが何もしなくても、システムがglobal zoneとして 既に、稼働状態にあることがわかります。
ID NAME STATUS PATH 0 global running /
以下、この環境へ新たにnon-global zoneを作成する手順を説明します。
2)最初に、zone nameを登録します。
command lineに、次のように入力します。
ここでは、myzone という名前のnon-global zoneを登録します。
各zone nameはuniqueでなければなりません。
# zonecfg -z myzone
新しいzoneを定義する都度、次のようなシステムメッセージが
表示されます。エラーメッセージではありません。
myzone: No such zone configured Use 'create' to begin configuring a new zone.
3)新しいzone(ここでは myzone)の作成を行います。 プロンプトに作業対象となるzone nameが表示されます。
zonecfg:myzone> create
4)myzoneのzone pathを設定します。
zone pathには、各non-gloal zoneのrootとなるpathで、
global zoneに実存するpathを割り当てます。
ここでは、例として、/export/home/myzone に設定します。
zonecfg:myzone> set zonepath=/export/home/myzone
5) shared file system の設定を行います。
"inherit-pkg-dir"とは、packaged softwareを含むディレクトリを
non-global zoneでも使用できるよう、共有するためにmountする
shared file systemです。
ユーザが任意のディレクトリを設定できるようになっているほか、
default inherit-pkg-dir resources として、次の4つが、
あらかじめシステムにより設定されています。
/lib /platform /sbin /usr
mount optionは、read-only loopback file system (LOFS)固定に
なっておりユーザが指定する必要はありません。
zonecfg:myzone> add inherit-pkg-dir
6) inherit-pkg-dirの設定プロンプトに変わります。
global zoneにある/opt/sfwを、read-onlyモードでmyzoneにmount
します。
zonecfg:myzone:inherit-pkg-dir> set dir=/opt/sfw
[注]zone's packaging databaseが、inherit-pkg-dirに登録された
packaged softwareを保持するので、zoneadmでnon-global zoneが
インストールされた後には、これらのpackaged softwareを修正したり、
削除することはできません。
7) shared file system の設定を終了します。
zonecfg:myzone:inherit-pkg-dir> end
[注]5)?7)までの設定は、shared file systemの数だけ、
繰り返し行うことができます。
8)今度は、file systemを登録します。
"fs"とは、各non-global zoneで自由に設定できる仮想file systemで、
read-writeに用いられます。各non-global zoneは、複数のfsを持つことが
可能であり、他のnon-global zoneからは完全に独立しています。
global zoneに実在するpathをnon-global zoneの任意のmount point(path)に
設定し作成します。
fsには、loopback file system (LOFS)を始め、様々なoptionがあります。
zonecfg:myzone> add fs
9)file system設定のプロンプトに変わります。
myzone側のfile systemのmount pointとして、ここでは/usr/localを
指定します。(/usr/localはmyzoneのpathとなります。)
zonecfg:myzone:fs> set dir=/usr/local
10)9)で設定したmount point /usr/localへ、global zoneのfile systemに実存する/opt/localをmountします。
これで、myzoneにて、/usr/local file systeを読み書きできるようになります。
zonecfg:myzone:fs> set special=/opt/local
11)このfile systemの typeを指定します。
このように、global zoneに実在するfile systemを、新たに仮想file system
として、non-global zoneで利用する場合には、loopback file system(lofs)を
設定します。
zonecfg:myzone:fs> set type=lofs
12)file system の設定を終了します。
zonecfg:myzone:fs> end
endを実行するとfile systemの設定モードを抜けます。
[注]8)?12)までの設定は、file systemの数だけ、
繰り返し行うことができます。
13)autoboot valueの設定。
デフォルトはfalseですが、ここではglobal zoneがbootしたら
myzoneも自動的にbootするよう、trueに設定します。
zonecfg:myzone> set autoboot=true
14) network virtual interfaceを登録します。
[注]14)?17)の設定には、myzone専用として割り当て可能な新しい
IP addressが必要となります。
もし、利用可能なIP addressがあいていない場合は、
トライアルが目的のオペレーションなので、これらのステップは
省略しても構いません。
但し、実環境でzoneを使用する場合には、必ず設定を行ってください。
各々のzoneは、globalもnon-globalも、networkへの接続が必要で、
それぞれ専用のIP addressを持つ必要があります。
zonecfg:myzone> add net
15) IPaddressを設定します。
(例)として、111.111.111.111を使用しました
zonecfg:myzone:net> set address=111.111.111.111
16) 15)で設定したIPaddressに対応する physical device typeをnetwork interfaceにセットします。
ここでは、hme0とします。
[注] physical device の確認の方法。
コマンドラインにて
# ifconfig -a
出力例:
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 inet xxx.xxx.xxx.xxx netmask ffff0000 hme0: flags=1000863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,IPv4> mtu 1500 index 2 inet xxx.xxx.xxx.xxx netmask ffff0000 broadcast xxx.xxx.xxx.xxx
zonecfg:myzone:net> set physical=hme0
17) network virtual interfaceの設定を終了します。
zonecfg:myzone:net> end
[注]14)?17)までの設定は、network interfaceの数だけ、
繰り返し行うことができます。
18)resource poolとの関連づけを行います。
(例)として、default poolと結びつけます。
[注]resource poolsは、Resource Managementのひとつで、
system resoureceを分割管理し、各々のworkloadがお互いに
影響を与え合わないようにする機能です。
詳細は、後日、このコーナーで紹介する予定です。
そのときに、zoneとの関連を明らかにしていきます。
zonecfg:myzone> set pool=pool_default
19) zone-wide resource controlを設定します。
zonecfg:myzone> add rctl
20) ここでは、CPU resourceを示すzone.cpu-sharesを登録します。
zonecfg:myzone:rctl> set name=zone.cpu-shares
21) zone.cpu-sharesに設定値を与えます。
()内のパラメータは順に、privilege, share limit, 負荷が、敷居値に
達したときのactionとなっています。
zonecfg:myzone:rctl> add value (priv=privileged,limit=20,action=deny)
22) resource controlの設定を終了します。
zonecfg:myzone:rctl> end
23) attrというresourece typeを使用してcommentの登録をします。
zonecfg:myzone> add attr
24) commentという名称をname設定します。
zonecfg:myzone:attr> set name=comment
25) typeには、stringを設定します。
zonecfg:myzone:attr> set type=string
26) zoneの説明コメントのための値を設定します。
zonecfg:myzone:attr> set value="This is my work zone."
27) commentの設定を終了します。
zonecfg:myzone:attr> end
28) ここまでの設定を確認することができます。
当オペレーションは省略可能です。
zonecfg:myzone:attr> export
次のように設定値が表示されます。(例)
zonecfg:myzone> export create -b set zonepath=/export/home/myzone set autoboot=true set pool=pool_default 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=/opt/local set type=lofs end add rctl set name=zone.cpu-shares add value (priv=privileged,limit=20,action=deny) end add attr set name=comment set type=string set value="This is my work zone." end
29) ここまでに登録した設定の整合性を、システムが検証します。
zonecfg:myzone> verify
30) 設定をメモリからstable storageへ書き込みます。
zonecfg:myzone> commit
31) zonecfgを終了します。
zonecfg:myzone> exit
これで一連の、non-global zone設定オペレーションが完了し、
zonecfgモードから抜けます。
32) command lineにて、1)で行ったzoneの状況確認
オペレーションを再度実行します。
# zoneadm list -vc
1)と比較すると、myzoneという名称のnon-global zoneが
追加登録されていることが分かります。
ID NAME STATUS PATH 0 global running / - myzone configured /export/home/myzone
以上が、non-global zone作成の為の基本的な流れです。
補足)今回作成したnon-global zone(myzone)は、次回の説明オペレーションで
使用するので、このままの状態にしておいてください。
ユーザは、logoutしても問題ありません。
事情により、non-global zoneを削除したい場合は、次のオペレーション
を行ってください。
ここでは、確認を求めてから削除するオペレーションを紹介します。
# zonecfg -z myzone delete
次の表示に対し、yを入力してください
Are you sure you want to delete zone myzone (y/[n])? y
32)のオペレーションで、myzoneが削除されていることが確認できます。
3.zoneの起動 (zoneadm) †
non-global zoneをinstall,bootする手順を説明します。
<step by step>以下の
オペレーションは、global zoneのコマンドラインにて実行してください。
<index> この章の設定項目、オペレーションは、次の順番になっています。
1.Install a zone 1)-2) 2.Boot a zone 3)-4) 3.Reboot a zone 5)-7) 4.Halt a zone 8)-9) 5.Uninstall a zone 10)-11)
<step by step>
説明を読みながら、ご自分の環境でオペレーションをお試しください。
準備1)あらかじめ、superuserになるか、Primary Administrator roleに
なっておきます。
準備2)前回作成したmyzoneで設定した次の4つのdirectoryが、
global zoneに存在しなければ、作成しておきます。
/export/home/myzone (permission 700) /opt/sfw /opt/local /usr/local
[注]既に存在すればこのステップは必要ありません。
# mkdir /export/home/myzone; mkdir /opt/sfw; mkdir /opt/local; mkdir /usr/local
# chmod 700 /export/home/myzone
復習)現在のzone設定について状況を確認します。
# zoneadm list -vc
前回作成したmyzoneというnon-global zoneが、configuredの状態に
なっています。
ID NAME STATUS PATH 0 global running / - myzone configured /export/home/myzone
1)既にconfiguredの状態になっているmyzoneに、実際の環境を
反映させるためにinstallを行います。
# zoneadm -z myzone install
次のようなメッセージが出力されます。
myzoneのroot pathの下に、zoneのroot file systemに必要なファイルと
ディレクトリが作成されます。
なお、このオペレーションが完了するのに、30分?1時間以上かかる
場合があります。
[注]'pool_default'は、現時点ではactiveになっていないので、
WARNINGメッセージが出力されます.
これ以降のオペレーションでも、同様のWARNINGが検出されますが
この章では無視してください。
zoneadm: zone 'myzone': WARNING: pools facility not active; zone will not be bound pool_default'. Preparing to install zone <myzone>. Creating list of files to copy from the global zone. Copying <2397> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1016> packages on the zone. Initializing package <527> of <1016>: percent complete: 51% ===> install完了時に最後の2行は、次のように変わります。 Initialized <1016> packages on zone. Successfully initialized zone <myzone>.
[注]もし、エラーメッセージが出力され、zoneのinstallに失敗した
場合には、コマンドラインにて"zoneadm list -vc"を実行し、
myzoneのSTATUSを確認します。もし、STATUSがconfiguredの
ままならcommand実行中に不具合が発生した可能性があるので
1)のオペレーションを再度行ってください。。
STATUSがincompleteの場合は次のオペレーションによりuninstallを
実行した後、installオペレーションで出力されたメッセージに
従って修正を行った後、再度1)のオペレーションを行います。
uninstallの方法は、下記10)を参照してください。
2)install後のzoneのSTATUSを確認します。
# zoneadm list -vc
前回作成したmyzoneというnon-global zoneが、installedの状態に
なっています。
ID NAME STATUS PATH 0 global running / - myzone installed /export/home/myzone
3)bootすることにより、zoneをrunningの状態にします。
zoneのbootはここで紹介したinstalled STATUSの他に
ready STATUSからでも可能です。
# zoneadm -z myzone boot
4)boot後のzone設定について、状況を確認します。
# zoneadm list -vc
下記のように、表示されます。(例)
STATUSがinstalledからrunningの状態になっています。
また、myzoneに対して、固有のzoneID(ここでは1)がシステムにより
割り当てられます。
ID NAME STATUS PATH 0 global running / 1 myzone running /export/home/myzone
以上が、non-global zoneを起動するまでの基本的な流れです。
以降に、non-global zoneを必要に応じて、reboot, halt, uninstallするための
オペレーションを記します。
次章「4.zoneへのlogin」へ進む場合には、uninstallは実行しないでください。
もし、uninstallした場合には、再度install, bootオペレーションが必要となります。
5)rebootの方法。
現状のSTATUSがrunningになっていることを確認します。
# zoneadm list -vc
ID NAME STATUS PATH 0 global running / 1 myzone running /export/home/myzone
6)rebootを実行します。しばらくすると、コマンドプロンプトが戻ってきます。
# zoneadm -z myzone reboot
7)現状のSTATUSが再びrunningになっていることを確認します。
# zoneadm list -vc
ID NAME STATUS PATH 0 global running / 2 myzone running /export/home/myzone
[注]global zoneのIDは、常に0で固定ですが、non-global zoneは、
bootの都度、新しいIDがシステムにより自動的に割り当てられます。
8)haltの方法。
# zoneadm -z myzone halt
9)halt後のzone設定について、状況を確認します。
# zoneadm list -vc
下記のようにSTATUSがrunningからinstalledに戻っています。
また、zoneIDも取り消されています。
ID NAME STATUS PATH 0 global running / - myzone installed /export/home/myzone
10)Uninstallの方法。
必ず、zoneがinstalled STATUSの状態で実行してください。
(running のままだとエラーになります。)
# zoneadm -z myzone uninstall -F
11)現在のzoneの状態を確認します。
# zoneadm list -vc
次のように、install前の状態に戻っています。
ID NAME STATUS PATH 0 global running / - myzone configured /export/home/myzone