Tanzu Mission Control(TMC)をCLIで操作してクラスタ登録や新規作成を試した時のメモ。
公式ドキュメントはこのあたり。
TMCはGUIでの管理が秀逸だが、運用自動化したい人から見るとどうでもよく、むしろAPIやCLIが気になるところだと思う。
TMCはAPIもCLIも用意されており、CLIの方は専用のtmcコマンドで運用が出来るようになっている。
このメモでは、そのCLIを使ってKubernetesクラスタを軽く触った時のメモになる。
CLIのインストールと初期設定
TMCにログインし、左のサイドバーからAutomation center
をクリックし、DOWNLOAD THE CLI
をクリックする。
ダウンロードしたバイナリをインストールする。Macの場合は以下のような感じでインストール出来る。
sudo install ~/Downloads/tmc /usr/local/bin/tmc
なお、tmcコマンドにはcompletionがついているので、completionがよほど嫌いでない限り設定する。
echo "source <(tmc completion bash)" >> ~/.bashrc
. ~/.bashrc
次にTMCのブラウザ画面に戻り、右上の自身のアカウント名をクリックし、My Account
を選択する。
API Tokens
のタブを選択し、下の方にGENERATE A NEW API TOKEN
とリンク表示されている文字をクリックすると以下のようなTokenの設定画面が表示される。
設定項目の意味はオフィシャルドキュメントで確認すること。
ここでは推奨値が
- "Define Scopes":
All Roles
- "OpenID":チェック
のようなので、そのように設定してGenerate Token
をクリックしてTokenを生成した。
表示されたTokenはなくさないよう控えておく。
先程DownloadしたCLIでtmc login
を実行し、初期設定を行う。
$ tmc login
i If you don't have an API token, visit the VMware Cloud Services console, select your organization, and create an API token with the TMC service roles:
https://console.cloud.vmware.com/csp/gateway/portal/#/user/tokens
? API Token ****************************************************************
? Login context name imurata-tmc
? Select default log level info
? Management Cluster Name
? Provisioner Name
√ Successfully created context imurata-tmc, to manage your contexts run `tmc system context -h`
質問の意味は以下になる。
-
API Token
:先程取得したToken -
Login context name
:CLIで操作するコンテキスト。省略するとOrganization IDになる。 -
log level
:コンソール出力時のログレベル -
Management Cluster Name
:Workloadクラスタ作成時の親クラスタの選択。省略可能。 -
Provisioner Name
:Workloadクラスタ作成時のNamespace。省略可能。
ここではAPI Token
、Login context name
を設定し、log level
をinfo
に設定して他は入力せずに進めた。
コンテキストが作成したものに切り替わっているか確認する。
tmc system context current
切り替わっている場合、以下のようにTMCで管理しているクラスタの情報などがCLIで取得できるようになる。
$ tmc cluster list
NAME MANAGEMENTCLUSTER PROVISIONER LABELS
imurata-tkg16 attached attached tmc.cloud.vmware.com/creator:imurata
Kubernetesクラスタの登録・作成
ここではvSphere with Tanzuが利用可能という前提で、Management Cluster(Supervisor Cluster)の登録、Workload Cluster(Tanzu Kubernetes Cluster)の作成をtmcコマンドで実施してみる。
Management Clusterの登録
公式の説明はこのあたりにある。
事前にコンテキストをSupervisorClusterに切り替える。
kubectl config use-context tkgs-sv
Management Clusterの登録はtmc managementcluster register
で行える。
今回、登録には2つのオプションを利用する。
-
--kubernetes-provider-type
:TKGのタイプを指定する。デフォルトではTKGSなのでvSphere with Tanzuでは不要だが、分かりやすくするために明示的に指定する -
--default-cluster-group
:TMCのClusterGroupを指定する -
--kubeconfig
:自動でAgentをManagement Clusterにインストールするために指定する。今回は~/.kube/config
を指定。
$ tmc managementcluster register imurata-tkgs-sv --kubernetes-provider-type TKGS --default-cluster-group imurata -k ~/.kube/config
√ management cluster "imurata-tkgs-sv" created successfully
i identifying TMC namespace
i installing TMC agents on the management cluster
┌ √ TMC agents installed on management cluster
┌ √ management cluster successfully registered to TMC
上手く接続できると、tmc managementcluster get
のcondition部分に正常に接続された旨が表示される。
$ tmc managementcluster get imurata-tkgs-sv
:(省略)
conditions:
READY:
message: management cluster is connected to TMC and healthy
reason: 'phase: READY, health: HEALTHY'
severity: INFO
status: "TRUE"
type: READY
なお、この登録したManagement Clusterは既にSupervisor Namespaceを持ち、Tanzu Kubernetes Clusterもデプロイ済みだが、それらはGUIから確認できる。
GUIでAdmistration
→Management clusters
で先程登録したManagement Clusterが表示されているので、その名前をクリックする。
すると、以下のようにWorkload clusterのところに作成済みのクラスタが表示される。
なお、これはTMCへは登録されていないため、tmc cluster list
では取得できない。TMCで認識するためには別途attachが必要となる
既存Workload Clusterのアタッチ
TKCのTMCへの登録はGUIからも可能だが、ここでは引き続きCLIで実施する。
CLIでの登録はtmc cluster attach
で登録する。
ここで使用するオプションは以下となる。
-
--kubeconfig
:自動でAgentをWorkload Clusterにインストールするために指定する。今回は~/.kube/config
を指定。 -
--management-cluster-name
:登録するクラスタの親クラスタを指定。ここでは先程登録したManagement Clusterを指定する -
--name
:登録するクラスタ名を指定 -
--cluster-group
:TMCのClusterGroupを指定
実行すると、以下のようになる。
$ tmc cluster attach --kubeconfig ~/.kube/config --management-cluster-name imurata-tkgs-sv --name tkgs-cluster-1 --cluster-group imurata
i Running pre-flight checks
√ cluster "tkgs-cluster-1" created successfully
└ √ TMC resources applied to the cluster successfully
i Running post-flight attach checks
┘ √ Cluster successfully attached to TMC
登録に成功するとtmc cluster list
で表示されるようになる。
tmc cluster list tkgs-cluster-1
NAME MANAGEMENTCLUSTER PROVISIONER LABELS
imurata-tkg16 attached attached tmc.cloud.vmware.com/creator:imurata
tkgs-cluster-1 attached attached tmc.cloud.vmware.com/creator:imurata
新規クラスタの作成
クラスタの作成はテンプレートをベースにyamlを作成して、それを利用してtmc clustert create
するか、対話型(-wオプション)で入力していくのが良いと思われる。ここではyamlに一旦吐き出すやり方で進める。
※対話型での進め方はこちらのKnowledgeBaseも参照するとよい。
テンプレートの一覧はtmc cluster template list
で取得できる。
$ tmc cluster template list
NAME DESCRIPTION
aws-ha A highly available AWS cluster.
default-iam default template for the iam-policy resource
expert Fully customizable template for the Cluster resource
tkg-azure Provision cluster using Tanzu Kubernetes Grid on Azure.
tkg-vsphere Provision cluster using Tanzu Kubernetes Grid on vSphere 6.7.
attached An attached cluster.
azure-ha Provision high availability cluster using Tanzu Kubernetes Grid on Azure.
default A simple AWS cluster.
tkg-aws Provision cluster using Tanzu Kubernetes Grid on AWS.
tkgs Provision cluster using Tanzu Kubernetes Grid Service on vSphere 7.
今回はvSphere with Tanzuにデプロイするので、テンプレートはtkgs
を利用する。
テンプレートを利用した場合の作成コマンドは以下となる。
tmc cluster create -n tkgs-cluster-for-tmc -g imurata --dry-run -t tkgs --storage-class vc01cl01-t0compute --version v1.22.9---vmware.1-tkg.1.cc71bc8 --management-cluster-name imurata-tkgs-sv --provisioner-name ns1 > ./tmc-cluster.yaml
オプションの意味は以下になる。
-
-n
:作成するクラスタ名 -
-g
:TMCのClusterGroup名 -
--dry-run
:yamlだけ表示して実際に作成しない -
-t
:指定するテンプレート名。ここではlistにあったtkgs
を選択 -
--storage-class
:作成するクラスタで使用するStorageClass。指定必須。 -
--version
:作成するKubernetesのバージョン。SupervisorClusterでkubectl get tkr
で取得できるものを指定する。指定必須。 -
--management-cluster-name
:登録済みのManagementCluster(SupervisorCluster) -
--provisioner-name
:SupervisorNamespace名
--provisioner-name
がやや分かりにくいので注意。
作成したyamlでNode数の変更等が必要な場合はエディタで開いて修正する。修正が終わったら以下のコマンドでクラスタを作成する。
$ tmc cluster create -f ./tmc-cluster.yaml
√ cluster "tkgs-cluster-for-tmc" is being created
作成したクラスタの情報はtmc cluster get
で取得できる。この際、ManagementClusterとProvisionerNameの指定も必要なので注意。
tmc cluster get tkgs-cluster-for-tmc --management-cluster-name imurata-tkgs-sv --provisioner-name ns1
作成したクラスタのkubeconfigはtmc cluster auth kubeconfig get
で取得できる。
ここでもManagementClusterとProvisionerNameの指定が必要になる。
以下でkubeconfigを出力して、コンテキストを切り替える。
$ tmc cluster auth kubeconfig get tkgs-cluster-for-tmc -m imurata-tkgs-sv -p ns1 >> ~/.kube/config-tmc
$ export KUBECONFIG=~/.kube/config-tmc
$ kubectl config use-context tkgs-cluster-for-tmc
Switched to context "tkgs-cluster-for-tmc".
適当にコマンドを打つと、TMCから作成したKubernetesが利用できることが分かる。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
tkgs-cluster-for-tmc-control-plane-6htcg Ready control-plane,master 13m v1.22.9+vmware.1
tkgs-cluster-for-tmc-default-node-pool-5p8s8-844c97f4bc-bzxb2 Ready <none> 11m v1.22.9+vmware.1