NUCで始めるVMware Tanzu - Tanzuの紹介とハードウェア要件

今日は、NUCを使って、どんなものを構築していくかについて紹介します。

# VMware Tanzu
1日目 にも軽く触れましたが、今VMwareは、かなりKubernetesに力を入れています。
私がこれからNUCを使って、vSphereインフラ上にKubernetesのマルチクラスタ環境を構築していきたい訳ですが、それを実現するためのソリューション群が提供されていて、その名称が [VMware Tanzu](https://tanzu.vmware.com/jp/) です。

### そもそもvSphereって何？
VMwareの主力製品であり、「VMware ESXi」や「VMware vCenter Server」などの製品郡で構成される仮想化基盤を示します。AWSやGCPやAzureなどの主要なパブリッククラウドベンダーのインフラ基盤も、vSphere上で構築されてたりします。つまり、理論的には（すごーーく頑張れば）、vSphereさえあれば、あなたもAWSを創ることができちゃいます:smiley:
2020年３月に、最新版である「vSphere7」が発表され、一番の目玉として、 [TanzuによるKubernetes対応](https://www.vmware.com/jp/company/news/releases/2020/vmw-app-modernization_031120.html) を発表しています。 ([こちらの記事](https://www.publickey1.jp/blog/20/vmwarekubernetesvsphere_7vspherekubernetes.html) の方が分かりやすいかも)

### Tanzu って何？
KubernetesのRUN(様々な環境へのクラスタ導入)、BUILD(APPの作成)、MANAGE(マルチクラスタ管理)を促進する製品群の総称です。なおTanzuとは、 [スワヒリ語で枝(=新しいイノベーションの分岐)、または日本語の箪笥(タンス=コンテナを表現)を象徴した](https://www.publickey1.jp/blog/19/vmware_tanzukubernetesvmworld_2019_us.html) 名前のようです。

Tanzuの製品ラインナップのことを、 [Tanzu Portfolio(ポートフォリオ)](https://tanzu.vmware.com/jp/tanzu) と呼びます。これらの製品は、VMwareが近年買収してきた、Pivotal/Bitnami/Wavefront/Heptioの製品や技術が元になっています。2020年11月30日現在のポートフォリオは以下の通りです。

| カテゴリ | 製品名 | 提供形態 | 概要 |
|:-:|:-:|:-:|:--|
| Build | [Tanzu Application Service](https://tanzu.vmware.com/jp/application-service)<br>(旧Pivotal Application Service) | ソフトウェア | PaaS基盤。"cf push"コマンドでAPPをデプロイすると、自動的に依存関係管理、負荷分散、ロギング、監査等を実行し、本番環境で稼働されます。<br>VM上で動作する [TAS for VMs](https://docs.pivotal.io/application-service/2-10/concepts/overview.html) と、現在評価利用のみ可能な [TAS for Kubernetes](https://docs.pivotal.io/tas-kubernetes/) が存在。 |
| Build | [Tanzu Build Service](https://tanzu.vmware.com/jp/build-service)<br>(旧Pivotal Build Service) | ソフトウェア | Cloud-Native Buildpacksをベースとして、コンテナの作成、管理、ガバナンスを自動化するソフトウェア。 |
| Build | [Tanzu Application Catalog](https://tanzu.vmware.com/jp/application-catalog) | SaaS | [Bitnami Application Catalog](https://bitnami.com/stacks)をベースとしたOSSカタログと、Base OSの組み合わせを管理し、メンテナンスされた最新状態のコンテナBase Imageを提供するするサービス
| Build | [Tanzu Data Services](https://tanzu.vmware.com/jp/data-services)<br>(旧Pivotal GemFire)<br>(旧Pivotal RabbitMQ)<br>(旧Pivotal ) | ソフトウェア | データ関連ミドルウェアの製品スイート。現在はTAS for VM向けにリリースされており、Kubernetes向けにはベータ提供中。ラインナップとして、Tanzu GemFireとTanzu RabbitMQとTanzu SQLがある。
| Run | [Tanzu Kubernetes Grid](https://tanzu.vmware.com/jp/kubernetes-grid)<br>(以下、TKGと省略) |  K8s | TKGは2つの意味を持ちます。<br>1つ目は、VMwareによってテスト、署名、サポートされた、アップストリーム(OSS版)と互換性のあるKubernetesランタイムを指します。なお、TKGで構築されたKubetrnetesクラスタを、Tanzu Kubernetes Cluster(以下、TKC)と呼びます。<br>2つ目は、様々なクラウドやオンプレ環境に、TKCを導入する仕組みのことを指します。現時点では、vSphere / Microsoft Azure / Amazon EC2 / VMC on AWS に対応。（今後GCPにも対応予定） |
| Run | [vSphere with Tanzu](https://www.vmware.com/jp/products/vsphere.html) | K8s | vSphere UIに統合されたTKCの導入を行う仕組みを提供。（つまりvSphere環境には、2種類のTKCの導入方法が存在）<br>こちらの特徴として、vCenter SSO、コンテンツライブラリ、vSphereネットワーク、vSphereストレージ、vSphere HA、DRS、vSphereセキュリティなどが統合され、vSphere上での包括的な管理・運用が可能。 |
| Manage | [Tanzu Mission Control](https://tanzu.vmware.com/jp/mission-control) | SaaS | 様々なマルチクラウド上のKubernetesクラスタのライフサイクルやポリシーを一元管理するサービス。複数のKubernetesクラスタに対し、さまざまな一括操作をが行える。 （一括でポリシー適用など）|
| Manage | [Tanzu Observability](https://tanzu.vmware.com/jp/observability)<br>(旧Wavefront) | SaaS | フルスタックAPPからクラウドインフラに至るまで、メトリクス、トレース、スパン・ログ、アナリティクスまで、あらゆるものを統合監視するソリューション。分析駆動型のカスタムメトリクスが特徴。 |
| Manage | [Tanzu Service Mesh](https://tanzu.vmware.com/jp/service-mesh) | SaaS | NSXをベースに、にオープンソースのサービスメッシュ製品「Istio」を統合したソリューション。

各製品の技術ドキュメントは、 [Tanzu Docs](https://docs.pivotal.io/) のページにまとまっています。
NUCにはvSphere環境を入れるため、 __TKG__ 、および、__vSphere with Tanzu__ を導入するところまでをゴールとしたいと思います。

# ハードウェア要件
vSphereにKubernetesクラスタ基盤なんて、必要リソースが多そうで、果たしてNUCに入るんだろうかと、不安になりますよね？まずは、それぞれの製品の必要スペックを抑えていきましょう。

## vSphere with Tanzu のコンピューティング要件
まず、NSX-T(ネットワークの仮想化製品)の有無によって条件が変わってきます。

- [NSX-Tありの最小要件](https://docs.vmware.com/jp/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-B1388E77-2EEC-41E2-8681-5AE549D50C77.html#-3)
- [NSX-Tなしの最小要件](https://docs.vmware.com/jp/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-C3048E95-6E9D-4AC3-BE96-44446D288A7D.html#-7)

今回はNSX-Tなしで検討します。余力があったらNSX-Tの導入もやりたいところですね・・
ポイントは以下の通りです。

### ESXi台数
ESXiとは、ハードウェア上に直接、仮想マシンを動作させるための基盤（ハイパーバイザー）を導入する製品です。（なお小ネタとして、ESXの名前の由来は、当時の製品名である「Elastic Sky X」という名前の略称で、命名理由は、当時のマーケッターが「[良い名前と思ったから](http://up2v.nl/2014/05/12/did-you-know-vmware-elastic-sky-x-esx-was-once-called-scaleable-server/)」だそうですｗ）
シンプルに考えると、ESXiは物理サーバを担当するので、ESXi1台=NUC1台と考えることができます。
> 3 台の ESXi ホストと、ホストあたり 1 つの固定 IP アドレス。
> 2 つ以上の NIC を搭載した vSAN 用の 4 台の ESXi ホスト

ドキュメントを見ると、「どっちやねん！」という書きっぷりですが、これは、vSANを使うかどうかで変わってきます。（vSAN = Virtual Software-Defined Storage。ESXiホストの物理ストレージリソースを仮想化し、１つの共有データストアとして提供する製品）
また、vSAN利用時の推奨構成が4台以上なのですが、検証用途であれば、一応3台でもvSAN構築可能です。

つまり、愚直に作ろうとすると、ESXiが3台必要なので、NUCが3台も必要です。さらに問題なのは、NUCには1つのNICしかついていません。正攻法でいくなら、30万かけて3台のNUCを用意し、さらにUSB NICを用意して、USB NICが使えるようにドライバを当てる必要があります。
ここでドン引きしたあなた、ご安心下さい。そんな負担はかけたくないと思うので、後日、Nested ESXiと呼ばれる、ESXiの中にESXiを入れる方法をご紹介して、この2つの問題を解決したいと思います。

### 必要リソース（CPU/メモリ/ストレージ）
以下の点がポイントとなります。

1. まずここに記載のCPUとは、論理CPUのことなので、NUCのthread数（i7モデルなら12、i5モデルなら8）に該当します。また、CPUは圧縮可能なリソースなので、デプロイできないといった制約にはなりません。ただ、オーバーコミットしすぎると、非常にもっさりするため、なるべく要件通りが望ましいです。
2. 一方メモリは、リソースの確保が必要なので、最小要件を守っていく必要があります。
3. ストレージは、シンプロビジョニングすればよいし、検証用途だと余りがちなので、忘れて大丈夫です。
4. ぱっと見で一番やっかいなのは、ESXiです。ホストあたり8CPU/64GBと要件は厳しくみえますが、この値は、本番環境で様々なワークロードを快適に動作させるための最小要件と思われます。実際の必要量は、ESXi上で動作させたいものに依存するため、一旦忘れていただいて大丈夫です。
5. 実際にESXi上で最低限インストールが必要なものは、ここに書いてある通り、「vCenter Server 7.0」(vSphere基盤の管理コンソール)と、「K8s ControlPlane VM」（ここの説明は後日・・）です。特に後者の方は、3台必要なので厄介です。今回はリソースをケチって、2CPU/8GB Mem/16GB Diskにしようと思いますが、ちょっとモッサリします。(さらに低いスペックも選択可能ですが、実用に耐えません。)もし潤沢にリソースがある場合は、最小要件に書かれた通りにしましょう。
6. Nested ESXi構成を予定しているので、ある程度仮想ESXi分のオーバーヘッドが必要なはずです。

上記を踏まえると、本当に最低限必要なリソース量は、以下の通りとなります。

| システム | CPU | メモリ |
|:--|:-:|:-:|
| vCenter Server 7.0 | 2 | 16GB |
| K8s ControlPlane x3 | 6(=2x3) | 24GB(=8GB x3) |
| Nested ESXi x3 | ? | ? |
| 合計 | 8+α | 40GB+α |
ただし、この上でK8sクラスタを立てたり、アプリ等をちょっと試すことも考慮すると、NUC1台ではちょっと厳しく、NUC2台以上は欲しいところです。

## TKG のコンピューティング要件
TKGのハードウェア要件は、純粋にK8sクラスタの要件になるので、vSphere with Tanzuが導入できるなら、TKGも問題ないでしょう。