Nested Virtualization対応のクラウドは?

2023年5月31日掲載

nested-virtualization

Nested Virtualizationが利用できるクラウドについて調べた記事です。

目次

Nested Virtualizationとは何か

まず、仮想マシンであるVM(Virtual Machine)とは、物理的なハードウェア上に仮想化技術を使用して、仮想的なコンピュータ環境を作成し、その中でオペレーティングシステム(OS)やアプリケーションを稼働させることです。

Nested Virtualizationとは、仮想マシン上で、さらに仮想マシンを動かすことです。日本語だとネストした仮想化、入れ子の仮想化、でしょうか。

Nested Virtualizationの利用目的は?

大手クラウドベンダのクラウド上で、気軽にVMを立ち上げて利用することも多いでしょう。クラウドサービスの具体例を出すと、AWSのEC2などがVMです。VMの上でVMを動作させなくても、別途VMを複数立ち上げればいいのでは、と思われるかもしれません。EC2の上でVMを立ち上げなくても、EC2をスケールアウトしていけばいいのではないか、という疑問です。

何かのサービスを提供するために、インフラとして利用することが目的の場合はその通りなのですが、VM自体の開発や試験をする際は、クラウド側で提供されているVMに依存しないVM環境がほしくなります。異なる環境も自在にエミュレートでき、開発およびテストプロセスもより柔軟に管理できます。

KubernetesやOpenShiftを独自に構築する際も、IaaSとしての共通基盤はVMを使うことになるため、任意の設定が可能なVMへの要求が生まれることがあります。

こういった理由がNested Virtualizationを利用したい動機となります。クラウド上でVM on VMができると、物理サーバの準備が不要となり、非常に便利です。

しかし、実はそう簡単な話ではないということが分かったのでその説明をしていこうと思います。

Nested Virtualizationさせてみよう

VMを自前で立ち上げるとは、どのような作業手順を踏むのかを例示します。

Linuxカーネルが提供する仮想化機能であるKVM(Kernel-based Virtual Machine)と、ハードウェアのエミュレータであるQEMUを使い、virt-managerを通して生成します。

$ sudo dnf install libvirt -y

$ sudo dnf install virt-install -y

$ virt-install \
--name ubuntu00 \
--vcpus 1 \
--cpuset=0 \
--memory 4096 \
--os-variant ubuntu20.04 \
--graphics none \
--extra-args 'console=ttyS0 --- console=ttyS0' \
--location http://us.archive.ubuntu.com/ubuntu/dists/focal/main/binary-amd64/

簡易な例ですが、このようにコマンドを打つだけでVMの構築は完了です。オプションの詳細は省略します。雰囲気を分かってもらえれば十分です。ローカルなサーバ環境ではこれでVMが動きます。

ただし、クラウド側のVM上で同じ操作をすると、以下のレスポンスが返ってきました。

  • 日本語
    ERROR    ホストはどの仮想化オプションにも対応していません
  • 英語
    ERROR    Host does not support any virtualization options

cpuinfoの情報を見てみます。Intelの場合ならvmxが、AMDの場合はsvmが有効になっているはずです。

$ egrep -m 1 "svm|vmx" /proc/cpuinfo
出力なし

確かに、これではVMを作れません。

各クラウドの対応状況

各クラウドがNested Virtualizationに対応しているかを調査します。

AWS

ベアメタルで稼働させるHyper-Vだけ許可されているようです。

Nested Virtualization with HyperV on EC2 instance

Azure

Dv3、Ev3以降であれば対応しています。
やりたいことの、まさにその通りの図もありました。

nested-virtualization

Google Cloud

Google Cloudでもできそうですが、細かく制限があるようです。

L1 VM には次の制限事項があります。
・Linux ベースの OS を実行する必要があります。Windows Server イメージは使用できません。
・GPU が接続された E2、N2D、N1 と、A2 のマシンタイプは使用できません。

・Intel Haswell 以降のプロセッサを使用する必要があります。AMD プロセッサはサポートされていません。ゾーンのデフォルトのプロセッサが Sandy Bridge または Ivy Bridge の場合、そのゾーンの VM の最小 CPU を Intel Haswell 以降に変更してください。各ゾーンでサポートされているプロセッサの詳細については、利用可能なリージョンとゾーンをご覧ください。

L2 VM には次の制限事項があります。
・QEMU を実行できる OS を使用する必要があります。
・ライセンスされた OS の場合、お客様所有ライセンスを使用する必要があります。
nested-virtualization

IBM Cloud

NGです。x86システムのNested技術はIBMが走りだと思っていたので、少し意外です。

Nested virtualization on virtual server instances is not a supported configuration.
nested-virtualization

https://cloud.ibm.com/docs/vpc?topic=vpc-limitations&locale=en


PriVM(Primary VM)が、SecVMs(SecondaryVMs)をネストさせず、cgroupsなどでフラットにSPAWNさせるような技術の方向を探っていたりするようです。

まとめ

クラウド上のVM上でVMを稼働させようと気軽に考えていましたが、クラウドベンダによって対応はまちまちで、また制限があることが分かりました。

理由を少し調べたところ、いくつか課題があるためだそうです。

  • ホスト側のハイパバイザーの拡張がもたらすセキュリティへの懸念
  • IntelやAMDが提唱する下記のような仮想化技術では、ワークロードは暗号化され、単一の仮想化レイヤのみでデコードされる仕様制限が加わる
    AMD:SEV(Secure Encrypted Virtualization )
    Intel:TDX(Trust Domain Extensions)

あとは利用者の多くが求めていないということもあるかもしれません。とはいえ、今回の私のように、VMの試験場を探しているエンジニアもいるのではないでしょうか。本記事がご参考になりましたら幸いです。

関連サービス

Amazon Web Services (AWS)

ソフトバンクはAWS アドバンストティアサービスパートナーです。「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。

Microsoft Azure

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。

Google Cloud

Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。

サービスを見る

IBM Cloud Watson

IBM Watsonの導入は、ソフトバンクにご相談ください。お客さまと共に課題を明確にしIBM Watsonの最適な活用方法をご提案します。

おすすめの記事

条件に該当するページがございません