NUCで始めるVMware Tanzu - TKG紹介

本日は、（やっと・・）TKGの紹介をしたいと思います。
ここまでで、企業のインフラを支える基盤の大変さを、少しでも理解していただけると幸いです:grinning:

#TKG?
そう聞くと、やっぱり「アレ」を思い浮かべますよね・・？
念のため、Googleさんに聞いてみました。
<img width="400" alt="スクリーンショット 2020-12-12 11 39 38" src="https://user-images.githubusercontent.com/3906298/101971787-2edde180-3c77-11eb-9940-865ecb80653b.png">
そうです、日本では「卵かけご飯」を連想してしまう人が、ほとんどでしょうｗ
では、プライベートウィンドウにして、英語で検索すると、どうなるでしょう・・？
<img width="400" alt="スクリーンショット 2020-12-12 11 44 55" src="https://user-images.githubusercontent.com/3906298/101971795-41f0b180-3c77-11eb-8f28-81f95f8875dc.png">
これは、予想外:sweat:　卵かけご飯、世界的にも有名だったのか・・・。
ただこちらには、「What is VMware Tkg?」と、サジェスチョンが出てきます。
つまり、卵かけご飯の次くらいには、VMwareのTKGが有名だということですねｗ

いきなり脱線してしまいましたが、TKGとは、**Tanzu Kubernetes Grid** の略です。
ちなみにGridとは、[Weblioで検索すると](https://ejje.weblio.jp/content/grid)いくつか意味が出てきますが、この中では、「(電線・水道・ガスなどの)敷設網」の意味が近いです。2000年代前半に、「[グリッド・コンピューティング](http://e-words.jp/w/%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0.html)」というバズワードがありましたが、そのKubernetes版と思って下さい。

また、[公式ドキュメント](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html)や[Day3](https://qiita.com/hirosat/items/29cd255cf3c007bc262a#tanzu-%E3%81%A3%E3%81%A6%E4%BD%95)でも触れていますが、TKGには2つの意味があります。

1. **Kubernetesランタイム**：VMwareによってテスト、署名、サポートされた、[アップストリーム](https://github.com/kubernetes/kubernetes)と互換性のあるKubernetes実装の提供。vSphere with TanzuやTMCといった他の導入ソリューションでも、こちらの意味でのTKG(VMwareがサポートするKubernetes)が使われている。
2. **マルチクラウドKubernetesクラスタ基盤の導入ソリューション**：１に加え、VMwareがサポートするOSSアプリケーション（レジストリ、ネットワーク、監視、認証、イングレス制御、ログサービス）が含まれる。2020年12月12日時点の対象環境は、vSphere（オンプレミス環境）、VMC on AWS、Amazon EC2、Microsoft Azure。

前置きなくTKGというワードが出てきた場合、上記のいずれかを意味することを、覚えておいて下さい。（2の意味の方がよく使われるかも。。）

#Cluster APIについて
皆さんは、[Cluster API](https://github.com/kubernetes-sigs/cluster-api)とはなにか、ご存知でしょうか？
なぜ急にこんな話をするかというと、TKGがマルチクラウド環境を実現する技術の核となっているのが、このCluster APIだからです。2020年12月1日、奇しくも同日に、[AmazonからEKS Distro](https://aws.amazon.com/jp/blogs/opensource/introducing-amazon-eks-distro/)が発表され、[GoogleからはAnthos on bare metal](https://cloud.google.com/blog/topics/hybrid-cloud/anthos-on-bare-metal-is-now-ga)が発表されました。共に、オンプレミス環境に自社ソリューションを入れるためにCluster APIが用いられており、今、最も注目の技術の一つと言えます:sunglasses:
<img width="200" src="https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/docs/book/src/images/introduction.png">
###で、Cluster APIって何？
皆さんは、Kubernetesクラスタのインストールを経験したことはありますでしょうか？あれ、結構面倒ですよね？やっぱりそう考えている人は結構多くて、「**Kubernetesクラスタを管理するのもKubernetesに任せたらいいんじゃね？**」と、始まったプロジェクトが、Cluster APIです。
[Introducton](https://cluster-api.sigs.k8s.io/introduction.html)によると、「Cluster APIは、複数のKubernetesクラスタのプロビジョニング、アップグレード、運用を簡素化するための宣言的なAPIとツールを提供することに焦点を当てたKubernetesのサブプロジェクト」とのことです。
クラスタのライフサイクルに関するKubernetes SIG(Special Interest Group)として立ち上がり、2018年6月に最初のα版のTagがついています。[Top Contributors](https://github.com/kubernetes-sigs/cluster-api/graphs/contributors)を見ると、VMwareのメンバーが名を連ね、TKGとしても[2020年4月9日にGA](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.0/rn/VMware-Tanzu-Kubernetes-Grid-10-Release-Notes.html)しているため、VMwareに一日の長がある技術と言えます。
###どんな仕組みなの？
割とこの絵にある３匹の亀が、Cluster APIをよく表していますｗ

1. **Bootstrap provider**(親ガメ)：対象インフラ(vSphereとかEC2とか)にアクセス可能であれば、ローカルPCでも踏み台環境でもどこでも良いです。利用者は事前に、kubectl、docker、kind(kubernetes in docker)、そして、clusterctlを準備します。initコマンドにより、対象インフラの情報を与えることで、子ガメ(Management Cluster)を産み出します。
2. **Management cluster**(子ガメ)：対象インフラ毎に一つ必要であり、たくさんの孫ガメ(Workload cluster)を生み出すためのKubernetesクラスタです。
3. **Workload cluster**(孫ガメ)：実際にAPPを動作させるためのKubernetesクラスタです。手軽に複数のWorkload clusterを生成・管理することが可能です。なお、TKG環境では、Workload clusterのことを、**Tanzu Kubernetes Cluster(TKC)**と呼びます。

この３世代のカメにより、マルチクラウド・マルチクラスタ環境で一貫性のあるKubernetesクラスタの量産を実現します。（もっと掘り下げると、VMのデプロイを実現するためのCRDの話とかもありますが、、止めておきますｗ）

もう一つの技術ポイントとして、Cluster APIでは、Control Planeの導入に [kubeadm](https://github.com/kubernetes/kubeadm) が用いられています。こちらのプロジェクトにも、[VMwareの技術者が大きく貢献](https://github.com/kubernetes/kubeadm/graphs/contributors)しています。

#TKGがサポートするOSSアプリケーション
まず、[VMware docs](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html)により、TKGでの導入方法のドキュメントサポート（ただし、現時点では英語のみ。。）が提供されています。私の感想ですが、TKG v1.2になって、割と筋のいいOSSラインナップが揃ってきたなと思います。

| カテゴリ | OSS名 | docs | どんなOSS? |
|:--|:--|:--|:--|
| コンテナレジストリ | [Harbor](https://goharbor.io/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-harbor-registry.html) | 組織内にプライベートコンテナレジストリを構築するソフトウェア。 |
| CNI | [Antrea](https://antrea.io/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-tanzu-k8s-clusters-create.html#-tanzu-kubernetes-cluster-networking-3) | TKG v1.2からTKGのデフォルトのCNIとなった。Open vSwitch(OVS)により、様々なプロトコルを取り扱えるようになっているのが特徴。将来的にWindowsコンテナのサポートを見据えての変更と思われる。 |
| CNI | [Calico](https://www.projectcalico.org/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-tanzu-k8s-clusters-create.html#-deploy-a-cluster-with-a-nondefault-cni-19) | Kubernetesで最も実績のあるCNIの一つ。Network Policyにいち早く対応し、柔軟なアクセス制限をかけられるようになった実績がある。TKG |
| Backup/Restore | [Velero](https://velero.io/docs/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-mgmt-clusters-backup-restore-mgmt-cluster.html) | Heptioが開発した、KubernetesリソースのBackup & Restoreで最も実績のあるソリューションの一つ。 |
| Log | [Fluentbit](https://fluentbit.io/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-logging-fluentbit.html) | コンテナログのフォワーダ。fluentdの方が実績があるが、軽量版なのでコンテナ向き。 |
| ユーザ認証 | [Dex](https://dexidp.io/) /<br>[Gangway](https://github.com/heptiolabs/gangway) | [here]() | Dexは、managementクラスタに導入し、IDプロバイダと接続。GangwayはTKCに導入し、Dexと連携してkubeconfigを払い出す。 |
| Ingress | [Contour](https://projectcontour.io/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-ingress-contour.html) | Heptioが開発した、[Envoy](https://www.envoyproxy.io/)ベースのIngress実装。HTTPProxyというCRDにより、通常のIngressよりも柔軟なL7ルーティング管理を実現している。 |
| Monitoring | [Prometheus](https://prometheus.io/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-prometheus.html) | Kubernetes監視ツールの定番。Kubernetes内のあらゆるメトリクスを時系列でデータ取得する術を持つ。また、AlertManagerという通知ツールも同梱される。 |
| Monitoring | [Grafana](https://grafana.com/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-grafana.htmlca) | データ可視化ツール。Prometheusのデータを可視化するため、セットで使用される事が多い。|
| オペレーション支援 | [Carvel Tools](https://carvel.dev/) | [here](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-index.html#-install-the-carvel-tools-on-the-bootstrap-environment-1) | 旧k14s。ytt/kbld/kapp/imgpkg/kapp-controller/vendirの6つのツールの集合。TKGの他のツールのインストール時、ちょいちょいお世話になる。 |

ただし、詳細な各OSSのサポートレベルは、[Tanu Editions](https://tanzu.vmware.com/content/blog/simplify-your-approach-to-application-modernization-with-4-simple-editions-for-the-tanzu-portfolio)によっても異なってきますので、気になる方は[問い合わせ](https://www.vmware.com/jp/company/contact.html)すると良いかと思います。

はい、本日は終了です。明日はいよいよ、TKGを導入してみます！