Solaris オペレーティングシステムの Solaris ゾーン機能を使用すると、アプリケーションの実行に適した隔離された環境をシステム上に実現できます。Solaris ゾーンは、Solaris コンテナ環境の構成要素です。
この章で扱う内容は、次のとおりです。
システムにゾーンを作成する準備が完了している場合は、第 17 章非大域ゾーンの構成 (概要)に進んでください。
Solaris ゾーン区分技術は、オペレーティングシステムサービスを仮想化し、アプリケーションの実行に適した安全で隔離された環境を実現するために使用されます。「ゾーン」は、Solaris オペレーティングシステムの 1 つのインスタンス内で作成される、仮想化されたオペレーティングシステム環境です。ゾーンを作成すると、そのアプリケーション実行環境で実行されるプロセスは、システムのほかの部分から隔離されます。この分離を行うことで、1 つのゾーン内で稼働しているプロセスがほかのゾーンで稼働しているプロセスを監視したりそれらのプロセスに影響を及ぼしたりすることが防止されます。スーパーユーザー資格で実行されているプロセスであっても、ほかのゾーンの活動を監視したり操作したりすることはできません。
また、ゾーンにより、アプリケーションを配備するマシンの物理的属性からアプリケーションを分離する抽象層も提供されます。このような属性の例として、物理デバイスパスがあります。
ゾーンは、Solaris 10 リリース以降を実行しているすべてのマシンで使用できます。システムに作成できるゾーン数の上限は 8192 です。1 つのシステムで効率的にホストできるゾーン数は、すべてのゾーンで実行されるアプリケーションソフトウェアに必要な総資源量によって決まります。
Solaris 10 リリースでは、非大域ゾーンのルートファイルシステムモデルには 2 種類あります。疎ルートと完全ルートです。「疎ルートゾーン」モデルは、オブジェクトの共有を最適化します。「完全ルートゾーン」モデルは、構成に関して最大の構成可能性を提供します。 これらの概念については、第 18 章非大域ゾーンの計画と構成 (手順)を参照してください。
Solaris 10 9/10: インストールされる製品 (システム資産と呼ばれる) は、自動登録機能によって制御されます。インストール中に、ユーザーは資格を入力するか、または匿名で登録します。システムの再起動時に、新しい製品のサービスタグが My Oracle Support サーバーにアップロードされます。この機能は、大域ゾーンでのみ使用できます。詳細は、『Solaris のシステム管理 (基本編)』を参照してください。
ブランドゾーン (BrandZ) は、実行時の動作の代替セットを含むコンテナを作成するためのフレームワークを提供します。「ブランド」は、さまざまなオペレーティング環境を指す場合があります。たとえば、非大域ゾーンは、Solaris 8 オペレーティングシステムや Linux などのオペレーティング環境をエミュレートすることができます。
ブランドは、ゾーンにインストールできるオペレーティング環境を定義し、ゾーンにインストールされたソフトウェアが正しく機能するようにゾーン内でのシステムの動作を決定します。また、ゾーンのブランドにより、アプリケーションの起動時に正しいアプリケーションタイプが識別されます。すべてのブランドゾーン管理は、標準のゾーンコマンドの拡張を通して実行されます。管理手順のほとんどはすべてのゾーンで同一です。
Solaris 10 8/07 オペレーティングシステムまたはそれ以降の Solaris 10 リリースを実行する SPARC マシンでは、次の 2 つのブランドがサポートされています。
『Solaris のシステム管理: Solaris 8 Containers』に記載されている solaris8 ブランド、Solaris 8 コンテナ。
『System Administration Guide: Oracle Solaris 9 Containers』に記載されている solaris 9 ブランド、Solaris 9 コンテナ。
Solaris 10 OS でサポートされる他のブランドは次のとおりです。
パート III「lx ブランドゾーン」に記載されている x86 および x64 システム用の Linux lx ブランド
docs.sun.com の Sun Cluster 3.2 1/09 Software Collection for Solaris OS に記載されているcluster ブランド
ラベルが有効になっている Trusted Solaris システムにブランドゾーンを構成してインストールすることはできますが、このシステム構成でブランドゾーンを起動することはできません。
ゾーンは、多くのアプリケーションを 1 台のサーバー上で統合できる環境で使用するともっとも高い効果を発揮します。多数のマシンの管理は複雑でコストがかかるため、より大規模で拡張性の高いサーバーにアプリケーションを統合することが望まれます。
次の図は、4 つのゾーンから成るシステムを示しています。この統合された環境の例では、apps、users、および work の各ゾーンは、ほかのゾーンの作業負荷とは無関係に作業負荷を実行しています。この例は、同じアプリケーションのさまざまなバージョンをそれぞれ異なるゾーンで実行でき、悪影響を引き起こすことなく、統合の要件を満たすことができることを示しています。ゾーンごとにカスタマイズされたサービスを提供できます。
ゾーンを使用すると、システムの資源をより効率的に利用できます。資源の動的再割り当てにより、使用されていない資源を必要に応じてほかのコンテナに移動できます。障害およびセキュリティーの隔離により、動作状態の悪いアプリケーションのために使用率の低い専用のシステムを用意する必要がなくなります。ゾーンを使用すると、このようなアプリケーションをほかのアプリケーションと統合できます。
ゾーンを使用すると、総合的なシステムセキュリティーを維持しながら、管理機能の一部を委譲できます。
非大域ゾーンは、1 つの箱と考えることができます。この箱の中では、システムのほかの部分と相互に作用することなく、1 つ以上のアプリケーションを実行できます。Solaris ゾーンは、ソフトウェアで定義される柔軟な境界を使用して、ソフトウェアアプリケーションやサービスを隔離します。これにより Solaris オペレーティングシステムの 1 つのインスタンス内で実行されるアプリケーションを互いに独立して管理することができます。したがって、同じアプリケーションのさまざまなバージョンをそれぞれ異なるゾーンで実行でき、構成の要件を満たすことができます。
ゾーンに割り当てられたプロセスは、同じゾーンに割り当てられたほかのプロセスを操作、監視したり、これらのプロセスと直接通信したりできます。システムのほかのゾーンに割り当てられたプロセスや、ゾーンに割り当てられていないプロセスに対しては、このような機能は実行できません。異なるゾーンに割り当てられたプロセスどうしでは、ネットワーク API を介した通信のみ可能です。
Solaris 10 8/07 以降では、ゾーンが独自の排他的 IP インスタンスを持っているか、または IP 層の構成と状態を大域ゾーンと共有しているかに応じて、IP ネットワーク接続を 2 通りの方法で設定できます。ゾーンの IP タイプの詳細については、「ゾーンネットワークインタフェース」を参照してください。構成については、「ゾーンの構成方法」を参照してください。
Solaris システムごとに 1 つの「大域ゾーン」があります。大域ゾーンは 2 つの機能を持っています。大域ゾーンは、システムのデフォルトのゾーンであり、システム全体の管理に使用されるゾーンでもあります。「大域管理者」が「非大域ゾーン」(単にゾーンとも呼ばれる) を作成した場合を除き、すべてのプロセスが大域ゾーンで実行されます。
非大域ゾーンの構成、インストール、管理、およびアンインストールは、大域ゾーンからのみ行うことができます。システムハードウェアから起動できるのは、大域ゾーンだけです。物理デバイス、共有 IP ゾーンでのルーティング、動的再構成 (DR) といったシステム基盤の管理は、大域ゾーンでのみ行うことができます。大域ゾーンで実行されるプロセスは、適切な権限が付与されていれば、ほかのゾーンに関連付けられているオブジェクトにもアクセスできます。
非大域ゾーンの特権付きプロセスには許可されていない操作を、大域ゾーンの特権のないプロセスが実行できることもあります。たとえば、大域ゾーンのユーザーは、システムのすべてのプロセスに関する情報を表示できます。この機能がサイトで問題になる場合は、大域ゾーンへのアクセスを制限します。
大域ゾーンも含め、各ゾーンにはゾーン名が割り当てられます。大域ゾーンの名前は常に global となります。各ゾーンには、一意の数値 ID も与えられます。これは、ゾーンの起動時にシステムによって割り当てられます。大域ゾーンには、常に ID 0 が割り当てられます。ゾーンの名前と数値 ID については、「zonecfg コマンドの使用」を参照してください。
各ゾーンには、ノード名も割り当てられます。これは、ゾーン名とは完全に独立した名前です。ノード名は、ゾーンの管理者によって割り当てられます。詳細は、「非大域ゾーンのノード名」を参照してください。
各ゾーンには、ルートディレクトリのパスが設定されます。これは、大域ゾーンのルートディレクトリに対する相対パスです。詳細は、「zonecfg コマンドの使用」を参照してください。
デフォルトでは、非大域ゾーンのスケジューリングクラスは、システムのスケジューリングクラスと同じに設定されます。ゾーンのスケジューリングクラスを設定する方法については、「ゾーンのスケジューリングクラス」を参照してください。
priocntl (priocntl(1) のマニュアルページを参照) を使用すると、デフォルトのスケジューリングクラスの変更や再起動を行うことなく、実行中のプロセスを別のスケジューリングクラスに移動できます。
大域管理者は、スーパーユーザー特権または Primary Administrator の役割を持ちます。大域ゾーンにログインすると、大域管理者はシステム全体を監視したり制御したりできます。
非大域ゾーンは「ゾーン管理者」が管理できます。大域管理者が Zone Management プロファイルをゾーン管理者に割り当てます。ゾーン管理者の特権は、非大域ゾーンに対してのみ有効です。
大域管理者が zonecfg コマンドを使ってゾーンを構成します。このとき、ゾーンの仮想プラットフォームやアプリケーション環境に応じて、各種のパラメータを指定します。次に、大域管理者がゾーンをインストールします。大域管理者は、ゾーン管理コマンド zoneadm を使用して、ゾーンに対応するファイルシステム階層にソフトウェアをパッケージレベルでインストールします。大域管理者は、zlogin コマンドを使用して、インストールされたゾーンにログインできます。初回ログイン時にゾーンの内部構成が完了します。次に、zoneadm コマンドを使ってゾーンを起動します。
ゾーンの構成については、第 17 章非大域ゾーンの構成 (概要)を参照してください。ゾーンのインストールについては、第 19 章非大域ゾーンのインストール、停止、複製、およびアンインストールについて (概要)を参照してください。ゾーンへのログインについては、第 21 章非大域ゾーンへのログイン (概要)を参照してください。
ゾーンの構成は完了し、安定した記憶領域に確定されています。ただし、ゾーンのアプリケーション環境の要素のうち、最初の起動後に指定する必要のあるものは、まだ含まれていません。
インストール処理やアンインストール処理の途中は、zoneadm によってターゲットゾーンの状態が「不完全」に設定されます。処理が正常に完了すると、適切な状態に設定されます。
ゾーンの構成はシステム上でインスタンス化されています。zoneadm コマンドにより、指定された Solaris システムでその構成を正常に使用できるかどうかが確認されます。パッケージはゾーンのルートパスにインストールされます。この状態では、ゾーンに関連付けられた仮想プラットフォームはありません。
ゾーンの仮想プラットフォームが確立されています。カーネルにより zsched プロセスが作成され、ネットワークインタフェースが設定されてゾーンで使用可能になり、ファイルシステムがマウントされ、デバイスの構成が完了しています。システムにより、一意のゾーン ID が割り当てられます。この状態では、ゾーンに関連付けられたプロセスは起動されていません。
ゾーンのアプリケーション環境に関連付けられたユーザープロセスが稼働状態です。アプリケーション環境に関連付けられた最初のユーザープロセス (init) が作成されるとすぐに、ゾーンの状態は「稼働」になります。
これらは、ゾーンの停止処理の間に見られる遷移状態です。ただし、なんらかの理由でゾーンを停止処理できない場合は、ゾーンがどちらかの状態で停止します。
zoneadm コマンドを使用してこれらの状態間の遷移を開始する方法については、第 20 章非大域ゾーンのインストール、起動、停止、アンインストール、および複製 (手順)および zoneadm(1M) のマニュアルページを参照してください。
表 16–1 ゾーンの状態に影響を与えるコマンド
ゾーンの現在の状態 |
適用できるコマンド |
---|---|
構成済み |
zonecfg -z zonename verify zonecfg -z zonename commit zonecfg -z zonename delete zoneadm -z zonename attach zoneadm -z zonename verify zoneadm -z zonename install zoneadm -z zonename clone zonecfg を使用して、構成済みまたはインストール済みの状態にあるゾーンの名前を変更することもできます。 |
不完全 |
zoneadm -z zonename uninstall |
インストール済み |
zoneadm -z zonename ready (省略可能) zoneadm -z zonename boot zoneadm -z zonename uninstall は、指定されたゾーンの構成をシステムからアンインストールします。 zoneadm -z zonename move path zoneadm -z zonename detach zonecfg -z zonename を使用すると、attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl、または scheduling-class プロパティーを追加または削除することができます。インストール済み状態のゾーンの名前を変更することもできます。inherit-pkg-dir 資源は変更できません。 |
準備完了 |
zoneadm -z zonename boot zoneadm halt とシステム再起動を実行すると、準備完了状態のゾーンがインストール済み状態に戻ります。 zonecfg -z zonename を使用すると、attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl、または scheduling-class プロパティーを追加または削除することができます。inherit-pkg-dir 資源は変更できません。 |
稼働 |
zlogin options zonename zoneadm -z zonename reboot zoneadm -zzonename halt を実行すると、準備完了状態のゾーンがインストール済み状態に戻ります。 zoneadm halt とシステムの再起動を実行すると、稼働状態のゾーンがインストール済み状態に戻ります。 zonecfg -z zonename を使用すると、attr、bootargs、capped-memory、dataset、dedicated-cpu、device、fs、ip-type、limitpriv、net、rctl、または scheduling-class プロパティーを追加または削除することができます。zonepath 資源と inherit-pkg-dir 資源は変更できません。 |
zonecfg 経由で変更されたパラメータは、稼働中のゾーンには影響しません。変更を適用するには、ゾーンを再起動する必要があります。
ゾーンを使用すると、必要に応じてほぼどのような単位にも細かく隔離できます。専用の CPU、物理デバイス、物理メモリーの一部分などをゾーンに割り当てる必要はありません。このような資源は、1 つのドメインまたはシステムで実行される複数のゾーンに渡って多重化するか、オペレーティングシステムに用意されている資源管理機能を使ってゾーンごとに割り当てることができます。
ゾーンごとにカスタマイズされたサービスを提供できます。基本的なプロセス隔離を強化するために、同じゾーン内のプロセスのみ互いに認識したりシグナルを送信したりできます。ゾーン間で基本的な通信を行うには、各ゾーンに IP 接続機能を持たせます。あるゾーンで実行中のアプリケーションが、別のゾーンのネットワークトラフィックを監視することはできません。それぞれのパケットストリームが同じ物理インタフェースを通過する場合でも、この隔離は維持されます。
各ゾーンには、ファイルシステム階層の一部分が割り当てられます。各ゾーンは、ファイルシステム階層で割り当てられた部分ツリーに限定されます。したがって、特定のゾーンで実行されている作業負荷は、別のゾーンで実行されているほかの作業負荷のディスク上のデータにアクセスすることはできません。
ネームサービスで使用されるファイルは、ゾーン独自のルートファイルシステムのビュー内に置かれます。したがって、異なるゾーンのネームサービスは互いに隔離され、サービスごとに異なる設定を使用できます。
資源管理機能を使用する場合は、資源管理制御の境界とゾーンの境界をそろえる必要があります。このように境界をそろえることで、名前空間のアクセス、セキュリティー隔離、および資源の使用状況をすべて制御できる、より完成された仮想マシンのモデルを作成できます。
ゾーンで各種の資源管理機能を使用するための特殊要件については、このマニュアルでこれらの機能に関連する各章を参照してください。
大域ゾーン以外のゾーンにプロセスを配置したあとは、そのプロセス自体やそのプロセスの子がゾーンを変更することはできません。
ネットワークサービスをゾーンで実行できます。ネットワークサービスをゾーンで実行すると、セキュリティー違反が発生した場合の損害を抑えることができます。ゾーン内で実行されているソフトウェアのセキュリティー欠陥を侵入者が悪用できた場合でも、そのゾーン内で可能な一連の操作しか実行できません。ゾーン内で使用できる特権は、システム全体で使用できる特権の一部のみです。
複数のアプリケーションが異なる信頼ドメインで動作する場合や、大域資源への排他的アクセスを必要とする場合、または、大域の構成を使用すると問題を示すような場合でも、ゾーンを使用することでこれらのアプリケーションを同じマシン上に配備できます。たとえば、各ゾーンにそれぞれ異なる IP アドレスを割り当てるか、ワイルドカードアドレスを使用することで、同じシステム上の異なる共有 IP ゾーンで実行される複数のアプリケーションを同じネットワークポートにバインドできます。アプリケーションが互いのネットワークトラフィック、ファイルシステムデータ、プロセスの活動などを監視したり妨害したりすることもできなくなります。
ゾーンが大域ゾーンやほかの非大域ゾーンとは異なる VLAN や LAN に接続される場合など、ネットワークの IP 層で隔離されている必要がある場合は、セキュリティーの理由から、ゾーンは排他的 IP を持つことができます。排他的 IP ゾーンを使用すると、異なる VLAN や LAN の異なるサブネット上で通信しなければならないアプリケーションを統合することができます。
ゾーンは、共有 IP ゾーンとして構成することもできます。このようなゾーンは、大域ゾーンと同じ VLAN または LAN に接続し、IP ルーティングの構成を大域ゾーンと共有します。共有 IP ゾーンは、個別の IP アドレスを持ちますが、IP のほかの部分は共有します。
ゾーンによって提供される仮想環境では、物理デバイスやシステムのプライマリ IP アドレスとホスト名などの詳細をアプリケーションから隠すことができます。同じアプリケーション環境を、物理的に異なるマシンで維持管理することもできます。仮想化された環境では、各ゾーンを個別に管理できます。非大域ゾーンでゾーン管理者によって行われる操作は、システムのほかの部分に影響を与えません。
ゾーンを使用すると、ほぼどのような単位にも細かく隔離できます。詳細は、「非大域ゾーンの特性」を参照してください。
セキュリティーや隔離の目標を達成するために必要な場合を除き、アプリケーションの実行される環境がゾーンによって変更されることはありません。ゾーンを使用するために、新しい API や ABI にアプリケーションを移植する必要はありません。代わりに、ゾーンでは Solaris の標準インタフェースとアプリケーション環境が提供されます。ただし、いくらかの制限があります。これらの制限は主に、特権付き操作を実行しようとするアプリケーションに影響を与えます。
大域ゾーンで実行されるアプリケーションは、追加のゾーンが構成されたかどうかにかかわらず、変更なしで実行できます。
次の表に、システム上ではじめてゾーンを設定する際に必要となる作業の基本概要を示します。
タスク |
説明 |
説明 |
---|---|---|
ゾーンで実行するアプリケーションを特定します。 |
システムで実行されるアプリケーションを見直します。
|
必要に応じて、ビジネス目標とシステムのマニュアルを参照してください。 |
構成するゾーンの数を決定します。 |
次の内容を評価します。
|
「現在のシステム設定の評価」を参照してください。 |
コンテナを作成するためにゾーンで資源プールを使用するかどうかを決定します。 |
システム上で資源管理機能も使用する場合は、資源管理の境界とゾーンの境界をそろえます。ゾーンを構成する前に資源プールを構成します。 Solaris 10 8/07 以降のリリースでは、zonecfg のプロパティーを使用して、ゾーン規模の資源制御とプール機能をゾーンにすばやく追加できます。 |
「ゾーンの構成方法」および第 13 章資源プールの作成と管理 (手順)を参照してください。 |
事前構成作業を行います。 |
ゾーン名とゾーンパスを決定します。ゾーンを共有 IP ゾーンにするか排他的 IP ゾーンにするかを決定し、IP アドレスまたはデータリンク名を取得します。各ゾーンに必要なファイルシステムとデバイスを決定します。ゾーンのスケジューリングクラスを決定します。標準のデフォルト特権セットでは十分でない場合は、ゾーンのプロセスを制限するための特権セットを決定します。zonecfg の設定の中には自動的に特権を追加するものがあります。たとえば、ip-type=exclusive はネットワークスタックの構成および管理に必要な複数の特権を自動的に追加します。 |
ゾーンの名前とパス、IP タイプ、IP アドレス、ファイルシステム、デバイス、スケジューリングクラス、および特権については、第 17 章非大域ゾーンの構成 (概要)および 「現在のシステム設定の評価」を参照してください。非大域ゾーンでのデフォルトの特権および構成可能な特権のリストについては、「非大域ゾーン内の特権」を参照してください。IP 機能の使用の可否については、「共有 IP 非大域ゾーンにおけるネットワーク」および 「Solaris 10 8/07: 排他的 IP 非大域ゾーンにおけるネットワーク」を参照してください。 |
構成を作成します。 |
非大域ゾーンの構成を行います。 |
「ゾーンを構成、検証、および確定する」および zonecfg(1M) のマニュアルページを参照してください。 |
大域管理者として、構成されたゾーンの確認とインストールを行います。 |
ゾーンにログインする前に、ゾーンの確認とインストールを行う必要があります。 |
第 19 章非大域ゾーンのインストール、停止、複製、およびアンインストールについて (概要)および第 20 章非大域ゾーンのインストール、起動、停止、アンインストール、および複製 (手順)を参照してください。 |
zlogin コマンドに -C オプションを使用するか、sysidcfg ファイルをゾーンの /etc ディレクトリに配置して、大域管理者として各非大域ゾーンにログインします。 |
|
第 21 章非大域ゾーンへのログイン (概要)および第 22 章非大域ゾーンへのログイン (手順)を参照してください。 |
大域管理者として、非大域ゾーンを起動します。 |
それぞれのゾーンを起動して稼働状態にします。 |
第 19 章非大域ゾーンのインストール、停止、複製、およびアンインストールについて (概要)および第 20 章非大域ゾーンのインストール、起動、停止、アンインストール、および複製 (手順)を参照してください。 |
この新しいゾーンを本稼働用に準備します。 |
ユーザーアカウントの作成、ソフトウェアの追加、およびゾーン構成のカスタマイズを行います。 |
新たにインストールしたマシンを設定するためのマニュアルを参照してください。ゾーン環境に関連する特殊な考慮事項については、このマニュアルを参照してください。 |