11においてOS標準の仮想化技術として重要な役割を担うようになりました。11では各ゾーンで独立して設定できるようになりました。10では各ゾーンがNFSサーバーになれなかったため、ゾーン内でshareコマンドやZFS設定などを用いてNFS共有を作成することが出来ませんでした。11ではそこが改善されNFSサーバー機能が追加されています(ただしZFSのSMBサーバー機能はまだグローバルゾーンでしか使用できません)。11のゾーンはオプションが多数存在するため、ここではごく簡単な例を挙げて構築手順をトレースしていきたいと思います。この手順だけでもハマりどころは結構多く、それなりに有益だと考えています。Solarisをインストールした直後は次のようにグローバルゾーン(親)だけが作成された状態になっています。11からはOSがSolarisの場合のBRAND「native」でなく「solaris」となります。2.4系列カーネル)のインストールが出来なくなりました。8/9のゾーンが存在します(これらのゾーンをインストールするにはサポート契約が必要です)。IPは、グローバルゾーンについては「shared」であり、他のゾーンと共用できることを示しています。次にZFSの内容を見ていきます。11のゾーンではZFSの利用が必須となるため、事前の情報収集が必要となるからです。-このZFS上のどこかにゾーンのための領域を確保します。今回はrpool/zonesをゾーンのための領域として確保し、ファイルシステム上の/export/zonesにマウントすることにします。/export/zonesさらに、作成するゾーンに直接割り当てる領域を確保します。名称は任意ですが、ゾーン名と一致させる、ゾーン名にプリフィックスまたはサフィックスを付けたものにする、などゾーンとの対応が明確になるように命名すると後々の管理が楽になります。ここではゾーン名(「sinope」を予定)と一致させることにしました。/export/zones/sinope実は、ゾーンのための領域には条件があり、rootが所有者で、かつ所有者以外のアクセスを禁止しなければなりません。ファイルシステム作成時はumaskに合わせて所有者以外にも何らかのアクセス権が与えられている可能性があるため、これを修正します。zones今回の例では/export/zones以下に所有者以外に対する読み込み・実行権限が与えられていたため、これを禁止しました。これを行わないとゾーン作成ができません。次にNICの準備を行います。11では、dladmとipadmの2つのコマンドでNICを管理します。show-physコマンドで現在マシンに装備されているNICの構成情報を表示します。show-linkコマンドで現在のNICのリンク状態を表示します。--e1000g0がNICの物理名で、これはNICのドライバによって決まってきます。PRO/1000シリーズのギガビット・イーサネットカードであることを示しています。11では物理名に対して任意の論理名を付加し、通常は論理名を用いてNICを識別します。ゾーンに割り当てるNICは、グローバルゾーンのNICを共有するか、仮想NICを作成してそれを用いることで用意します。10に近い構成となります。11のネットワーク仮想化機能を活用することができ、例えばゾーンの手前に仮想のファイアウォールを構築するようなことも可能になります。今回は仮想NICを作成する方法を採ります(マニュアルでもこちらが第1選択肢となっています)。共有NICを使用する方法は他を参照してください。create-vlanコマンドでホストNIC上に仮想LANを作成すれば良いです。11のネットワーク仮想化機能ではこの後に仮想NICや仮想スイッチなどを組み合わせて仮想ネットワーク環境を構築するのですが、ゾーンに仮想NICを割り当てるだけであれば仮想LANをそのままNICとして使えばよいです。create-vlanコマンドの書式は、以下の通りです。<仮想LAN名>上記の例では、net0とリンクするvnic1という仮想LANを作成します。ID省略時は自動的に設定されます。net0が予約していることから、小さな番号は物理NICが占有している可能性が高いです)。イメージとしてはホストのNICに直接つながるスイッチが作成され、そこからLANケーブルを1本引いてきた感じです。create-addrでIPアドレス(およびサブネットマスク)を割り当てるのですが、ゾーンのNICとして使う場合には不要です。ipadmコマンドで設定済みの仮想NICを使おうとするとゾーン構築時にエラーとなり、設定解除するよう促されます。show-linkコマンドでNICのリンク状態を表示すると、先ほど作成したvnic1が追加されていることを確認できます。net0これでゾーンを構築する準備は整いました。ゾーン構築後すぐ名前解決ができるように準備をしておきます。今回は/etc/hostsファイルにゾーンのIPアドレスとホスト名のエントリーを追加しました。sinopeまず、zonecfgコマンドで構成情報を準備します。ゾーン名でコマンドを開始します。構成情報のないゾーンについてはこの例のように作成を促されるので、プロンプト上でcreateを発行します。以降、setやaddで必要なパラメーターを設定してゆきます。設定する項目はzonepathで、ゾーンを格納する領域のファイルシステム上でのパスを指定します。パスに問題がある場合、例えばroot以外にアクセス権が与えられていたりするとこの段階でエラーとなります。通常はネットワークを設定するので、ip-typeも設定します。(排他的IP)に設定します。なり、後述のセットアップ画面でIPアドレスなどを設定します。10と同等のパラメーター設定となります(zonecfgでIPアドレスなどを設定する)。共有IPの場合はipadmコマンドで共有するNICの事前設定が必要になり、やってみると意外と厄介だったため、結果的には仮想NICを作成して排他的IPにしてしまったほうが手っ取り早いというのが筆者の所感です。10から引き継ぎ、さらに強化されたパラメーター設定ができます。ゾーンに対して権限を与えることができ、グローバルゾーンとは異なる時計を設定したり、D-Traceをゾーン単位で使用するなど、きめ細かい制御が可能になっています。今回はてっとり早くゾーンを作成するのが目的であるため、それらの説明はすべて割愛します(明示的に設定したほうが良い項目も含めて)。zonecfgで構成した直後のゾーンsinopeは以下のような「configured」状態になっています。exclゾーンにOSをインストールします。/export/zones/sinope/root/var/log/zones/zoneadm.20120318T135214Z.sinope.installOSをインストールした後のゾーンは以下のような「installed」状態となります。exclこの後、ゾーンのセットアップ画面を開始するのですが、ここからの手順は注意が必要です。新しいターミナルを開いてzloginコマンドでログイン操作を行います。この時点でゾーンはまだブートしていないので、このターミナルは待機状態となります。sinope新しく開いたターミナルをそのままにして、元のターミナルからzoneadmコマンドでゾーンのブートを行います。Tool」と表示され、セットアップ画面が始まったら成功です。11のテキストインストーラーとほぼ同じです。11リリースでは、ここに挙げた順序でzloginコマンドを実行しないと、zloginコマンドが応答しなくなる場合があります(少なくとも筆者の環境ではすべての試行でzloginが応答しませんでした)。Zoneにできること・できないこと通常(グローバルゾーン)でできることのほとんどはゾーンで行うことができます。10から引き継いだ強力なリソース制御は使い勝手が改善され、ベアメタル・ハイパーバイザーに匹敵するほどの細かなチューニングまで可能となっています。ゾーンに権限を与えることができるようになり、特に今回のようにネットワーク仮想化と組み合わせた場合、ゾーンの独立性はかなり高くなります。高い独立性を保ちつつ低いリソース負荷で運用できるのがゾーンのメリットです。11のテキストインストール直後とほぼ同等で、インストールされているコマンドは限定されていますが、pkgコマンドを用いて必要なコマンドをインストールすることができます。マニュアルにも記載がある既知の制限事項としては、ZFSに追加されたSMBサーバ機能がゾーン内では使えない(ゾーンをSMBサーバとすることができない)ことが挙げられます。Manager)をSMF経由で起動できないという制限(というかOpenSolaris時代からのバグ)があります。この件に関する詳細はOracleのサポートから得られます。zone」などを含めると探し出せるかと思います。