TKGv1.6 をvSphere環境にインストールしてみた


Tanzu KubernetesGrid(TKG)v1.6をvSphere環境にインストールしてみました。

TKGv1.6の公式ドキュメントを参照しながら作業を進めました。
* VMware Tanzu Kubernetes Grid 1.6 Documentation
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-index.html

作業中詰まったときに助けになったのが、TUNA-JPのコミュニティ上での質問でした。
Tanzu の OSS を利用しようと考えた際には是非ご参加ください。
* TUNA-JP へようこそ | Tanzu User kNowledge Assembly Japan
https://tuna-jp.net/

各バージョンについてインストールしてみた記事は末尾の参考記事に記載しますので、
合わせてご確認ください。

### 目次
1. Tanzu CLI、docker、kubectl等のツールのインストール
2. マネジメントクラスタをインストールする
3. ワークロードクラスタをインストールする
4. 詰まったポイント
5. 参考記事

## Tanzu CLI、docker、kubectl等のツールのインストール
以下のドキュメントを参考に作業を進めて行きます。
* Install the Tanzu CLI and Other Tools
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-install-cli.html

今回はubuntu 22.04を立てて、そこにインストールしました。
Dockerのインストールにおいては、公式ドキュメントとブログ等を参照して
インストールしました。
* Install on Ubuntu | Docker Documentation
https://docs.docker.com/desktop/install/ubuntu/

* How To Install and Use Docker on Ubuntu 22.04  | DigitalOcean
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04

それ以外はドキュメントの指示に従えば、淡々と必要なパッケージをインストールできます。

## マネジメントクラスタをインストールする
### 準備
以下のドキュメントを参考に作業を進めて行きます。
* Prepare to Deploy Management Clusters to vSphere
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-mgmt-clusters-vsphere.html

ドキュメントを開いて要件について確認を進めながら、
準備を進めるのですが、以下の要件を読み飛ばしていて
* Traffic allowed out to vCenter Server from the network on which clusters will run

マネジメントクラスタがインターネットに接続できずデプロイに失敗することで、
詰まってしまう状況になったりしました。

最終的にはマネジメント、ワークロードクラスタで特に設定について触らない場合各2つずつ計4つ外部インターネットに
出れるアドレスが必要になりましたので、準備しておきましょう。（会社の検証環境で作業していたので、インターネットに接続できませんでした。。）
![screenshot.369.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/af68655a-0e8f-492b-53be-acf7355c16f7.jpeg)

またKub-Vipを利用する場合、マネジメントクラスタ、ワークロードクラスタ共に、クラスターAPIサーバーからのリクエストを受けるために性的なアドレスが必要になります。こちらも各1つずつ計2つ用意しておきましょう。


::: note info
外部インターネットへのアクセスができない環境の場合、
以下のドキュメントを参考にして準備を進める必要があります。
* Prepare an Internet-Restricted Environment
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-mgmt-clusters-airgapped-environments.html
:::

その他要件についてはドキュメントの通り進めます。

### デプロイする
以下のドキュメントを参考に作業を進めて行きます。
* Deploy Management Clusters
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-mgmt-clusters-deploy-management-clusters.html

踏み台サーバーで以下のコマンドを実行してインストールするGUIを立ち上げます。
```
$ tanzu management-cluster create --ui
```

そのままでは手元の環境からアクセスできないので、
踏み台サーバーにSSH接続する際にポートフォワードの設定をします。

手元で使用しているのがwindows環境だったのでputtyを利用して、
putty Configuration -> Connection -> SSH -> Tunnelsから例えば以下のように設定します。
Source port:800 <--手元の環境で接続するポート
Destination:127.0.0.1:8080, Local <-- 踏み台サーバーでGUIが上がっているhttp://127.0.0.1:8080 にアクセスしたいため

![screenshot.358.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/3449bf7b-2d72-e7c3-743b-bf34ee196796.jpeg)

手元の環境がLinux等の場合は、以下のようなコマンドで同じことができます。
ssh <踏み台サーバーのIPアドレス> -L 800:localhost:8080

設定後手元の環境でブラウザーから、http://127.0.0.1:<設定したポート>でアクセスできます。
(毎回ポートフォワードどうやるんだっけ？となるので備忘録的に詳しめに書いときます。）

GUIで必要な内容について入力していきます。
成功した場合は以下のような画面になります。
![screenshot.351.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/eb70edb8-7d46-d3bf-9c24-a59905a63033.jpeg)

![screenshot.367.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/11624e3e-2bfb-dd04-c2db-3120e68b84de.jpeg)

:::note warn 
入力時のMetadataセクションにおいて、Lableの項目に適当なKey:valueを設定しない場合、以下のようなエラーでマネジメントクラスターのデプロイに失敗するバグが存在します。適当な値を設定しましょう。
![screenshot.366.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/9e6d10ed-1912-7fc9-a019-35acdd53a3b2.jpeg)

:::

## ワークロードクラスタをインストールする
以下のドキュメントを参考に作業を進めて行きます。
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-tanzu-k8s-clusters-index.html#deploy

GUIでマネジメントクラスタをデプロイするときに画面下部に、
CLIでインストールするときのコマンドが表示されます。
tanzu management-cluster create --file /home/<user name>/.config/tanzu/tkg/clusterconfigs/z40ywhax64.yaml -v 6

設定ファイル:/home/<user name>/.config/tanzu/tkg/clusterconfigs/z40ywhax64.yamlをコピーし、
必要な設定値について変更して、tanzu cluster create --file .config/tanzu/tkg/clusterconfigs/my-vsphere-tkc.yaml
のようなコマンドでデプロイします。

変えた設定値は以下の通りです。
* CLUSTER_NAMEの追加 - 設定されていなかったので追加しました。
* VSPHERE_CONTROL_PLANE_ENDPOINT - ワークロードクラスタ用のエンドポイントIPアドレス

設定ファイルを渡して、コマンドからさくっとデプロイできるのは便利だなと思いました。
デプロイが終わると、vSphereの画面に対応する仮想マシンがデプロイされています。
![screenshot.369.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/b94a5de5-dbec-d026-5cf1-e8eb5a178a77.jpeg)

## 詰まったポイント
1. ワークロードクラスタをデプロイする際に、インターネット接続ができずデプロイに失敗する
![screenshot.363.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325577/7f2373bb-9619-4086-b9dd-e7abdfeda5ef.jpeg)
デプロイされるワークロードクラスタのIPアドレスからインターネット接続できるように設定して解消

2. 入力時のMetadataセクションにおいて、Lableの項目に適当なKey:valueを設定しない場合、以下のようなエラーでマネジメントクラスターのデプロイに失敗するバグに遭遇した

3. 何回かデプロイに失敗したワークロードクラスタを削除していたら、削除に失敗する事象に遭遇した
```
$ tanzu management-cluster delete
Deleting management cluster 'tkg-mgmt-vsphere-20230106020419'. Are you sure? [y/N]: y
Verifying management cluster...
Setting up cleanup cluster...
Error: unable to delete management cluster: unable to create cleanup cluster: failed to create kind cluster tkg-kind-cerohqveb64pi7c0smf0: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged tkg-kind-cerohqveb64pi7c0smf0-control-plane cat /kind/version" failed with error: exit status 126
Error: exit status 1
```
vSphereからデプロイされている仮想マシンの削除&以下のドキュメントの「Clean Up After an Unsuccessful Management Cluster Deployment」に従って、kindクラスタを削除した
* Troubleshooting Tanzu Kubernetes Grid Issues
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.6/vmware-tanzu-kubernetes-grid-16/GUID-troubleshooting-tkg-tips.html

## 参考記事
* Tanzu Kubernetes Grid 1.3を使ってみた - Qiita
https://qiita.com/masanara/items/eb6f28eb402cbf53b8c6
* Tanzu Kubernetes Grid 1.4を新規構築した - Cloud Penguins
https://jaco.udcp.info/entry/2021/09/12/182756
* Tanzu Kubernetes Grid 1.5 をvSphere にデプロイしてみる - VMware Japan Blog
https://blogs.vmware.com/vmware-japan/2022/03/tkg-1-5-1-install.html

## 雑感
デプロイしてみた系の記事はたくさんあがっているので、
すぐデプロイできるでしょと思っていたら、
思いのほか詰まってしまい手こずりました。。

ただ一度手順を分かってしまえばお手軽にkubernetes環境を様々な環境にデプロイできるのは
便利だなと思いました。