Tanzu Mission Controlを使ってTanzu Kubernetes GridのWorkload Clusterの作成後にリソースを自動で作らせる

本記事は「[TUNA-JP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/tuna-jp)」の7日目のエントリとして、Tanzu Mission Controlを使ってTanzu Kubernetes GridのWorkload Clusterの初期設定を自動化する方法について紹介します。

昨年のアドベントカレンダーから引き続き、Tanzu Mission Controlネタになります。

https://qiita.com/two2mi/items/a94435a8fc526fc53ac5

https://qiita.com/two2mi/items/279371a1101a78d7d2ca


# この記事のサマリ
* Tanzu Mission ControlではTanzu Kubernetes Grid(TKG)のWorkload Clusterを新規作成することが出来ます。
* Tanzu Mission Control独自のClusterGroupという概念により、複数のClusterをグループ化することでまとめて設定することが出来ます。また、Workload Clusterを新規作成するときにClusterGroupを指定することが出来ます。
* Tanzu Mission ControlのContinuous Delivery機能を有効化すると、Gitリポジトリに格納したYAMLをもとにクラスタの構成を定義してリソースを作ることが出来ます。Cluster単位で有効化するだけでなく、ClusterGroup単位で有効化することが出来ます。
* 以上を組み合わせると、ClusterGroupでContinuous Delivery機能を有効化している場合、そのClusterGroupを指定してTanzu Kubernetes GridのWorkload Clusterを新規作成すると、作成してすぐにGitリポジトリで定義しているリソースを作らせることが出来ます。


# まずはVMwareのTanzu Mission Controlとは何か？
一言でいうと、複数のKubernetesクラスタを一元的に管理できるTanzu製品です。提供形態はSaaSで略称はTMCです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/4ecabc94-220f-65e6-b216-77e28ddea388.png)

VMwareのKubernetesディストリビューションであるTanzu Kubernetes Grid(TKG)だけではなく、主要クラウドプロバイダのKubernetesクラスタも管理下に置くことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/0185af5b-884f-6b47-a984-f9436d73fe6f.png)

# 今回の概要
① Tanzu Mission ControlでTanzu Kubernetes GridのManagement Clusterを登録（下準備）
② Tanzu Mission Control経由でTanzu Kubernetes Grid(TKG)のWorkload Clusterを作成
③ GitHubと連携したContinuous Delivery機能を用いてKubernetesのリソース作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/241587dd-d7ad-982e-b07f-85b697a9c603.png)


# ① Tanzu Mission ControlでTanzu Kubernetes GridのManagement Clusterを登録
まずは下準備として、Tanzu Mission ControlでTanzu Kubernetes GridのManagement Clusterを登録します。
Tanzu Mission ControlのGUIで必要なパラメータを入力すると、エージェントをインストールするためのkubectlのコマンドが生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/f56e2f72-a978-9493-745a-36f759ea82af.png)

管理対象のクラスタでCLIでkubectlコマンドを実行すると、Tanzu Mission ControlのエージェントがKubernetesのカスタムリソースとして作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/063ebda2-6992-6d17-1a3a-0ae985a98515.png)

Tanzu Mission Controlで登録したClusterは、CPU/メモリ消費やNodeやNamespace、Workloadリソースなどが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/ddfa93c6-105c-adca-ee11-df358787f5ab.png)

# ② Tanzu Mission Control経由でTanzu Kubernetes Grid(TKG)のWorkload Clusterを作成
次はTanzu Kubernetes Grid(TKG)のWorkload Clusterを作成します。※赤字部分。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/ca9021a7-64b5-163f-c399-74e51dc1b553.png)

Tanzu Kubernetes Grid(TKG)のManagement Clusterを登録しているとWorkload Clusterを作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/dc649b12-7652-29ae-3263-e8a3e66a07df.png)

vSphere上でTanzu Kubernetes Gridを作成している場合は、クラスタがvSphereのどのリソースプールやデータストアを利用しているかも表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/c1d83731-7b30-3a30-27a6-b1e184cb31f7.png)

冒頭で説明した通り、Tanzu Mission Control独自の抽象化概念として、複数のClusterを1つのグループにまとめるCluster Groupがあります。※複数のNamespaceを1つのグループにまとめるWorkspaceもあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/c7d240de-ac33-50f0-61c4-1cf9be3cab66.png)


# ③ GitHubと連携したContinuous Delivery機能を用いてKubernetesのリソース作成
次はContinuous Delivery機能を有効化していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/8d2c8418-d54e-6439-f85f-cd0c458b2312.png)

具体的な有効化の方法は@ipppppeiさんの下記の記事を参照ください。

https://qiita.com/ipppppei/items/8835db7fa45d572c5ced

概要としては、クラスタの構成をYAMLで宣言的に定義して、Gitリポジトリに格納します。それをFlux Controllerが取得してKustomizeで同期する仕組みです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/15b1f46d-65f8-144b-a25c-995dbe6cac3a.png)

今回はGitHubでtmc-cd-demoというNamespaceとそれに紐づいたリソースを定義します。
※画像右側です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/b83e0fb0-7ade-c10e-9d48-aeab77e541b1.png)

Tanzu Mission ControlでCD機能を有効にしてKustomizationを登録すると、Workload Clusterでtmc-cd-demoのリソースが作られます。
→CLIの1行目でnamespace:tmc-cd-demoのリソースをkubectlで表示させても何も表示されていないですが、Kustomizationを登録したあとの3行目では、GitHubで定義したnamespace:tmc-cd-demoのリソースが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/a3584ab9-8a6d-73f8-46ac-014e162b50e8.png)

2023/1/31には、このCD機能がClusterGroupレベルで実行できるようになりました。
次はClusterGroup用にtmc-clustergroup-cd-demoのNamespaceをGitHubで定義します。
今回はtkgというClusterGroupの名称にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/23bd19f8-6189-bef6-a2a1-cf5416f898b0.png)

想定通り、Namespaceを見るとtmc-clustergroup-cd-demoが作成されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/1648727b-51b3-f5e5-f274-456a24b9ba29.png)

次はClusterGroup単位でContinuous Delivery機能を有効化している状態で、そのClusterGroupを指定してTanzu Kubernetes GridのWorkload Clusterを新規作成してみます。イメージとしては下記画像です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/92652b96-1a44-2e6d-974d-676251538d01.png)

下記のようにTanzu Mission ControlでCD機能を有効化済みのClusterGroupを指定して、Tanzu Kubernetes GridのWorkload Clusterを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/05058703-5a94-ef33-0e4e-844ae96f6f81.png)

次の画面は、新しく作ったWorkload Clusterの設定をTanzu Mission Controlで見たものですが、構築してすぐに関わらず、すでにCluster Group単位のCD機能が有効化されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/3e000a4e-1fd5-fa61-118c-34a97d4b7ed8.png)

次は、新しく作ったWorkload ClusterのNamespaceの一覧を表示したものですが、tmc-clustergroup-cd-demoのNamespaceが作られています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171240/40b9bf58-7d11-0a7f-4df6-fd94574d863d.png)

今回は簡単なリソースを作っただけですが、Tanzu Mission ControlのCD機能を使うことで、複数のTanzu Kubernetes Gridにまとめてリソースを作成させることや初期構築時にリソースを自動で作らせることが出来ます。


# 考えられるユースケース
VMwareのエッジソリューション（Edge Compute Stack）では、Tanzu Kubernetes GridとTanzu Mission Controlが使われています。多数の拠点にKubernetesを展開する際に手動でリソースの作成すると大変ですが、今回の仕組みを使うことで各種リソース作成を自動化することが出来ます。



# 今回のネタを書く際に参考にした記事
https://qiita.com/ipppppei/items/8835db7fa45d572c5ced

https://qiita.com/ipppppei/items/a643e71745f5e2d56c3d