Intel NUCとQNAP NASで自宅vSphere環境構築

# 背景
自分用にKubernetesクラスタが欲しくなってきたが、せっかくなので自分で構築してみたくなった。
クラウドでも良かったが、やっぱり長く使うとなると自前のほうが安くなりそうだし、ハードトラブルとかを経ていろんな経験もできるので、あえて自宅サーバで。(火事とかは気をつけないといけないけど・・・)

Containerだけでなく場合によってはWindows等もhostすることもあるかもと思い、基盤にはvSphereを選択。(仕事柄扱うことも多いので勉強も兼ねて)
現時点で最新である6.7U3を採用した。
https://blogs.vmware.com/vsphere/2019/08/announcing-vsphere-6-7-update-3.html

一旦vSphere環境まで構築したので備忘もかねて書いておく

# ハードウェア構成
以下参照。合計約11万円。増税前に購入できてよかった。

## 検討の観点
* 自宅サーバなので大きさ/重さも考慮
* 将来的にHVは増設するかもしれないので共有Storage(iSCSI)を構成
    * HypervisorにはDASなし. iSCSI経由でのbootはできないので、Boot用にUSBメモリを外指し(ここにESXiをインストール)
* NAS Diskは一旦1本のみ(Single構成)
    * 本当はRAID1組みたいが、現時点で可用性は求められないので

## Hypervisor

検討の結果購入したアイテムは以下。

Category   |Item                                                          |Price(Yen)|Quantity|Sum(Yen)|Link
-----------|--------------------------------------------------------------|----------|--------|--------|----
Bareborn   |Intel NUC8i5BEH                                               |    47,500|       1|  47,500|https://www.intel.com/content/www/us/en/products/boards-kits/nuc/kits/nuc8i5beh.html
Memory     |Crucial CT16G4SFD824A [SODIMM DDR4 PC4-19200 16GB]            |     8,480|       2|  16,960|https://www.crucial.jp/jpn/ja/ct16g4sfd824a
Power cable|(gb)ACケーブル ミッキー型ケーブル 2P-3P PSE認証 1m                 |       380|       1|     380|https://www.amazon.co.jp/gp/product/B01MXSGLNQ/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1 
USB memory |Transcend USBメモリ 16GB USB 3.1 スライド式 ブラック TS16GJF790KBE|       900|       1|     900|https://www.amazon.co.jp/dp/B07MFQJ284/ref=cm_sw_r_tw_dp_U_x_WpWMDbVKZZRJR

NUCはこんな感じ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/342fe113-9b3e-1a50-5106-ebd2039c4ef7.jpeg" width="25%">


* [らでこー先生の記事](https://ladicle.com/post/k8s-home-cluster/)を見て触発されたこともあり、Intel NUCは最初から視野に入っていた。
* ラズパイも考えたが、[VMware compatibility guide](https://www.vmware.com/resources/compatibility/search.php?)的にNGそうな匂いしかしなかったのでやめた(調べてない)
    * 過去にBareborn買ったときにRealtekのNICが対応してなくて結構苦労したことがある。最近は色々対応してるのかなぁ
* Intel NUCからどの機種を選定するかについては以下の考え
    * できれば最新世代(第8世代)のもの
    * CPU観点ではIntel Core i3, i5, i7があったが、i5を選択
        * i3だと2 Coreなので物足りなくなる可能性大
        * i5, i7はCore数は同じ(4core)なので安いほうが良い(わたしの用途では処理速度は不要)
    * 本当は薄さ重視で `NUC8i5BEK` がよかったが、品薄で買えなかったので仕方なく `NUC8i5BEH` を購入

## NAS

検討の結果購入したアイテムは以下。

Category   |Item                                                           |Price(Yen)|Quantity|Sum(Yen)|Link
-----------|---------------------------------------------------------------|----------|--------|--------|----
NAS        |QNAP TS-231P                                                   |    19,000|       1|  19,000|https://nttxstore.jp/_II_QN15624587
Disk(SSD)  |Micron 1100シリーズSSD 2TB 2.5インチ SATA3 MTFDDAK2T0TBN-1AR1ZABYY|    25,980|      1|  25,980|https://nttxstore.jp/_II_SM15919507

こんな感じ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/7eb23260-8ca6-8a1a-4018-b7fed49c9067.jpeg" width="25%">


* 以下要件で検討した
    * iSCSI or NFS対応製品で絞り込み
        * VMware的にはiSCSI(VMFS)とNFSとでどちらがよいとは言い切れなさそう
            * https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.storage.doc/GUID-1FB1AD88-3E49-4062-8DE5-8246A1DDF3E3.html
            * https://www.vembu.com/blog/difference-vmware-vmfs-nfs-datastores/
    * Diskを冗長化しないのでCloud backupが簡単にできるもの
    * 静音(SSD, Fanless, etc)
    * 自宅にNASがなかったのでこれを機にファイルサーバ用途としても使えるもの
* 上記を元に検討した結果QNAP or Synologyで選定するのがよさそう
    * 当初BUFFALOとIO-DATAも検討したが、自宅ユースでiSCSI対応機種がなさそうだった。
    * 結局QNAPを色々検討してたらSynologyを検討するのがめんどくさくなってしまって、QNAPにした・・

## 既に自宅にあるものを流用
Category       |Item              |Note
---------------|------------------|----------
Ethernet switch|Timecapsule (2TB) |自宅にあるWifi router兼Macのバックアップ用途に使ってるTime capsuleのportが余っていたのでHV, NASを接続


# 物理セットアップ

自宅は狭いかつ子供がおり床近くに配置すると良いことはない、ということで以下を購入し天井付近に配置することにした

Item                                   |Price(Yen)|Quantity|Sum(Yen)|Link
---------------------------------------|----------|--------|--------|----
アイリスオーヤマ パーテーション メッシュ     |     2,891|       1|   2,891|https://www.amazon.co.jp/gp/product/B0013UEEK8/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1
アイリスオーヤマ メッシュ パネル バスケット 大|     2,019|       1|   2,019|https://www.amazon.co.jp/gp/product/B000S6EAQ6/ref=ppx_yo_dt_b_asin_title_o04_s01?ie=UTF8&psc=1

こんな感じ。これなら子供に触られることもないし、掃除機に壊されることもない。後日地震が起きたときのためにちゃんと固定する予定
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/c44d858c-ab05-cdba-73a0-b31dd5882ec2.jpeg" width="25%">


# NASセットアップ
ここはあんまり記録取ってなかったので記憶を頼りに。。

## 初期設定
購入したSSDを取り付けて電源On。初期IPはmanual上は169.254.100.100となるとの記載があったが、実際どうだったかな。とりあえずtcpdumpしたらIPがわかった。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">自鯖用のNASを買ったが初期IPがわからないので耳を澄ませて(tcpdumpして)たらIPが聞こえてきた</p>&mdash; Shota Morimoto (@shoutm) <a href="https://twitter.com/shoutm/status/1175284643244863489?ref_src=twsrc%5Etfw">September 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

https://<IP>にアクセスしてログインして、初期設定(admin password, timezone, datetime, network settings)を実施。SSDは1本しか積んでないのでRAIDは構成できず。

最後にfirmwareをupdate

## Storage pool作成
最初にStorage poolを作成する。簡単に言うとStorage poolは複数のDisk(RAID)を束ね仮想的な1つのStorageを作る機能(参照: https://docs.qnap.com/nas/4.1/SMB/jp/index.html)。ここで作ったStorage poolからVolumeやLUNを削り出すことになる。

「Storage & Snapshots」→「Storage」→「Storage/Snapshots」→「Create」→「New Storage Pool」をクリック

Disk選択画面では1つしかないDiskを選択。あとはdefaultで作成

## iSCSIターゲット作成
次にiSCSI接続先となるiSCSIターゲットを作成する。(ここに後ほど作るLUNを関連付けることになる)

「Storage & Snapshots」→「iSCSI」→「iSCSI Storage」→「Create」→「New iSCSI Target」をクリック

以下の通り名前だけ適当につけ、その他のパラメータはdefaultのままとした。お家ユースなのでCHAP認証もなし
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/582890a7-eaaa-5687-1e52-70f634d4365a.png width=50%>

## LUN作成
最後にLUNを作成する。これがいわゆるdata volumeとなる。

「Storage & Snapshots」→「iSCSI」→「iSCSI Storage」→「Create」→「New Block-Based LUN」をクリック

さきほど作成したStorage poolを選択。容量は最初から確保したくないので「Thin provisioning」をチェック。
LUN Nameを指定し、容量を指定(ここでは512GBとした)
Map to targetセクションにて「Do not map it to a target for now」のチェックを外し、先程作成したiSCSI targetを指定。

これでStorage側の最低限の設定は終了。

# vSphere環境構築
## ESXiインストール

* [このページ](https://my.vmware.com/web/vmware/details?productId=742&rPId=24857&downloadGroup=ESXI67U3)から該当ESXi 6.7U3を指定しダウンロード。
* 以下の方法で物理install DVDを作成(DVD作成に利用したMacは `macOS Mojave 10.14.6`)
    * MacのDesktopにダウンロードし、右クリックから `Burn Disk Image * to Disk...` を選択
    * デフォルトのまま `Burn` をクリック
* 該当Diskを含んだDVD drive + USBをNUCに挿して起動。Dialogに従ってインストール

[この辺の記事](https://qiita.com/sicksixrock66/items/d96e74da1bcd382208ff)を見てるとDriver周りでハマるかと思いきや全くハマらず。
この後黄色画面でManagement IPやRouting, DNSの設定を行った。またSSHは有効化した。

## iSCSIマウント
さきほど作ったiSCSI targetへ接続する

ブラウザでESXiへアサインしたIPにアクセスしてEmbedded host clientへアクセス。ここでStorage → Adapters → Software iSCSIをクリック。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/2f9668be-9daf-754a-bd79-151131438f9d.png width=50%>
`Add dynamic target` ボタンを押してNASのIPを入力。(portはデフォルト)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/0dd2ff12-5871-6b44-50fa-18b2cf222725.png width=50%>
`Save configuration` をクリックした後改めて `Software iSCSI` をクリックすると上では出てこなかった `Static targets` の部分がDiscoveryされる
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/98bb2508-3507-29e9-84cb-cc722f2950b4.png width=50%>
この状態でDatastores → New datastoreをクリックしてdatastoreを作成。この時点では512GBを割り当てた

## vCenter deploy

* [このページ](https://my.vmware.com/web/vmware/details?productId=742&downloadGroup=VC67U3)からVCSAをダウンロード
* Mac上でISOをマウントし、vcsa-ui-installer→mac→Installer.appを起動。インストーラの指示に従って操作。なおVCSAのインストールは2ステップに分かれている。(Step1: OVAの展開、Step2: 展開されたVMの設定)
    * Step1
        * Select deployment type: Embedded Platform Services Controllerを選択
        * Appliance deployment target: ESXiのIPを指定、User nameにはroot, PasswordはESXiインストール時に指定したものを指定
        * Deployment size: Tinyを選択。要求されるリソースサイズ/管理可能なHost/VM数は以下。
            * vCPUs: 2
            * Memory: 10GB
            * Storage: 300GB
            * Hosts: 10
            * VMs: 100
        * Select datastore: 先程作成したdatastoreを選択
        * Configure network settings: Networkは一旦デフォルトの `VM Network` を選択(後日変更するかも)。残りのnetwork情報はおうちの環境にあわせて適宜選択
    * Step 2
        * Appliance configuration: `Synchronize time with NTP servers`を選択(pool.ntp.org)。`SSH access`はEnabled
        * SSO configuration: `Create a new SSO domain`を選択。
            * Single Sign-On domain nameには自分が取得したdomainを指定(なければ適当でよい。vsphere.localとかがデフォルトだっけな)
            * Single Sign-On user name: `administrator`で固定。これ重要。
            * Single Sign-On password: 適当に指定

ここまで終わったらブラウザで`https://<IP>`にアクセスすればログイン可能。ID/PWは`administrator@<domain>/<自分が指定したもの>`を指定(最初rootで入ろうとして入れなかった)

## vCenterへのESXi hostの追加

* ブラウザでログインし、「Hosts and Clusters」画面からvCenterのIPが書かれたアイコンを右クリックし、「New Datacenter」をクリック。Datacenterを作成する
* 今作成したDatacenterを右クリックし、「New Cluster」をクリック。vSphere DRSとvSphere HAをクリック(現在はHostが1台しかないので意味ないが・・)
* 今作成したClusterを右クリックし、「Add Hosts」をクリック。ESXi hostのIPとCredentialを入れて進むとホストを追加できる。

結果以下のような画面になる

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/f86e4bd4-a8dc-409e-3600-1bf82ce0d6a2.png width=50%>

なんかエラーが出てる

### Host TPM attestation alarm

結論から言うとなぜこのエラーが発生しているかわからなかった。

[こんなKB](https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.security.doc/GUID-CE69FA70-9C15-4ABD-871F-57D20BF98EEB.html?src=af_5acfd7716582e&cid=70134000001YR6X)があるらしいが、僕のエラーは以下のように「internal failure」という情報しかなく、対処方法が記載されていなかった

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487359/733d45e7-d656-4869-e409-b8b2d8740eb5.png width=50%>





# まとめ
* ESXi用Host(Intel NUC)と共有Storage(QNAP)を買った
* 共有StorageにStorage pool、iSCSI target, LUNを作った
* ESXi 6.7U3をインストールし、vCenter6.7をdeployした。


# 今後の課題
* Disk冗長化
* LUNのbackup
* Host TPM attestation alermの解消