こんにちは、%ユーザー名。
記事の最初の部分では、Solarisのゾーンとは何か、仮想化へのアプローチの1つとしての利点についてお話しました。 通常のゾーンも「バン」やその他の「ベルとホイッスル」なしで正常に確立されました。 同じ部分で、私はあなたがパンにふけると私たちのゾーンにフリルを追加する方法を示したいと思います。
まず、前の記事で作成したゾーンを削除します。 サーバーがZFSファイルシステムにインストールされている場合、ZFSデータセットに新しいゾーンをインストールします。 このファイルシステムの利点と機能は、別の大きな記事に値します。 しかし、要するに、ZFSの機能は次のとおりです。
- ZFSには、ファイルシステム自体だけでなく、パーティションの管理と管理のためのツールも含まれています
- 大容量ストレージをサポート
- データのバックアップ、破損したFSパーツの自己処理(以前に計算されたチェックサムによる)
- ファイルをディスクに書き込むトランザクションモデル
- ZFSプールのホット拡張をサポート
- 無制限のクローンとスナップショットをサポート
- オープンソースであり、Solaris 10、MacOS X、およびFreeBSDで利用可能
「完全ルート」ゾーンのインストール
したがって、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
この記事では、前の部分のコメントに含まれていたコメントを考慮に入れ、約束したことを実証して説明しようとしました。
ご清聴ありがとうございました!