ブチザッキ兄さん の Dv3 / Ev3 VM と Nested Virtualization を見ればすべて解決ですが、自分メモとして。
Azure のサブスクリプションの利用料金に余裕があるうちは、デモ環境を Azure 上に持っておきたいなと思いまして。
投稿を書いている時点の、MS の公式なアナウンスとしては、次の二つになるかと。
Nested VM の情報については、入れ子になった仮想化による仮想マシンでの Hyper-V の実行 から確認できます。
新しい VM のサイズ
新しい VM のサイズとして、「Dv3」「Ev3」(旧 D11 ~ D14) が使用できるようになりました。
現時点で利用可能なリージョンとしては、次のリージョンとなる感じでしょうか。
- 米国
- 米国西部 2
- 米国東部 2
- ヨーロッパ
- 西ヨーロッパ
- アジア
- 東南アジア
現時点では、米国西部2 を使うと安そうでした。
私の検証の範囲であれば、D8 v3 ぐらいのスペックがあれば、いろいろと検証できそうかなと。
サイズ
|
コア | RAM | 一時ストレージ データディスク本数 |
料金 | |||
米国西部 2 | 米国東部 2 | 西ヨーロッパ | 東南アジア | ||||
D2 v3 | 2 | 8.00 GiB | 16 GB 4 本 |
\19.59/時間 | \21.53/時間 | \21.63/時間 | \22.14/時間 |
D4 v3 | 4 | 16.00 GiB | 32 GB 8 本 |
\39.17/時間 | \43.05/時間 | \43.25/時間 | \44.27/時間 |
D8 v3 | 8 | 32.00 GiB | 64 GB 16 本 |
\78.34/時間 | \86.19/時間 | \86.50/時間 | \88.54/時間 |
D16 v3 | 16 | 64.00 GiB | 128 GB 32 本 |
\156.68/時間 | \172.38/時間 | \173.00/時間 | \177.08/時間 |
D32 v3 | 32 | 128.00 GiB | 256 GB | \313.35/時間 | \344.66/時間 | \345.99/時間 | \354.15/時間 |
D64 v3 | 64 | 256.00 GiB | 512 GB | \626.69/時間 | \689.32/時間 | \691.97/時間 | \708.29/時間 |
E2 v3 | 2 | 16.00 GiB | 32 GB 4 本 |
\22.95/時間 | \25.30/時間 | \25.71/時間 | \25.71/時間 |
E4 v3 | 4 | 32.00 GiB | 64 GB 8 本 |
\45.90/時間 | \50.49/時間 | \51.41/時間 | \51.41/時間 |
E8 v3 | 8 | 64.00 GiB | 128 GB 16 本 |
\91.80/時間 | \100.98/時間 | \102.82/時間 | \102.82/時間 |
E16 v3 | 16 | 128.00 GiB | 256 GB 32 本 |
\183.60/時間 | \198.29/時間 | \205.64/時間 | \205.64/時間 |
E32 v3 | 32 | 256.00 GiB | 512 GB 32 本 |
\367.20/時間 | \403.92/時間 | \411.27/時間 | \411.27/時間 |
E64 v3 | 64 | 432.00 GiB | 864 GB 32 本 |
\692.18/時間 | \761.43/時間 | \775.20/時間 |
Hyper-V の有効化
初期の状態は Hyper-V は有効になっていませんので、Hyper-V の有効化を実施します。
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
仮想ハードディスク配置用の記憶域スペースの作成
Hyper-V の仮想ハードディスクを配置するディスクについては、I/O 性能が求められるため、記憶域スペースを使用したディスクとして切り出しておく必要があるかと。
接続されたディスクで記憶域スペースを構築するためには次のようなスクリプトを実行するとよいかと。
# ディスクの列数の指定 $Columns = (Get-PhysicalDisk -CanPool $true).Count # ストライピングサイズの指定 $Interleave = 64KB # 記憶域スペースの作成 New-StoragePool -FriendlyName datapool ` -StorageSubSystemFriendlyName "*$($ENV:COMPUTERNAME)*" ` -PhysicalDisks (Get-PhysicalDisk -CanPool $true) # 仮想ディスクの作成 New-VirtualDisk -StoragePoolFriendlyName datapool -FriendlyName datadisk ` -UseMaximumSize -ResiliencySettingName Simple -NumberOfColumns $Columns -Interleave $Interleave
NAT ネットワークの設定
基本的な作業は https://github.com/charlieding/Virtualization-Documentation/tree/live/hyperv-tools/Nested で公開されているドキュメントを見るとよいかと。
ネットワークについては NAT スイッチ経由での接続となるため、Github で公開されているドキュメントの内容や、NAT ネットワークの設定 の内容を参考に、仮想マシンからの通信に必要なネットワークを作成していきます。
基本的な構文としては次のようになります。
New-VMSwitch -SwitchName "NAT Switch" -SwitchType Internal $ifindex = (Get-NetAdapter | ? Name -Match "NAT Switch").ifIndex New-NetIPAddress -IPAddress "192.168.0.1" -PrefixLength "24" -InterfaceIndex $ifindex New-NetNat -Name "NAT Network" -InternalIPInterfaceAddressPrefix 192.168.0.0/24
これで、Hyper-V の「内部ネットワーク」のスイッチが作成され、そのスイッチが「192.168.0.1」のゲートウェイとして動作するようになりますので、作成した仮想マシンはこの仮想スイッチに接続をして、指定したプレフィックスのレンジの IP アドレスの割り当てと、ゲートウェイとして指定した IP アドレスを設定することで仮想マシンから外部ネットワークにアクセスが可能になります。
Github のドキュメントでは、VM ホストにDHCP / DNS を設定して、自動的な IP の割り当てを行っており、IP の自動割り当てについても考慮点として出てきそうですね。
内部ネットワークを適切に設定することで、「Nested の仮想マシン -> 外部ネットワーク」への接続ができるようになります。
情報を探したのですが、「外部ネットワーク -> Nested の仮想マシン」のアクセス方法がわかっていないですね…。
Hyper-V ホストからは Nested の仮想マシンに NAT スイッチ経由でアクセスできるのですが、ホスト以外からのアクセス方法がわからず。
ブチザッキ兄さんに「Add-NetNatStaticMapping」でマッピングしたら NAT 配下の VM にアクセスできると教えていただき、試してみたところ、さくっとできました。
ネットワークセキュリティグループの許可が必要となりますが、仮想マシンへの 13389 のアクセスを Nested VM 上の仮想マシンの 3389 にリダイレクトさせる場合は、次のようになります。
$NatName = "NAT Network"
Add-NetNatStaticMapping -NatName $NatName -Protocol TCP -ExternalIPAddress 0.0.0.0 -ExternalPort 13389 -InternalIPAddress 192.168.0.100 -InternalPort 3389
仮想マシンのプロダクトキー
Azure の仮想マシンは、KMS に対して認証が行われています。
Nested VM の仮想マシンの認証についても考慮をしておく必要があります。
単純な方法としては AVMA の利用でしょうか。
AVMA を試してみたところ、Nested VM な仮想マシンでも認証を行うことができました。
slmgr -ipk <avma のプロダクトキー> 実行方法の例 : slmgr -ipk TMJ3Y-NTRTM-FJYXT-T22BY-CWG3J slmgr -ato
AVMA のプロダクトキーについては、Automatic Virtual Machine Activation から確認することができます。
もう一つの方法としては、KMS の利用になるかと。
KMS のプロダクトキーについては、Appendix A: KMS Client Setup Keys から確認できます。
KMS ホストの認識に関しては、オプションにより手動で設定しています。
slmgr -ipk <プロダクトキー> 実行方法の例 : slmgr -ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG slmgr -skms kms.core.windows.net:1688 slmgr -ato