おうち ESXi の検討と導入

この記事では **自宅にESXi環境** を導入するための検討過程と，<font color="Red">**ベアボーンPC 上に ESXi をインストール**</font>する手順を残します．

**ESXi** とは，ハイパーバイザー型仮想化ソフトウェアのひとつで，**vSphere** と呼ばれる仮想化ソフトウェアの中核をなしています．[^1]

[^1]: 参照: [Qiita 仮想化入門（ハイパーバイザー）](https://qiita.com/inasato/items/8489f2234160707c0110)

ESXi が入っている環境といえば，下の画像みたいな**クソデカサーバー**を想像していたのですが…

<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/354e7316-7603-934b-43af-300e21099442.jpeg">（[画像引用](https://www.sqlservercentral.com/blogs/how-i-designed-my-vmware-vsan-based-home-lab) ）

**ベアボーンPC**と呼ばれる小さなマシンにも ESXi 環境が作れるとのことで，この記事にやり方を記します．

<img width="300" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/7a6344f9-ea23-e3bb-4a1f-98127b344e9f.jpeg">

# 0. 結果

- かかった金額：<font color="Red">**約8万円**</font>
- 構築時間：2.5時間

# 1. システムの要件

特に以下の用途を考えます．

- **ESXi で作成した仮想マシンを用いて Kubernetes クラスターを構築し，仮想的なサービスの検証を行う**

## 1.1 性能要件

仮想マシンの用途にKubernetesが含まれていることから [**vSphere with Tanzu**](https://docs.vmware.com/jp/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-70CAF0BB-1722-4526-9CE7-D5C92C15D7D0.html) が利用できることが望ましく，したがって必要な vSphere のバージョンは **7.0** とします．

また，Kubernetes クラスターを作成することから，仮想マシンの要求するリソース量について以下のように見積もりました．

- 仮想マシンの数（見込み）：最大10程度
- 仮想マシン１個あたりが使用するストレージ容量：80GB
- 仮想マシン１個あたりが使用するメモリ容量：2GB

以上から，マシンスペックに関して以下の条件が要求されます．

- CPU: 10スレッド以上
- メモリ: 32GB以上
- SSD: 1TB以上

## 1.2 その他の要件

設置場所が自宅であることから，以下の非機能要件を要求されます．

- 静粛性が高いこと
- 消費電力が少ないこと
- 場所を取らないこと

さらに，以下の条件を満たすことが望ましいです．

- 安価であること
- 拡張性を有すること

# 2. ハードウェア

ESXiのインストールにあたって，最も大事なのはハードウェアの選定です．
**ESXiには専用のドライバが必要**なため，**[ハードウェア要件](https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-DEB8086A-306B-4239-BF76-E354679202FC.html)がやや厳しい**です．

中でも，よく問題に挙がっているのがNIC (ネットワークカード) のドライバで，<font color="Red">NICを認識できずにインストールに失敗するケースが多い</font>ようです．
その場合は本記事のようにESXiのカスタムイメージを作成することになりますが，少し手間がかかります．

ESXi対応ではないハードウェアを使う場合，事前にこのあたりをよく調べておく必要があります．


## 2.1 検討過程

ESXi環境を作るだけなら，以下の選択肢があります．

|                                              | 価格       | 大きさ | インストールの手間 | 消費電力 | 
| -------------------------------------------- | ---------- | ------ | ------------------ | -------- | 
| 法人向けサーバー（PowerEdge等）              | 5～100万円 | 大     | 小                 | 大       | 
| PC                   | 5～30万    | 中     | 中                 | 中       | 
| シングルボードコンピュータ<br>（Raspberry Pi等） | ～1万円    | 小     | 中                 | 小       | 

いずれも，vSphereの導入方法はGoogle検索で大量に見つかります．

**性能やインストールの手間の観点からは法人向けサーバーがいい**のですが，場所をとるし，ファンの音もうるさいので見送り．

**Raspberry Piは安価で小さいのが魅力**です．vSphereをインストールする方法もネット上に多く見つかりました．
ただ，要件に照らし合わせてマシンパワーが足りないので見送り．

残るは PC です．これは選択肢が広いので，要件から選択肢を絞ります．

- 場所をとらないこと　⇒　ミニPC くらいのサイズがよい
- 安価で拡張性を有すること　⇒　ベアボーン

ということで <font color="Red">**ベアボーン**</font> に行きつきました．

ベアボーンPCの選択肢として，広く普及しているものをいくつか選びました．

- [Intel NUC](https://www.intel.co.jp/content/www/jp/ja/products/details/nuc/kits.html)
- [ASRock DeskMini H470](https://www.asrock.com/nettop/Intel/DeskMini%20H470%20Series/index.jp.asp)
- [ASRock DeskMini X300](https://www.asrock.com/nettop/AMD/DeskMini%20X300%20Series/index.jp.asp)
- [ASrock 4X4 BOX](https://akiba-pc.watch.impress.co.jp/docs/news/news/1320673.html)
- [Shuttle SH370R6V2](https://shuttle-japan.jp/sh370r6v2/)

このうち，4X4 BOX と X300 は Ryzen 4000番台対応ですが，近年の半導体不足とRyzen人気のため Ryzen CPU の価格が高くなっており，残念ですが選択肢から外れました．

残り３択ですが，どれを選んでも要件は満たすため，勘で **DeskMini H470** にしました．

## 2.2 購入したもの

要件から CPU, メモリ, SSDの要求性能は決まっていますので，適当に選定して以下を購入しました．

- ベアボーンPC：[ASRock DeskMini H470](https://www.amazon.co.jp/gp/product/B08K75B9DG/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1) 
- CPU: [Core i5-10400 (2.90 GHz, 6コア12スレッド)](https://www.amazon.co.jp/gp/product/B086MN38Q2/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)
- メモリ: [Crucial DDR4 ノート用メモリー 16GB x2](https://www.amazon.co.jp/gp/product/B019FRCV9G/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)
- SSD: [Crucial MX500 (1TB)](https://www.amazon.co.jp/gp/product/B077PSMJZS/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1)

<img width="300" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/ef6e200d-8a89-c026-1a4c-dc85593e1b3b.jpeg">

※1 DeskMini H470はIntelの第11世代CPUに対応しているため，資金が許す限りそちらを買うのがよさそうです．
※2 [一部の非 SATA SAS SSD がローカルSSDとして検出されないことがあるようです](https://docs.vmware.com/jp/VMware-vSphere/5.5/com.vmware.vsphere.storage.doc/GUID-3FD13EFB-0F2D-4AD3-8769-5521DD1736CA.html)．

## 2.3 組み立て

DeskMini H470 の説明書に従えば迷うことはほとんどなく，**30分程度で組み立ては完了**しました．

<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/c47c6a89-2f3d-ff9c-041e-7e7025252d7e.jpeg">

# 3. ソフトウェア

`ハードウェア`の章に書いたように，標準のインストーラでは案の定 NICを認識しなかったため，ESXiのカスタムイメージを作成することになります．

まず，カスタムイメージを作成するための**作業用PCとして Windows10マシンを用意**します．

## 3.1 必要なファイルのダウンロード

作業フォルダ `C:\ESXi-Customizer` を事前に作成してください．

### 3.1.1 NICドライバのダウンロード

[redditの記事]
(https://www.reddit.com/r/homelab/comments/ngk1xj/help_finding_intel_network_drivers_for_esxi/)にあるように，I219-Vのドライバ(NE1000)を以下のリンクからダウンロードしようとしてもリンクが死んでいます．

https://download3.vmware.com/software/vmw-tools/Intel-NUC-ne1000_0.8.4-3vmw.670.0.0.8169922-offline_bundle-16654787.zip

そこで，以下のリンクからCommunity Networking Driver for ESXiをダウンロード

https://flings.vmware.com/community-networking-driver-for-esxi

解凍後，`vib20/net-community`配下にある `VMW_bootbank_net-community_1.2.0.0-1vmw.700.1.0.15843807.vib` ファイルを `C:\ESXi-Customizer`フォルダ直下に配置します．

### 3.1.2 カスタムイメージ作成のためのスクリプトのダウンロード

大変ありがたいことに，vSphere のカスタムイメージを作成するためのスクリプトを開発・公開してくださっている方がいます．
**ESXi-Customizer-PS** は，ESXiインストールISOを作成するプロセスを大幅に簡素化・自動化するPowershellスクリプトです．

1. [ESXi-Customizer-PS](https://github.com/VFrontDe/ESXi-Customizer-PS) の `ESXi-Customizer-PS.ps1` というファイルをダウンロードし，作業用PCの`C:\ESXi-Customizer`直下に配置します．
2. 作業用PCでPowerShellを管理者権限で実行し，以下のコマンドを実行します：

```powershell
PS C:\WINDOWS\system32> cd C:\ESXi-Customizer
PS C:\ESXi-Customizer> Set-ExecutionPolicy Unrestricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
```

## 3.2 PowerCLI のインストール

私の環境では、PowerCLI が未インストールでしたので、インストールします。

管理権限で PowerShell を開き，以下のコマンドを実行します．

```powershell
PS C:\ESXi-Customizer> Install-Module -Name VMware.PowerCLI -Scope CurrentUser

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\futak\AppData\Local\PackageManagement\ProviderAssemblies' に配置する必要があります。'Install-PackageProvider
-Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。今すぐ
PowerShellGet で NuGet プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
```

## 3.3 カスタムイメージの作成

以下のコマンドでインストール用のisoファイルを作成します．

```powershell
PS C:\ESXi-Customizer> .\ESXi-Customizer-PS.ps1 -v70 -pkgDir C:\ESXi-Customizer\ -NSC
```

![管理者_ Windows PowerShell 2021-06-06 22.23.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/6ae08bf2-8e43-2cc0-698f-5afa354c485c.png)

画像のように，私の環境では `WinError 10054` が出て止まってしまいました．

これは割とよくあるエラーのようで，一番多い原因は PowerShellのTLS1.2が使えないことのようなので，以下の手順を試しましたが，私の環境ではそれでも解決できませんでした．

https://blog.hitsujin.jp/entry/2018/09/20/214222

そこで，[こちらのサイト](https://buu0528.com/?p=637) を見ながら -ozip オプションを使用して offline bundle を作成した後、-izip オプションを使用して offline bundle から iso イメージを作成しました．

### 3.3.1 -ozip オプションによる offline bundle の作成

```
PS C:\ESXi-Customizer> .\ESXi-Customizer-PS.ps1 -ozip -v70 -pkgDir C:\ESXi-Customizer\ -NSC
```

`ESXi-7.0U2a-17867351-standard-customized.zip` のような zipファイルが作成されていれば成功です．

### 3.3.2 -izip オプションによる iso イメージを作成

```
PS C:\ESXi-Customizer> .\ESXi-Customizer-PS.ps1 -izip .\ESXi-7.0U2a-17867351-standard-customized.zip -v70
```

`ESXi-7.0U2a-17867351-standard-customized.iso` のような isoファイルが作成されていれば成功です．

![管理者_ Windows PowerShell 2021-06-06 22.43.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/92257cd1-9cee-5b54-37b6-292fc65fcbc1.png)

## 3.4 ESXiインストールメディア作成

起動可能な USBメモリ の作成に [**Rufus**](https://rufus.ie/ja/) を使います。 以下のサイトからポータブル版 `Rufus 3.14 Portable` をダウンロードします．

https://rufus.ie/ja/

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/c0527dfe-4898-f883-9d41-def153514f10.png">

USBメモリ を挿入し，Rufus でISOイメージを書き込みます．例えば以下のサイトが参考になります．

https://soji256.hatenablog.jp/entry/2020/04/28/090814

https://komo-jp.hatenablog.com/entry/2018/06/19/125032


## 3.5 vSphereのインストール

ISOを書き込んだUSBメモリ をインストールしたいマシンに挿し込み，起動します．USBメモリからうまく起動しない場合は BIOS や UEFI のブート優先順位を確認してください．

インストーラが起動した後の手順は例えば以下のサイトが参考になります：

https://soji256.hatenablog.jp/entry/2020/04/28/090814

https://tekunabe.hatenablog.jp/entry/2020/07/11/exsi70b_nuc_10th

また，上記ページにあるように，固定IPにするとよいです．

接続して，パスワードを入力すると，初期画面が現れます．

![localhost.airport_ VMware ESXi - Google Chrome 202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/9c059f09-2c0d-3635-dd5b-e767c9e0f98a.png)

# 4. 作業時間ログ

- 事前の情報収集：6時間
- 組み立て：30分
- vSphereインストール：2時間（トラブルシューティング含む）
- 記事の作成：2時間

情報収集とトラブルシューティングにかなりの時間がかかりました．


# 5. 参考記事

- [VMWare ESXi](https://www.vmware.com/jp/products/esxi-and-esx.html)
- [VFrontDe/ESXi-Customizer-PS](https://github.com/VFrontDe/ESXi-Customizer-PS)
- [VMware ESXi 7.0（vSphere Hypervisor） をインストールする](https://soji256.hatenablog.jp/entry/2020/04/28/090814)
- [第10世代 Intel NUC への ESXi 7.0b のインストールと初期設定](https://tekunabe.hatenablog.jp/entry/2020/07/11/exsi70b_nuc_10th)
- [Intel NUCへのESXiインストール](https://komo-jp.hatenablog.com/entry/2018/06/19/125032)
- [ESXi-Customizer-PS で WinError 10054 となる時の対応](https://buu0528.com/?p=637)
- [DeskMini A300にESXi6.7.0をインストールする](https://qiita.com/Mouflon_127000/items/b7ab056bdc3e6afadb80)
- [［ESXi］自宅サーバにESXi7.0インストールで手こずった話](https://tacchan33.hatenablog.com/entry/2020/12/28/051112)
- [だいたい7万円くらいで作成する自宅ESXi環境](https://note.com/ooba8686/n/nb81543dc641b)