VMware Tanzu Kubernetes Grid (TKG) on Amazon EC2 をセットアップしてみた (#2 後編 - 環境構築してみる)

# 1. はじめに
[「VMware Tanzu Kubernetes Grid」](https://tanzu.vmware.com/jp/kubernetes-grid) (通称TKG)をAWS上でセットアップしてみたので、備忘録をまとめます。

記事は前編後編に分けていて、前編はVMware Tanzuについての紹介、後編は実際にAWS (Amazon EC2)上でVMware Tanzuをセットアップした際の手順をまとめます。

本稿では主にVMware Japan Blog [「TKG 1.4.0 on AWS の構築」](https://blogs.vmware.com/vmware-japan/2021/10/tkg-1-4-0-on-aws.html)および[「vSphere環境への TKG 1.4.0 with NSX-ALB の簡易展開手順」](https://blogs.vmware.com/vmware-japan/2021/10/tkg-1-4-0-install.html)を参考にしながら環境セットアップしています。

そもそもVMware Tanzuって何だっけという方は、前編から読んでいただければと思います。

https://qiita.com/sanjushi003/items/f71ae841dce1fc81db67

# 2. まずは手順の概要から

実際に私が辿ったおおまかな手順です。
AWSアカウントおよびVMwareソフトウェアダウンロード用にMy VMwareアカウントを持っていることを前提としています。

(1) AWS環境の事前準備
(2) Bootstrapの準備
(3) VMware TKG Management Clusterのデプロイ
(4) Workload Clusterのデプロイ
(5) お片付け

# 3. 手順の詳細について

## (1) AWS環境の事前準備
今回はAWSアカウントのルートユーザーで、AWS東京リージョンを利用しました。まずは既存あるいは新規のAmazon VPCに次の環境を準備します。

本環境のVPCと後続のManagement ClusterおよびWorkload Clusterはそれぞれ別のVPCですが、依存関係を持つSecurity Groupが同一のAWSアカウント内に複数作成され、トラブルシュートが後から難しくなるかもしれません。(経験談)
そのため普段利用していないAWSリージョンを利用、もしくは可能であれば新規のAWSアカウントで作業することを推奨します。

#### 事前準備
a. AWSアカウントのルートユーザーのアクセスキーIDおよびシークレットアクセスキー
b. Windows OSが稼働するAmazon EC2 (以下、踏み台サーバーと呼称。スペックは指定無し。)
c. Ubuntu 20.04 LTSが稼働するAmazon EC2 (以下、BootStrapマシンと呼称。RAMは4GiB以上推奨、ディスクは30GiBで十分。)
d. 踏み台サーバーおよびBooststrapマシンはインターネット接続が可能
e. 作業端末から踏み台サーバーにはインターネット経由でリモートデスクトップ接続可能
f. 踏み台サーバーからBootstrapマシンにputty (もしくはTeratermなど)でSSHアクセス可能
g. 踏み台サーバーおよびBootstrapマシンはANY PORTで相互に疎通可能 (ほんとは疎通が必要なポートだけに絞れますが、検証なので簡便化します。)
h. VMware Custommer Connectへの登録

上記準備のためにはNAT GatewayやSecurity Groupの基本的な設定も必要になります。

> AWSコンソールでBootstrapマシンとなるEC2をデプロイ
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/6ea3f455-9303-fe82-8e74-28c20a06a1c1.png)


## (2) Bootstrapの準備
以下、踏み台サーバーからBootstrapマシンにSSHアクセスして、Boostrapマシンに対して各種セットアップを実施しています。

#### (2)-1 AWS CLIのインストールおよびセットアップ

AWS公式ガイドに従い、最新版のAWS CLIをインストールします。
Ubuntu OSは64ビットを選択したので、64ビットの方の手順で進めます。(機械翻訳がちょいちょいおかしいですが、コマンドラインの記述は正確だったのでご安心ください。)
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

正しくAWS CLIがインストールされたことを確認します。
`# aws --version`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/8b1493fe-1f61-9fd0-0fb8-ee8488b6c3eb.png)

AWSアカウント情報を登録し、セットアップを完了させます。
`# aws configure`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/77fea18a-b837-13c1-e77c-e964ad069019.png)

#### (2)-2 Dockerをインストール
docker docsに従って、Docker環境をセットアップします。

https://docs.docker.com/engine/install/ubuntu/

Dockerがインストールされたことを確認します。
`# sudo docker run hello-world`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/fcb5c6f1-44e1-685d-6c3e-d77a08d64eac.png)

またVMware Docs [「Install the Tanzu CLI and Other Tools」](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.4/vmware-tanzu-kubernetes-grid-14/GUID-install-cli.html)に指定がある通り、このタイミングで次を実施しておきます。

`# sudo sysctl net/netfilter/nf_conntrack_max=131072`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/db0b71cb-9e0f-cc86-4a64-5efc8701391c.png)

#### (2)-3 kubectlおよびtanzu cliをインストール

必要なファイル（kubectlとtanzu cli）をダウンロードして、Bootstrapマシンに配置します。
kubectlとtanzu cliのインストールは、VMware Docs [「Install the Tanzu CLI and Other Tools」](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.4/vmware-tanzu-kubernetes-grid-14/GUID-install-cli.html)にそのまま沿って実施します。

> [VMware Tanzu Kubernetes Gridダウンロードサイト (VMware Customer Connect)](https://customerconnect.vmware.com/en/downloads/info/slug/infrastructure_operations_management/vmware_tanzu_kubernetes_grid/1_x)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3df740a4-a264-4bfa-9a14-eade84d18b4a.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/df7f455e-171c-edb1-f651-727c999d0b90.png)

> ちなみに私はWindows踏み台サーバーでダウンロードして、FileZilla経由でBootstrapマシンに転送しています。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/9ea1e74b-933f-30f1-8c94-e27da098bc35.png)


最後に、これから作成されるEC2インスタンスにSSH接続するためのキーを発行します。

`# sudo apt  install jq  # version 1.6-1ubuntu0.20.04.1`
`# aws ec2 create-key-pair --key-name vmware-tkg140-tokyo --output json | jq .KeyMaterial -r > vmware-tkg140-tokyo.pem`
> 作成したキーはAWS側にも登録されます。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/e65a1811-559d-7f31-6b29-3276bf660879.png)


最終的には次のようになりました。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/cac386ca-04cc-0308-247f-1a8b15cdae55.png)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/2983f3cd-2ff8-e6dc-d5f4-4dd486968286.png)

## (3) VMware TKG Management Clusterのデプロイ
Bootstrapマシンで次を実行します。"192.168.6.61"はBootstrapマシンのIPアドレスです、適宜読み替えてください。
`# tanzu management-cluster create -u -b 192.168.6.61:8080`

作成したGUIアプリケーションに対して、踏み台サーバーからインターネットブラウザ経由でアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/03433de1-b51e-729d-75a6-43a3446e8af8.png)

Amazon EC2での"DEPLOY"を選択し、Management Cluster作成にかかるパラメーターを入力していきます。
新規のVPCを作成するか既存のVPCを利用するか選択可能ですが、私は新規のVPCを作成する方を選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/59747647-00f9-0ef6-5c70-0266378785c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c7d88baf-1399-7924-4e6c-0f5ff742ee05.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/38efcf9f-3223-4ad5-09e3-82a9cfd2b82b.png)

Management Clusterのデプロイが完了すると、AWS内にVPCおよびEC2、Security Groupなど必要なリソースが作成されているのが確認できます。(私の場合は20-30分ほどでデプロイが完了しました。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/e6558635-7805-df51-bcda-40f5ce564773.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/2e60f7a6-9d6a-26ab-a45e-7f1faa75b941.png)



次のコマンドでManagement Clusterの詳細も確認できます。
`# tanzu management-cluster get`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/9b1c97fb-ceb3-7cf0-9f83-16dd3516d702.png)

> もしうまくいかない場合はVMware Docs [「VMware Docs Troubleshooting Tips for Tanzu Kubernetes Grid」](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.4/vmware-tanzu-kubernetes-grid-14/GUID-troubleshooting-tkg-tips.html)もご参照ください。

## (4) Workload Clusterのデプロイ

Management Cluster作成した際に生成される設定ファイル(yamlファイル)を再利用します。
yamlファイルを更新することで、Workload Clusterの設定変更が可能です。今回は更新せず、そのまま再利用しています。

`# tanzu cluster create workload --file /home/ubuntu/.config/tanzu/tkg/clusterconfigs/"設定ファイル名".yaml`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/bbb3f5c5-3110-5ba9-bf27-d89900df3017.png)

Management Clusterと同様に新規VPCおよび各種リソースがAWS上で作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/db319a42-280d-c676-7427-6d950ac708e5.png)


## (5) お片付け
最後にtanzu deleteコマンドにて、作成したClusterを削除します。
(..もし途中で削除失敗した場合は、AWSコンソールから頑張って１つずつリソースを消していきます。)

`# tanzu cluster delete workload-cluster-tanzu`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/749454f9-56db-6227-e46a-b4caf5523234.png)

`# tanzu management-cluster delete`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/07c9fe69-b5f7-003d-89a5-55d67d5fa3a5.png)

# 4. さいごに

VMware社の公式ドキュメントVMware Docsおよびブログが親切にガイドしてくれていたので、存外すんなりデプロイまですることができました。

tanzu deleteが途中失敗したため、AWSリソースを１つ１つ削除する必要があったりなど、意外と後片付けの方に手間取ったりはしました。(AWSリソースは時間課金されるので、検証後はできるだけ速やかに削除です。)
とはいえデプロイされるAWSリソースの依存関係を丁寧に追うキッカケにもなったので結果オーライでした。

今回はあえてAmazon EC2上にデプロイしてみましたが、VMware vSphere上にTanzuセットアップするドキュメントもたくさん存在するので、次はそちらも試してみようかと思います。

# 5. 参考記事

https://qiita.com/sanjushi003/items/f71ae841dce1fc81db67

# 6. 参考にさせていただいた情報まとめ (前編・後編共通)

本記事を書くにあたり、多くの公式ブログや個人投稿を参考にさせていただきました。
これからVMware Tanzuを触ってみたい、まずは調べてみるという方には非常に役立つかと思います。

https://licensecounter.jp/engineer-voice/blog/articles/20211021_vmware_tanzu_community_edition.html

https://licensecounter.jp/engineer-voice/blog/articles/20200630_vsphere7_with_k8s.html

https://vm.gowatana.jp/entry/2021/10/14/235228

https://qiita.com/IShun/items/6086be27706127e2735d

以下、VMware公式の情報まとめ。 (ブログ、VMware Docs, VMware HoL)

https://blogs.vmware.com/vmware-japan/product/tanzu

https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html

[vSphere with Tanzu (HOL-2213-01-SDC)](https://labs.hol.vmware.com/HOL/catalogs/lab/10402)