1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tanzu Mission ControlのCLIで既存Kubernetesクラスタの登録と新規クラスタ作成を試す

Last updated at Posted at 2023-01-02

Tanzu Mission Control(TMC)をCLIで操作してクラスタ登録や新規作成を試した時のメモ。
公式ドキュメントはこのあたり
TMCはGUIでの管理が秀逸だが、運用自動化したい人から見るとどうでもよく、むしろAPIやCLIが気になるところだと思う。
TMCはAPIもCLIも用意されており、CLIの方は専用のtmcコマンドで運用が出来るようになっている。
このメモでは、そのCLIを使ってKubernetesクラスタを軽く触った時のメモになる。

CLIのインストールと初期設定

TMCにログインし、左のサイドバーからAutomation centerをクリックし、DOWNLOAD THE CLIをクリックする。

1672628353960.png

ダウンロードしたバイナリをインストールする。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の設定画面が表示される。

1672629064660.png

設定項目の意味はオフィシャルドキュメントで確認すること。
ここでは推奨値が

  • "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 TokenLogin context nameを設定し、log levelinfoに設定して他は入力せずに進めた。

コンテキストが作成したものに切り替わっているか確認する。

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でAdmistrationManagement clustersで先程登録したManagement Clusterが表示されているので、その名前をクリックする。
すると、以下のようにWorkload clusterのところに作成済みのクラスタが表示される。
1672634127965.png

なお、これは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

ブラウザからも情報が取得できる。
1672635516570.png

新規クラスタの作成

クラスタの作成はテンプレートをベースに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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?