清水理史の「イニシャルB」
小型高性能な「おうちHCI」で、仮想マシンを使い捨て感覚で次々デプロイ
ASRock DeskMini 310で作るシングルノード「Nutanix」環境
2020年3月16日 06:00
「テスト用に、しばらくの間、仮想マシンを常時稼働させておきたい……」。このような場合、クラウドに仮想マシンを用意するのが一般的だろう。ただし、使い方によっては毎月のコストが重荷になってくることがある。そこで用意したのが「Nutanix Community Edition」だ。今回は、ASRockの小型ベアボーン「DeskMini 310」を利用し、6コア32GB環境のHCI(Hyper Converged Infrastructure)を稼働させてみた。
小さくて高性能なサーバーで「おうちHCI」を構築
かつての「自宅サーバー熱再び」とでも言ったところだろうか。
このところ、小さくて高性能なPCを自宅サーバーにしたいという欲求が高まっている。
そもそものきっかけは、「月に1~2回ほどの頻度で、数日間連続稼働する仮想マシンが必要」という個人的なニーズからだった。
RPA関連の検証やコンテンツ制作といった用途で、ロボットを稼働させっぱなしにすることが多いのだが、こうしたニーズだと、Windows 10のクライアントHyper-Vは「帯に短し」で連続稼働に向かず、かといってクラウドは「たすきに長し」で無稼働期間のストレージコストがかさんでしまう。
もちろん、仮想化に対応したNASを使うという手もあるが、その場合、ストレージやCPUが決してパワフルなわけではないため、利用にストレスを感じてしまう。
コストを気にしながら遠慮がちにクラウドを使うくらいなら、いっそのこと自宅に仮想化基盤を用意してしまった方がよさそうだということで、行き着いたのが「Nutanix」というわけだ。
無料の仮想化基盤「Nutanix Community Edition」
Nutanixは、いわゆるHCI製品だ。「HCI:ハイパーコンバージドインフラストラクチャー」は、仮想化基盤で使われるサーバー、ネットワーク、ストレージの3要素を、1台のアプライアンスとして提供する仕組みとなる。
従来の仮想化基盤は、サーバー、ネットワーク、ストレージが個別のベンダーから提供されることが多く、複雑かつ大規模な構成が必要だったが、HCIでは1台のアプライアンスにこの機能が詰め込まれており、SDS(Software Defined Storage)などソフトウェアによる仮想化技術を活用して、アプライアンス内部のストレージをクラスタ全体で利用できるようになっている。
中小規模の企業や拠点などのサーバーインフラとして活用されることが多く、通常は専用アプライアンスを複数台接続したクラスタ構成で冗長性や拡張性を確保するが、無償版の「Nutanix Community Edition」を利用すれば、汎用的なPCにソフトウェアをインストールすることで、シングルノードでも稼働させることが可能となっている。
クラウドライクなウェブベースの管理ツールを使って仮想マシンを簡単にデプロイできるなど、その手軽さも特徴の1つだ。例えば、海外のウェブサイトを見ると、Intelの高性能NUCであるSkull Canyonこと「NUC6i7KYK」を3台使ったコンパクトな「Bookshelf Cluster」を構築している猛者までいる。
こうした情報なども参考にしながら、仮想マシンをバンバン作って、課金を気にせず好きなだけ連続稼働させたり、無駄にストレージを使いまくることができる贅沢な環境を用意してみよう。
Nutanix CE用マシンとして、ASRockのベアボーン「DeskMini 310」を用意
というわけで、空いた時間に、いろいろ試行錯誤してみた。
まず、今回利用したハードウェアを紹介しよう。いろいろ検討した結果、ASRockから販売されているベアボーン「DeskMini 310」を利用し、以下の構成で組んでみた。
製品 | コスト | |
ベアボーン | ASRock DeskMini 310 | 1万7409円 |
CPU | Intel Core i5 9400 | 2万2980円 |
メモリ | Crucial DDR4-2666 SO-DIMM 16GB×2 | 1万6540円 |
SSD-1 | Samsung 860 QVO 1TB | 1万990円 |
SSD-2 | Western Digital WD Blue M.2 500GB | 0円(余りもの) |
HDD | Western Digital WD Blue 500GB | 0円(余りもの) |
そのほか | 16GB USBメモリー | 0円(余りもの) |
Nutanix CEの動作要件としては、物理4コア以上でIntel VT-xサポートのCPUと、16GB以上のメモリが必須で、200GB以上のSSD、500GB以上のHDD、Intel NICが推奨される。
ただし、詳しくは後述するが、管理ツールの稼働に大量のメモリが必要になる。このため32GBはないと、複数台の仮想マシンを稼働させるのが厳しい。できれば64GB欲しかったが、SO-DIMMで1枚32GBのモジュールは高価なため、今回は妥協して16GB×2の32GB構成とした。
LANが1Gbps×1(Intel 219-V)なので、複数台の仮想マシンを稼働させると厳しいが、家庭用ということで、こちらも妥協することにした。
結論から言えば、このハードウェア構成でも、6~7台の仮想マシンを稼働させるには十分だ。稼働後の状況を見てみると、ティア2用のHDDがほとんど使われないので(ストレージ仮想化によりSSDにホットデータ、HDDにコールドデータを自動的に配置してくれる)、SSDだけの構成でもよかったように思えるが、このあたりはもっと長期間稼働させてみてから判断する必要がありそうだ。
さて、インストールの基本的な流れは、以下の通りだ。
- Nutanix CEのダウンロード
- USBメモリーへの書き込み(USB Writer 1.3使用)
- USBブート(USBはつなぎっぱなし)
- インストール
VMwareなどの仮想環境へ、ネステッドでさらにNutanix CEをインストールする例もあるが、今回はまっさらなPCに直接ベアメタルでインストールを行なった。
ASRock DeskMini 310には、microSDカードスロットがマザーボード上に搭載されているため、当初はここから起動しようと考えていたのだが、microSDからの起動時にエラーが発生してしまったため、背面のUSB 3.0ポートにUSBメモリーを装着し、こちらから起動させることにした。
なお、一部の機能はUSBメモリー上でそのまま稼働するため、つなぎっぱなしで運用する必要がある点には注意が必要かもしれない。
このほかの注意点は、Nutanix CEのダウンロードが少々ややこしい点だろう。NutanixのCommunity Editionのウェブページから「Nutanix Next Community Download Software」のリンクにアクセスすると、「Nutanix Next」というユーザーコミュニティに転送される。
そのままではアクセスが拒否されるので、Nutanix Nextにユーザー登録してログインした上で、もう一度アクセスすると、掲示板の投稿を参照できるようになる。この投稿にダウンロード用のリンクが掲載されているので、そこからダウンロードするという流れだ。
インストールは、画面の表示に従っていくだけであっさり完了するが、ホストとCVMのIPアドレスだけは、途中で設定する必要がある。
ホストとは、Nutanix CEが利用するハイパーバイザーである「AHV」が稼働するマシンで、ここでは物理的なPCのIPアドレスを設定する。もう一方のCVMは、Nutanix CEの管理ツールが稼働するコントローラーの仮想マシンとなる。
今回は複数台でクラスターを構成せず、シングルノードで利用するので「Create single-node Cluster」にチェックマークを付け、DNSサーバーのアドレスも手動で設定した。このたりは、同社が公開している以下の動画で詳しく解説されているので、事前に目を通しておくと安心だ。
仮想マシンをデプロイする
インストール後は、先に設定したCVMのIPアドレスから「PRISM」と呼ばれるウェブUIにアクセスすることで管理ができる。
初期設定がいくつか必要なので、次の各項目を設定しておくといいだろう。
- Language Settings:日本語
- クラスタ詳細:クラスタ名(任意)とクラスタの仮想IPアドレス
- NTPサーバー:ntp.nict.jpなど
- ネットワーク構成:任意の名前でVlan.0で作成
- ストレージコンテナ:任意(ISO格納用とVM格納用など)
続いて、イメージを登録する。Nutanix CEでは、OSインストール用のISO(VMのテンプレート仮想HDDなども)を「イメージ設定」からアップロードしておく必要がある。インストールしたいOSのISOを登録しておくといいだろう。
また、Windowsベースの仮想マシンを稼働させる場合は、ストレージを認識させるための「VirtIO」ドライバーも必要になる。Nutanix CEをダウンロードした際のNutanix NEXTの投稿にリンクが掲載されているので、そこからダウンロードし、イメージ設定へアップロードしておこう。
ここまで準備しておけば、あとは仮想マシンを好きなように作成すればいい。
「仮想マシン」メニューから「仮想マシンを作成」をクリックして、割り当てるCPUのコア数、メモリ容量、ディスク、ネットワークを設定すれば、数秒ほどで仮想マシンが用意される。
Windows系のOSをインストールする際は、VirtIOが必須なので、仮想マシンにCD-ROMドライブを2台登録し、1台目にはOSのISO、2台目にはVirtIOのISOをマウントしておく。
これで、Windowsのインストール時にインストール先を選択する画面で、ドライバーの読み込み先としてVirtIOを登録することで、ストレージが認識されるようになる。
仮想マシンを1台インストールしてしまえば、あとはクローンで複製したり、クラスタにSSHでアクセス後、acliからコマンド(image.create Windows10Template clone_from_vmdisk=vm:Windows10Enterprise:scsi.0 image_type=kDiskImage annotation="EVAL90")を使って、テンプレートとしてイメージ化したりすれば、2台目以降を簡単にデプロイできるようになる(Windows側でSysprepも必要)。
管理は、PRISM上でウェブベースのコンソールを表示することも可能だが、リモートデスクトップを有効にして管理すればいい。
クラウド上のマシンだと、リモートデスクトップでの管理にS2SのVPNの構築が必要となってしまうが、ローカルならそこまで気をつかわなくても、リモートデスクトップから手軽に利用可能だ。
気分は、ほとんどクラウドサービスで、ウェブブラウザーからデプロイして、さっと仮想マシンを使えるようになるのが、なかなか軽快だ。テンプレートイメージを作っておくと本当にデプロイが楽で、仮想マシンを使い捨て感覚で次々にデプロイできるようになる。これはなかなか便利だ。
同時稼働5台が限界? 32GBもあるのに??
環境が構築できたので、テストで使う仮想マシンをいくつか作成し、次々に稼働させてみたのだが、ここでメモリの壁に突き当たってしまった。
2GBずつメモリを割り当てた仮想マシンを5台稼働させ、さらに6台目を起動させようとしたところで、「No host has enough available memory for VM」というメッセージが表示され、仮想マシンを起動することができなかった。
「32GBもあるのに?」と思って確認してみると、CVMにメモリが16GBが割り当てられていて、仮想マシンで利用できるメモリが限られてしまうようだ。
それにしても、もう少し稼働できそうなものだが、CPU内蔵のビデオ機能にメモリの一部が割り当てられていたり、ホストにもメモリが割り当てられていたりするので、実質的に2GB×5台が限界となったようだ。
テスト環境なので、5台同時稼働なら十分なのだが、どうにも「損をした」気分だ。
そこで、いろいろ調べてみると、ホストにSSHで接続し、次のコマンドを利用することで、CVMのメモリを減らすことが可能なようだ。海外では、割り当てメモリを8GBにする以下の設定例が紹介されていた。
virsh list --all
virsh shutdown NTNX-xxxxxxxx-A-CVM
virsh setmem NTNX-xxxxxxxx-A-CVM 8G --config
virsh setmaxmem NTNX-xxxxxxxx-A-CVM 8G --config
ならば、ということで8GBでチャレンジしてみたが、これはさすがに厳しいようだ。2GB×6台+3GB×2台を同時稼働させたところ、あっという間にCVMのメモリ使用量が90%近くに達してメモリ不足の警告が表示され、しかもPRISMのUIから仮想マシンの操作ができない状態になってしまった。
続いて、10GB化にチャレンジした。こちらは一見うまく動作しているように見えた。さすがに9台目ではエラーが発生したが、2GB×8台を稼働させることが可能で、仮想マシンも問題なく操作できた。
しかし、CVMのメモリ使用量が時間が経つごとに数%ずつジワジワと上がり続け(途中で仮想マシンをシャットダウンしても)、半日ほど経過した段階で85%近くに達し、こちらも動作に限界が訪れてしまった。
テスト環境で、実際にはそれほど同時に稼働させることはないとは言え、さすがに10GB以下での運用は難しいと判断し、さらに増やして12GBとしてみた。
この12GB構成の場合、同時稼働は2GB×7台が限界となるが、CVMのメモリ使用量は65%前後が上限となり、数日稼働させた段階では、安定しているように見えた。
しかし、20日ほど稼働させると、毎日じわじわと0.5%くらいずつメモリ使用量が増え続け、こちらも75%を突破してしまった。
Nutanixはメモリ命、という話は聞いたことがあったが、ここまで必要とは思わなかった。もちろん、再起動すれば一時的にはメモリ使用量を減らせるが、いかにテスト環境とは言え、それを繰り返すのは非効率的だ。実装メモリ32GBごときのPCで使うには、荷が重いというのが実情だろう。
Hyper-V Server 2019は挫折
以上、ASRockでDeskMini 310とNutanix CEを利用した「おうちHCI」を構築してみた。
PRISMは操作性も良く、クラウド感覚で仮想マシンを「ひょいひょい」用意できるので、非常に便利だ。シングルノードなのでNutanixの実力を全く発揮できていないが、こうした使い方もアリなのではないかと思える。
しかしながら、とにかくメモリが必要となる。今後は、64GBへアップグレードするか、別のプラットフォームに変更することを検討している。
実はHyper-V Server 2019+Windows Admin Centerという構成に切り替えることも検討したのだが、これはあきらめた。
実際にインストールをしてみたが、ネットワーク(Intel I219-V)の認識に手間取った(INFの書き換えとブート時のサインオフオプション設定が必要)上に、Nutanix CEでは設定一切不要で階層化されたストレージも、Hyper-V Server 2019ではPowerShellで手動で構築する必要があり、やたらと手間が掛かった。
Windows Admin Centerの仮想マシン管理も、Nutanic CEのPRISMほど洗練されていなかったことから、利用をあきらめてしまった。
やはり、仮想化基盤ということなら、VMwareのESXiが有力なのだろうか。あらためてチャレンジして、この場で報告することにしたい。