Solaris コンテナ Zone の導入
OpenSolaris 2009.06 を VMware Workstation 上に乗せて、Solaris コンテナ Zone を導入してみました。
zfs の snapshot も強力だけど、zone もなかなか。
Solaris のお作法を覚えるのが少し大変かな・・・?
zone の管理コマンドは主に zonecfg, zoneadm, zlogin の3つです。
1. zone 用ファイルシステムの作成
1.1. ファイルシステムの作成
zone 用のファイルシステムを作成します。「/rpool/zones」に各コンテナを置くことにして、「test001」というコンテナを置くファイルシステムを作成します。
root@opensolaris131:~# zfs create rpool/zones root@opensolaris131:~# zfs create rpool/zones/test001
1.2. パーミッションの変更
zone 環境は他の環境から見られないようにパーミッションを設定する必要があるため、700 に変更します。
root@opensolaris131:~# chmod 700 /rpool/zones/test001
パーミッションが正しく設定されていない場合、後のインストール作業時にエラーが発生します。
root@opensolaris131:~# zoneadm -z test001 install /rpool/zones/test001 must not be group readable. /rpool/zones/test001 must not be group executable. /rpool/zones/test001 must not be world readable. /rpool/zones/test001 must not be world executable. could not verify zonepath /rpool/zones/test001 because of the above errors. zoneadm: zone test001 failed to verify
1.3. マウント状態の確認
作成したファイルシステムを df で確認します。作成したファイルシステムがマウントされていれば成功です。
root@opensolaris131:~# /usr/gnu/bin/df -hT Filesystem Type Size Used Avail Use% Mounted on rpool/ROOT/opensolaris zfs 15G 3.4G 11G 25% / swap tmpfs 939M 312K 938M 1% /etc/svc/volatile /usr/lib/libc/libc_hwcap1.so.1 lofs 15G 3.4G 11G 25% /lib/libc.so.1 swap tmpfs 938M 16K 938M 1% /tmp swap tmpfs 938M 72K 938M 1% /var/run rpool/export zfs 11G 21K 11G 1% /export rpool/export/home zfs 11G 21K 11G 1% /export/home rpool/export/home/kei zfs 11G 203M 11G 2% /export/home/kei rpool zfs 11G 80K 11G 1% /rpool rpool/zones zfs 11G 19K 11G 1% /rpool/zones rpool/zones/test001 zfs 11G 19K 11G 1% /rpool/zones/test001
2. zone の作成
2.1. 構成情報の設定
新しい zone として test001 を作成します。構成情報が存在しないため、create で作成するように促されます。
root@opensolaris131:~# zonecfg -z test001 test001: No such zone configured Use 'create' to begin configuring a new zone.
2.2. 構成情報の作成
構成情報を新規作成します。空の構成情報に対話で設定を追記していきます。
zonecfg:test001> create2.3. パスの指定
zone 用に作成したファイルシステムを指定します。
zonecfg:test001> set zonepath=/rpool/zones/test001
2.4. ネットワークインターフェースの追加
NIC と IP アドレスを指定します。Solaris は NIC に複数の IP アドレスを持たせることができます。物理 NIC e1000g0 を指定した場合、 e1000g0:1 に IP アドレスが登録されます。DHCP は使用できません。
zonecfg:test001> add net zonecfg:test001:net> set physical=e1000g0 zonecfg:test001:net> set address=10.11.161.83 zonecfg:test001:net> end
2.5. 構成情報の確認
info で構成情報を確認できます。最低限の情報は記述されました。
zonecfg:test001> info zonename: test001 zonepath: /rpool/zones/test001 brand: ipkg autoboot: false bootargs: pool: limitpriv: scheduling-class: ip-type: shared hostid: net: address: 10.11.161.83 physical: e1000g0 defrouter not specified
2.6. 構成情報のコミット
verify で構成情報を確認し、commit でコミットします。
zonecfg:test001> verify zonecfg:test001> commit
2.7. 構成情報設定の終了
exit で構成情報の設定を終了します。
zonecfg:test001> exit
2.8. 構成情報の所在
/etc/zones/ 配下に構成情報が保存されます。
root@opensolaris131:~# ls /etc/zones/ SUNWblank.xml SUNWipkg.xml index SUNWdefault.xml SUNWlx.xml test001.xml
構成情報を編集する場合は、XML ファイルは直接編集せずに zonecfg を使用します。
XML は以下のようになっています。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1"> <!-- DO NOT EDIT THIS FILE. Use zonecfg(1M) instead. --> <zone name="test001" zonepath="/rpool/zones/test001" autoboot="false" brand="ipkg"> <network address="10.11.161.83" physical="e1000g0"/> </zone>
3. zone のインストール
3.1. インストール
インストールを開始すると、ダウンロードからインストールまで行われます。
root@opensolaris131:~# zoneadm -z test001 install Publisher: Using opensolaris.org (http://pkg.opensolaris.org/release/). Image: Preparing at /rpool/zones/test001/root. Sanity Check: Looking for 'entire' incorporation. Installing: Core System (output follows) DOWNLOAD PKGS FILES XFER (MB) Completed 20/20 3021/3021 42.55/42.55 PHASE ACTIONS Install Phase 5747/5747 Installing: Additional Packages (output follows) DOWNLOAD PKGS FILES XFER (MB) Completed 37/37 5598/5598 32.52/32.52 PHASE ACTIONS Install Phase 7329/7329 Note: Man pages can be obtained by installing SUNWman Postinstall: Copying SMF seed repository ... done. Postinstall: Applying workarounds. Done: Installation completed in 476.938 seconds. Next Steps: Boot the zone, then log into the zone console (zlogin -C) to complete the configuration process
3.2. 起動
起動するとサブネットの設定がされていないため警告が出ますが、エラーではありません。
root@opensolaris131:~# zoneadm -z test001 boot zone 'test001': WARNING: e1000g0:1: no matching subnet found in netmasks(4): 10.11.161.83; using default of 255.0.0.0.
3.3. コンソール接続
コンソール接続を行うと初回設定が開始されます。
root@opensolaris131:~# zlogin -C test001 [Connected to zone 'test001' console]
3.4. 初回設定
コンソール接続を行うと初回設定が開始されます。
まずは使用しているターミナルを選択します。
X 上で動作確認しているので、 X Terminal Emulator (xterms) を選択しました。
F2 キーで次の画面へいくことになっていますが、F2 キーが入力できないときがあります。
そのときは Esc キーを押してから 2 キーを押すと次の画面へ進めますし、そのように画面にも表示されます。
ホスト名を入力して次の画面へ進みます。
kerberos の設定です。
特に設定せず次へ進めました。
ネームサービスの設定です。
None にして次へ進めました。
NFS の設定です。
標準のまま次へ進めました。
タイムゾーンの設定です。
Asia を選択して次の画面で Japan を選択します。
次の画面へ進めます。
root のパスワードを設定します。
設定が終わると元の画面に戻り、root でログインできます。
コンソールログアウトする場合には ~. と入力します。
4. zone の削除
4.1. 状態の確認
zoneadm で zone の状態を確認できます。
test001 が running 状態です。削除する前に停止処理を行います。
root@opensolaris131:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 test001 running /rpool/zones/test001 ipkg shared
4.2. 停止
halt で zone を停止します。状態を確認すると、STATUS が installed になります。
root@opensolaris131:~# zoneadm -z test001 halt root@opensolaris131:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - test001 installed /rpool/zones/test001 ipkg shared
4.3. アンインストール
uninstall で zone 環境をアンインストールします。状態を確認すると、STATUS が configured になります。/etc/zones/ 以下に構成が記述された xml が残っていることを確認できます。
root@opensolaris131:~# zoneadm -z test001 uninstall Are you sure you want to uninstall zone test001 (y/[n])? y root@opensolaris131:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - test001 configured /rpool/zones/test001 ipkg shared root@opensolaris131:~# ls /etc/zones/ SUNWblank.xml SUNWdefault.xml SUNWipkg.xml SUNWlx.xml index test001.xml
4.4. 構成情報の削除
delete で zone 構成情報を削除します。リストからも削除され、構成情報ファイルも削除されます。
root@opensolaris131:~# zonecfg -z test001 delete Are you sure you want to delete zone test001 (y/[n])? y root@opensolaris131:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared root@opensolaris131:~# ls /etc/zones/ SUNWblank.xml SUNWdefault.xml SUNWipkg.xml SUNWlx.xml index
4.5. アンマウントの確認
df で zone 用ファイルシステムが削除されアンマウントされていることを確認します。
root@opensolaris131:/rpool/zones# df -h Filesystem size used avail capacity Mounted on rpool/ROOT/opensolaris 16G 3.4G 11G 25% / /devices 0K 0K 0K 0% /devices /dev 0K 0K 0K 0% /dev ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 947M 312K 947M 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /usr/lib/libc/libc_hwcap1.so.1 14G 3.4G 11G 25% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 947M 16K 947M 1% /tmp swap 947M 72K 947M 1% /var/run rpool/export 16G 21K 11G 1% /export rpool/export/home 16G 21K 11G 1% /export/home rpool/export/home/kei 16G 203M 11G 2% /export/home/kei rpool 16G 79K 11G 1% /rpool rpool/zones 16G 19K 11G 1% /rpool/zones
5. non-global zone の管理
プロセス管理
global zone から non-global zone のプロセスを見られるように、ps コマンドが拡張されているようです。
zone を指定して -Z をつけると、指定した zone のプロセスが表示されます。
ps -z test001 -Z
サービス管理
global zone から non-global zone を操作するには、zlogin の後にコマンドを入れるようです。ssh と同じような使い方ですね。
SMF サービスの状態を確認する svcs を渡して non-global zone のサービスの状態を取得します。
zlogin test001 svcs -adtrace
dtrace も zone 環境に対して使えるようです。
知りたいこと
global-zone からどこまで non-global zone を扱えるのかということ。
/proc 配下は見えるものの、Linux と違い複雑な構成になっているので扱い方が分かりません。
また SNMP 等で global-zone に問い合わせるだけで non-global zone の状態を知ることなどは可能なのでしょうか?
などなど。Solaris 勉強会などにも顔を出しながら調べていけたらと考え中です。識者、歓迎です。






















この長さになると目次が欲しい。
確かに。追加しときま。
# google sites とかの自動目次生成が欲しい。