はじめに
Google Cloud 上で、ネストされた仮想化を有効化して、vmdk ファイルからゲスト OS を動作させることを試してみたので、ネストされた仮想化有効化手順についてご紹介します。
ネストされた仮想化 について
通常、仮想化されたサーバは物理サーバー上で動作するハイパーバイザーによって管理、実行されます( VMware など)。
それに対して、ネストされた仮想化 とは、仮想化されたサーバ上で更に仮想化を行い、そこで仮想化サーバ(ゲストOS)を動作させる技術です。
こちらを Google Cloud で例えるならば、Compute Engine 上でハイパーバイザーを動作させ、そこで仮想化サーバ(ゲストOS)を動作させるようなイメージです。
Google Cloud では、Compute Engine の一部の VM インスタンスで、このネストされた仮想化がサポートされています。
以下、Google Cloud 上のドキュメントでわかりやすいものがございましたので、以下参考に御覧ください。
利用したきっかけ
導入予定のミドルウェアが VMware で扱えるファイル形式の vmdk で提供されていたため、仮想化が必要な状況となりました。その中で今回の手順にて解決しましたので、ご紹介となります。
Google Cloud で ネストされた仮想化を有効にする
具体的に Google Cloud でネストされた仮想化を有効にするにはどのようにすれば良いか、以下に記載します。
当該記事には特別なライセンスキーを使用して仮想化を有効化したものの、実行方法は含んでおりません。
前提条件
- サポートされているのは Linux KVM のみとなり、 Hyper-V はサポートされていません。
- 利用可能な VM インスタンスタイプの制限や、それ以外の制限もありますので、詳細はこちら参照ください
新しい VM で直接有効化する
こちらの手順を参考に記載します。
VM 作成時に enableNestedVirtualization
フィールドを true
に設定します。
新規 VM に対する有効化
VM インスタンスを作成する際に、 --enable-nested-virtualization
フラグを追加します。また、 --min-cpu-platform="Intel Haswell"
を指定して、対応するCPUプラットフォームを選択します。
以下を実施することで、ネストされた仮想化を有効化した、Compute Engine を作成することができます。
1 2 3 4 5 6 7 8 | gcloud compute instances create VM_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --image-project=IMAGE_PROJECT \ --image-family=IMAGE_FAMILY \ --boot-disk-size=SIZE \ --min-cpu-platform="Intel Haswell" \ --enable-nested-virtualization |
※VM_NAME
、ZONE
、MACHINE_TYPE
、IMAGE_PROJECT
、IMAGE_FAMILY
、SIZE
は適宜置き換えます。
既存の VM に対する有効化
既存の VM でも、以下手順で設定を更新することでネストされた仮想化を有効にできます。
ステップ1
以下を実施しインスタンスの設定情報をエクスポートします。
1 2 3 | gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE |
※VM_NAME
、YAML_FILE_PATH
、ZONE
は適宜置き換えます。
ステップ2
エクスポートされた設定ファイルのenableNestedVirtualization
を更新します。値がない場合、以下のように更新します。
1 2 | advancedMachineFeatures: enableNestedVirtualization: true |
ステップ3
ネストされた仮想化を有効化したファイルをインポートします。
1 2 3 4 | gcloud compute instances update-from-file VM_NAME \ --source=YAML_FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE |
※VM_NAME
、YAML_FILE_PATH
、ZONE
は適宜置き換えます。
ネストされた仮想化が VM で有効になっていることを確認する
VM インスタンスに SSH 接続した後、以下のコマンドを実行することで、ネストされた仮想化が有効になっているか確認できます 。
1 | grep -c vmx /proc/cpuinfo |
このコマンドが 0 以外のレスポンス を返せば、ネストされた仮想化が有効になっています。
結果が確認できることで、Virtualbox や VMware などのハイパーバイザーを動作させることが可能となります。
まとめ
確認した範囲では、コンソールからの作成はできないものではありますが、CLI からでも容易にコマンドでネストされた仮想化の作成可能なことがわかりました。同じことを他クラウドで行う場合、高額なインスタンス料金がかかったりしますが、Google Cloud では、比較的安価な料金での利用が可能となります。
もし、ネストされた仮想化が求められるケースに出くわした際は、Google Cloud の利用も含めて検討できるきっかけになればと思います。
なお、こちらはあくまでも利用が必要なケースに導入するというものであり、ネストされた仮想化を利用せずに、直接ミドルウェアを導入することが可能であれば、それが一番なので、こういった方法もある、という認識してもらえればと思います。