LoginSignup
1
0

More than 3 years have passed since last update.

GCEでNestedVirtualization対応のUbuntuインスタンスを立てる

Last updated at Posted at 2020-06-04

はじめに

対象読者

  • ネストされた仮想化 ( Nested Virtualization ) 環境を、なるべく安価にクラウドで触りたい
    • 具体例としては Android Studio でのエミュレータをクラウドで動かしたい
    • 今回は GCP - GCE でおこなう

各ベンダーのコストと選定

  • GCP ( Google Cloud Platform )
    • GCE ( Google Compute Engine ) の N1 プランで月額最低 3,000 円程度からインスタンスを立てられる
      • とはいえ Android エミュレータ動かすなら vCPU * 2 + メモリ 3.75 GB 環境くらいは必要になってくるので 5,000 円以上はかかる
  • Microsoft Azure
    • fvs2 で月額最低 8,000 円程度から
  • さくら
    • 専有サーバで対応している。月額 20 万円ほど……
  • DigitalOcean
    • コスト的には一番安く月額最低 2,000 円程度からいけるらしい(未検証)
    • ただし日本リージョンが存在していないため、遅延が大きいのがネックとなる

Nested Virtualization 対応のイメージ作成

自作インスタンスのイメージを用意する

インスタンスを用意しておく

  • Nested Virtualization 対応させたい OS ( ここでは Ubuntu 20.04 ) のインスタンスを一つ作成します
  • ここで指定したイメージ名は後で使います
  • スペックも、以後使いたいものと同等にしておくと、後が楽です
  • インスタンス作成後、ログインしてパッケージ更新など済ませておくと、これまた後が楽です
apt update
apt upgrade

インスタンスを停止

  • 準備ができたら、管理画面でインスタンスを停止

Nested Virtualization 対応のイメージ作成

cloud shell でコマンド実行

  • --project
    • project_name のところに、自身の環境におけるプロジェクト名を指定
  • images create
    • create_image_name のところに、自身の作成したイメージ名を指定
  • --source-disk
    • source_image_name のところに、自身の作成したイメージ名を指定
  • --source-disk-zone
    • zone_name のところに、インスタンスを作成した時に自身で設定した zone を指定
gcloud compute --project=project_name images create create_image_name --source-disk=source_image_name --source-disk-zone=zone_name --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
  • 実行後、以下のように表示されたら成功です
Created [https://www.googleapis.com/compute/v1/projects/project_name/global/images/create_image_name].
NAME               PROJECT            FAMILY  DEPRECATED  STATUS
create_image_name  project_name                           READY

イメージが作成されていることを確認

  • 左メニューの「イメージ」を選ぶと、その中に create_image_name が存在していることが確認できます
    • 「マシンイメージ」ではなく単なる「イメージ」の方です

インスタンス作成

  • 「イメージ」の中にある create_image_name を選択して「インスタンス作成」実行
  • 通常通りにインスタンス作成を進めていく
    • リージョンは「イメージ」が置いてあるところと異なるリージョンでも、指定できます
    • ブートディスクのところが create_image_name になっているはずです

対応したインスタンスへの接続と確認

接続

  • ターミナル等から ssh 接続してください

確認

  • 以下コマンドを打って vmx が flags 内にあれば OK です
cat /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat md_clear arch_capabilities

おわりに

感想

  • ここまで辿り着くのに時間かかった……! 日本語での情報少ないというか、まず公式ドキュメントが日本語だとよくわからなくて、まだ英語の方が理解しやすい
  • GCE のインスタンス、やっぱりそこそこのスペック積まないと Android エミュレータはしっかり動いてくれないなあ……

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0