Azure VM上のHyper-VでホストするVM(Nested Hyper-V VM)をAzure Arcに登録してみる
モチベ
- 久々にAzure Arcを触っておきたい気分になった
- 手元のLaptop上にHyper-V立ててArcに登録するだけではイメージしやすいけど面白みがない
- AzureVM上のVM(Nested-VM=入れ子になったVM)で構成してみると面白そうかも
ということで、
- Azure VMにHyper-Vを入れ、
- Nested Hyper-V VMを作成し、
- Nested Hyper-V VMがインターネットアクセスできるように構成し、
- Nested Hyper-V VMをAzure Arcに登録する
ということをやってみる。
Nested Hyper-Vとは?
Nested Hyper-Vについては、公式ドキュメントにおいて以下のように説明されています。
入れ子になった仮想化は、Hyper-V 仮想マシン (VM) 内で Hyper-V を実行できるようにする機能です。 この数年でハードウェアが改良され、入れ子になった仮想化のユース ケースが拡大しています。 たとえば、入れ子になった仮想化は次の場合に役立ちます。
- 入れ子になった VM でのアプリケーションまたはエミュレーターの実行
- VM でのソフトウェア リリースのテスト
- トレーニング環境でのデプロイ時間の短縮
- Hyper-V によるコンテナーの分離の使用
Azure VM上にNested Hyper-V VMの作成
VMの作成
- Azure上に適当にWindows Serverマシンを立てる
- すべてのVMサイズでHyper-Vを有効化できるわけではなく、
_v3
以上のVMサイズを利用するのが無難
- Hyper-Vの有効化
Hyper-V上でNested VMの作成
-
ローカル上ではあるが過去にも同様の作業をしているのでこちらの記事も参考に
https://zenn.dev/microsoft/articles/26ad363666c4cd -
Visual Studio特典を持っていればここから評価用ではないisoを落とすことが可能
-
(今回日本語版のisoを利用したが、手元のキーボードがUSキーボードだったためEnglish版の方がよかったかも)
Nested Hyper-V VMのインターネットアクセス
- Azure Arcの利用を前提としているため、Nested Hyper-V VMからインターネットアクセスができるようにする必要がある
- Azure Connected Machine Agentの通信のため
- よって以下の記事に倣って設定を進めていく
Azure では、Azure IaaS の VM に対して、Azure 基盤側の仮想ネットワークから内部 IP アドレスを配っています。
静的な内部 IP アドレスであったとしても、DHCP サーバー経由で割り当てられるという意味になります。
VM on VM (Nested Hyper-V VM と呼びます) の場合、つまり Azure IaaS 基盤から認識をしていない Nested Hyper-V VM 側への IP アドレスを配ることは Azure 側からは出来ません。
このため、Azure VM として稼働させている、Nested Hyper-V のホスト側で NAT を構成しなければなりません。
- ホストOSのHyper-V Manager上で[Virtual Switch Manager]を開く
-
Internal
で[Create Virtual Switch]
- 適当に名前を変更。ここでは
internal
という名前を付けている。
- Nested Hyper-V ホスト側で以下のコマンドを実行
New-NetNat –Name myNAT –InternalIPInterfaceAddressPrefix "172.16.1.0/24"
Get-NetAdapter "vEthernet (internal)"| New-NetIPAddress -IPAddress 172.16.1.1 -AddressFamily IPv4 -PrefixLength 24
- "vEthernet (internal)"が認識されているかどうかは
Get-NetAdapter
コマンドによって確認できる
> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet Microsoft Hyper-V Network Adapter 5 Up 00-22-48-2D-AE-67 40 Gbps
vEthernet (New Virtual... Hyper-V Virtual Ethernet Adapter #2 18 Up 00-15-5D-00-04-02 10 Gbps
vEthernet (internal) Hyper-V Virtual Ethernet Adapter 12 Up 00-15-5D-00-04-01 10 Gbps
-
Hyper-V Managerの[Settings]から作成したスイッチをアタッチする
-
Nested VMにログインしてIPv4の設定をしていく
- 少し待つと、Nested Hyper-V VMでインターネットアクセスができるようになっている
Azure Arcとの接続
-
Azure PortalからAzure Arcの画面を開く
-
サーバを追加から[単一サーバの追加]>[スクリプトの生成]と進む
-
リソースとして追加する際のパラメータを入力していく
-
最終的にスクリプトが生成されるので、スクリプトをコピーしてNested Hyper-V VM上で実行する
- Nested Hyper-V VMでPowerShellを開いてペーストすると文字数が多すぎてエラーになったため、
.ps1
に落とし込み右クリックの[PowerShellで実行]から実行した
- Nested Hyper-V VMでPowerShellを開いてペーストすると文字数が多すぎてエラーになったため、
-
実行するとAzure AD(Microsoft Entra ID)認証の画面が出るため、認証を通す
- 実行自体はすぐに終わる
- 実行自体はすぐに終わる
-
Azure Portalを見てみると、サーバが登録されていることが確認でき、OSも今回利用している評価用(
Windows Server 2022 Datacenter Evaluation
)として認識されていることがわかる
おわり
- Azure VM上のVMをAzure Arcに登録するというシナリオは検証用途が中心になるかもしれないが、Azure上だけで完結できるため利用するタイミングは少なからずあるのではないかと思われる
- Nested Hyper-V VMを利用する際のキモとしてはやはりインターネットアクセスができるようにNATを構成するところだった
- いつか役に立つ日が来ることを願うばかり、、、。
Discussion