Solarisコンテナ(ゾーン)。 作成と管理。 パート2

Solarisコンテナ(ゾーン)。 作成と管理。 パート1



こんにちは、%ユーザー名。



記事の最初の部分では、Solarisのゾーンとは何か、仮想化へのアプローチの1つとしての利点についてお話しました。 通常のゾーンも「バン」やその他の「ベルとホイッスル」なしで正常に確立されました。 同じ部分で、私はあなたがパンにふけると私たちのゾーンにフリルを追加する方法を示したいと思います。



まず、前の記事で作成したゾーンを削除します。 サーバーがZFSファイルシステムにインストールされている場合、ZFSデータセットに新しいゾーンをインストールします。 このファイルシステムの利点と機能は、別の大きな記事に値します。 しかし、要するに、ZFSの機能は次のとおりです。







「完全ルート」ゾーンのインストール





したがって、1つの物理ディスクc1t1d0があり、その上にzfsプールを作成し、そこに新しいゾーンをインストールします。



# zpool create -f habrapool c1t1d0







zfsデータセットを作成し、クォータをデータセットサイズ10Gに設定します。



# zfs create habrapool/zone1

# zfs set quota=10G habrapool/zone1

# chown root:root /habrapool/zone1/

# chmod 700 /habrapool/zone1/








現在、次のZFS構造があります。



# zfs list -H | grep habrapool

habrapool 107K 66.9G 23K /habrapool

habrapool/zone1 21K 10.0G 21K /habrapool/zone1








今回は、「完全ルート」ゾーン、つまりグローバルゾーンから継承されたディレクトリが存在しないゾーンを設定します。 ゾーンは、転送された個別のZFSデータセットを管理できるようになり(たとえば、データ用)、独自の個別のネットワークインターフェイスを備えます。 「完全なルート」に新しいアドオンパッケージをインストールしても、通常のOSと変わりません。



# zonecfg -z zone1

zonecfg:zone1> create -b



zonecfg:zone1> set ip-type=exclusive

zonecfg:zone1> add net

zonecfg:zone1:net> set physical=bge1

zonecfg:zone1:net> end

zonecfg:zone1> add dataset

zonecfg:zone1:dataset> set name=habrapool/test

zonecfg:zone1:dataset> end



zonecfg:zone1> verify

zonecfg:zone1> commit

zonecfg:zone1> exit








zonecfg:zone1> create –b- 「空の」構成を作成します。 -bスイッチを使用しない場合、継承されたディレクトリで構造が作成されます

zonecfg:zone1> set ip-type = exclusive-別のインターフェイスを使用することを意味します

zonecfg:zone1> ネットを追加

zonecfg:zone1:net> set physical = bge1-インターフェイスのみを追加します

zonecfg:zone1:net> end

zonecfg:zone1> データセットの追加

zonecfg: zone1 :dataset> set name = habrapool / test -ZFSデータセットをゾーンに裏付ける

zonecfg:zone1:データセット> 終了



ゾーンをインストールして構成すると、その中にデータセットが表示されます。このデータセットでは、ゾーン管理者が独自のデータセットを作成し、それらにクォータ、圧縮などを割り当てることができます。 これにより、ゾーンで高い柔軟性とZFSのフル活用を実現できます。



# zfs list

NAME USED AVAIL REFER MOUNTPOINT

habrapool 3.69G 63.2G 35K /habrapool

habrapool/test 44K 5.00G 23K /habrapool/test

habrapool/test/inzone 21K 1024M 21K /habrapool/test/inzone








zonecfgは対話モード(以前はこのモードが使用されていました)およびコマンドファイルモードで動作するため、たとえば既製のゾーンからコマンドファイルをエクスポートし、それを使用して新しいゾーンを作成できます。



# zonecfg -z zone1 export -f /zone1.cfg

# cat /zone1.cfg



add dataset

set name=habrapool/test



# zonecfg -z zone2 -f /zone1.cfg








ゾーンのクローニング





また、既存のゾーンを複製してゾーンを作成できます。 これを行うには、古いゾーンのデータをクローンする新しいゾーンを作成する必要があります。まず、クローンを作成するゾーンの設定を取得します。



# zonecfg -z zone1 export -f /zone1.cfg







次に、ゾーンパス、ゾーン名、およびIPを修正して構成を編集する必要があります。 編集後、設定は次のようになります。



create -b

set zonepath=/habrapool/zone2

set autoboot=true

set ip-type=shared

add net

set address=10.44.3.90

set physical=bge1

end

add attr

set name=comment

set type=string

set value=zone2








クローン作成をさらに開始します。



# time zoneadm -z zone2 clone zone1

Cloning snapshot habrapool/zone1@SUNWzone1

Instead of copying, a ZFS clone has been created for this zone.

real 0m4.522s

user 0m2.342s

sys 0m0.388s








ZFSが使用されているため、ゾーンはzone1のスナップショットから展開され、手順には約5秒かかります。 クローン作成後の実際の新しいゾーンのサイズは0 MBです。 これは「デルタ」です(データセットzone1とzon2の違い)。 zone2に表示される新しいデータが多いほど、zone1とは異なります。 実際には、このようなソリューションは、新しいゾーンを迅速に展開するために必要です。これらのゾーンは、互いに最小限に違います。 スナップショットからではなく、コピーによってゾーンを作成する必要がある場合、-m copyパラメーターを使用してこれを実行できますが、より長い時間(約6分)を要し、zone2はzone1とまったく同じディスク容量を使用します。



# time zoneadm -z zone2 clone -m copy zone1

A ZFS file system has been created for this zone.

Copying /habrapool/zone1...

real 6m2.939s

user 0m9.545s

sys 1m29.881s








別のホストへのゾーン移行





たとえば、1つのゾーンを1つのホストから別のホストに移行して、それらの1つをオフロードするタスクがあります。 まず、現在のホストから移行ゾーンを「解除」して、移行の準備をする必要があります。



# zoneadm -z zone2 halt

# zoneadm -z zone2 detach








次に、データを別のホストにコピーする必要があります。 tarアーカイブを作成し、パス/ export / data1 /にある別のホストに便利な手段でコピーします。 ターゲットホストにコピーした後、tarアーカイブをディレクトリ/ export / data1 / migrzone1に解凍します。 zonecfg –z newzoneを使用してゾーンを作成し、移動した分離ゾーンのパスを指定します。 その後、ゾーン構成が作成され、ゾーンを接続して起動します:



# zonecfg -z newzone 'create -a /habrapool/zone2'

# zoneadm -z newzone attach

# zoneadm -z newzone boot








ゾーンのCPUとRAM





ゾーンに個別のメモリを割り当てるには、ゾーン構成に次を追加してゾーンをリロードするだけで十分です。



zonecfg:zone1> add capped-memory

zonecfg:zone1:capped-memory> set physical=512m

zonecfg:zone1:capped-memory> set swap=1024m

zonecfg:zone1:capped-memory> end









zonecfg:zone1> capped-memoryを追加 -ゾーンに独自のメモリを選択します

zonecfg:zone1:capped-memory> set physical = 512mは、物理メモリプールからゾーンに発行されるメモリの数です。

zonecfg:zone1:capped-memory> set swap = 1024mは、これまで使用していたスワップではありません。 これは、ゾーン内でアドレス可能な最大仮想メモリを示します。



専用CPUを強調表示するために、このゾーンでのみ使用され、他の(グローバルでも)使用されないVCPUを分離します。 特別なリソースマネージャーを使用してゾーンにCPUリソースを割り当てる方法は他にもありますが、これは別の記事のトピックです。



zonecfg:zone1> add dedicated-cpu



-ゾーンに1 CPUを割り当てます

zonecfg:zone1: dedicated-cpu > set ncpus=1

zonecfg:zone1: dedicated-cpu > end







ゾーンは次のようになります。

bash-3.00# psrinfo -v

Status of virtual processor 0 as of: 07/07/2011 02:14:08

on-line since 07/01/2011 06:56:38.

The sparcv9 processor operates at 1504 MHz,

and has a sparcv9 floating point processor.



bash-3.00# prtconf | grep Memory

Memory size: 512 Megabytes







この記事では、前の部分のコメントに含まれていたコメントを考慮に入れ、約束したことを実証して説明しようとしました。



ご清聴ありがとうございました!



All Articles