SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

Tanzu Mission ControlでAKSのライフサイクル管理

VMware
2023.09.06

こんにちは。SB C&Sの村上です。

この記事では、Tanzu Mission ControlでAzure Kubernetes Service (AKS)クラスターのライフサイクル管理を実現するまでの手順についてご紹介します。

今までのTanzu Mission Controlのライフサイクル管理機能は、Tanzu Kubernetes GridとEKSのみが対応しており、AKSは未対応でした。そのため、AKSクラスターは登録やポリシー管理は可能でしたが、新規AKSクラスターの作成やアップグレードなどは都度Azure側で行う必要がありました。

しかし、先日開催されたVMware Explore 2023  Las Vegasでも発表されたとおり、Tanzu Mission ControlにてAKSの完全なライフサイクル管理に対応しました。これにより、Tanzu Mission ControlからAKSクラスターの作成や更新、スケーリングなどを実現できるようになりました。

環境情報

本手順では、Tanzu Mission ControlとAzureの環境は利用可能な状態から開始します。注意すべき点として以下の権限がそれぞれ必要となります。

  • Tanzu Mission Control(VMware Cloud Services): APIトークンの発行権限
  • Azure: サブスクリプションへの共同作成者の割当権限

各操作はすべて操作用のデスクトップを1つ用意して、それぞれ以下のように行います。

操作対象 操作方法 備考
Tanzu Mission Control 操作用デスクトップのWebブラウザ -
Kubernetesの操作 操作用デスクトップのPowerShell kubectlは導入済み
Azure操作 操作用デスクトップのWebブラウザ Azure Portal上からCloud Shellを利用

TMC_AKS (1).png

 

1. サービスプリンシパルの作成

Tanzu Mission ControlからAzureの操作を行えるようにするために、Azure側にサービスプリンシパルを作成しておく必要があります。本手順では自己証明書を利用して実施するため、Azure CLIにて新規で作成していきます。

作成するサービスプリンシパルは以下となります。

  • 名前:aks-principal
  • 権限:サブスクリプションの共同作成者(Contributor)
  • 証明書:自己証明書を適用

Azure Portalへログインを行い、右上のアイコンより[Cloud Shell]を開きます。

TMC_AKS (2).png

以下コマンドにてサービスプリンシパルの作成を行います。
※コマンドが長いため、PowerShellのエスケープ文字である「`」で改行しています。
※<サブスクリプションID>はご自身の環境に合わせて記載ください。

$ az ad sp create-for-rbac --name aks-principal `
--role Contributor `
--create-cert `
--scopes /subscriptions/<サブスクリプションID>

コマンド実行後サービスプリンシパルの情報が出力されます。
※これらの情報は後ほどの手順にて利用します。

{
  "appId": "<アプリケーションID>",
  "displayName": "aks-principal",
  "fileWithCertAndPrivateKey": "<発行された証明書のファイルパス>",
  "password": null,
  "tenant": "<テナントID>"
}

また、後ほどの手順にて証明書の中身も必要となるため、確認をしておきます。
先ほど出力された[fileWithCertAndPrivateKey]のファイルパスに対してcatコマンドで確認できます。

$ cat <fileWithCertAndPrivateKeyのファイルパス>
-----BEGIN PRIVATE KEY-----
・・・・・
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
・・・・・
-----END CERTIFICATE-----

 

2. AKS Credentialの作成

Tanzu Mission ControlからAzureの操作を行うための資格情報として、Credentialの作成を行います。

VMware Cloud Services Consoleにログインし、[サービス]からVMware Tanzu Mission Controlの[サービスを起動]をクリックします。

TMC_AKS (3).png

Tanzu Mission Controlが起動したら、[Administration]-[Accounts]-[CREATE CREDENTIAL]-[Azure AKS]を選択します。

TMC_AKS (4).png

AKS Credentialの作成画面が表示されます。
[Credential Name]にaks-credentialと入力して[NEXT]をクリックします。

TMC_AKS (5).png

続いてサービスプリンシパルの設定画面が表示されます。
事前に作成しておいたサービスプリンシパルの情報(アプリケーションID、テナントID、証明書の中身)とサブスクリプションIDをそれぞれ入力して[NEXT]をクリックします。

TMC_AKS (6).png

最後にリージョンの選択画面が表示されます。
(Asia Pacific) Japan Eastを選択して[NEXT]-[CREATE]とクリックすると作成が開始されます。

TMC_AKS (7).png

Credentialの一覧画面に戻り、Credentialが作成されたことが確認できます。

TMC_AKS (8).png

また、作成完了後にAzure Portalで確認すると、Tanzu Mission Controlの管理用リソースグループとその中にリソースが作成されていることが確認できます。

TMC_AKS (9).png

これによりTanzu Mission ControlからAKSのライフサイクル管理を行う準備が完了しました。作成されたAKS Credentialの資格情報をもとに、AKSの作成から管理まで実施が可能になっています。

TMC_AKS (10).png

 

3. AKSクラスターの作成

作成されたCredentialを用いてAKSクラスターの作成を行います。

[Clusters]-[ADD CLUSTER]-[Create AKS cluster]を選択します。

TMC_AKS (11).png

AKSの作成画面が表示されます。
本手順では以下パラメータを入力して[NEXT]をクリックします。

  • Cluster name:aks-1
  • Cluster group:default
TMC_AKS (12).png

続いてAKSのコントロールプレーンの設定画面が表示されます。
本手順では以下パラメータを入力および選択して[NEXT]をクリックします。

  • Account credential:aks-credential
  • Resource group:create new resource group
  • New resource group name:aks-rg
  • Cluster Details
    • Region:japanest
    • Kubernetes version:1.25.6
    • AKS Pricing Tier:Free
TMC_AKS (13).png

続いてノードプールの設定画面が表示されます。
本手順では以下パラメータを入力および選択して[NEXT]をクリックします。

  • Name:np1
  • Compute
    • Node (VM) size:Standard_A8_v2 (8 vCPU, 16GiB memory)
  • Scaling
    • Minimum # nodes:3
    • Maximum # nodes:6
  • Enable public IP per node:ラジオボタンオン
TMC_AKS (14).png

Proxyの設定画面が表示されます。
そのまま[CREATE]をクリックすると作成が開始されます。

TMC_AKS (15).png

作成完了後[Clusters]からクラスターの各情報を確認できます。

TMC_AKS (16).png

このようにTanzu Mission Control上での操作にてAKSのデプロイを実施できます。これにより、今までは都度Azure Portalへ接続してデプロイしていた作業をTanzu Mission Controlに集約することができました。

TMC_AKS (17).png

 

4. AKSクラスターへの接続

作成したAKSクラスターへkubectlを用いて接続を行います。

Tanzu Mission Controlでは、管理しているクラスターのkubeconfigをダウンロードできます。ただし、このkubeconfigを利用するにはTanzu CLIのプラグインが必要となるため、合わせて準備を進めていきます。
※本手順ではkubectlは端末に導入済みです。

4.1. APIトークンの生成

Tanzu CLIの利用にあたり、事前にVMware Cloud ServicesのAPIトークンを発行しておく必要があります。

VMware Cloud Services Consoleの右上のアカウント名を選択し、[マイアカウント]を選択します。

TMC_AKS (18).png

[APIトークン]-[新しいAPIトークンの生成]をクリックします。

TMC_AKS (19).png

APIトークンの生成画面が表示されます。
本手順では以下パラメータを入力および選択して[生成]をクリックします。

  • トークン名:tmc-token
  • 範囲の定義:VMware Tanzu Mission Control
TMC_AKS (20).png

生成が完了されると認証トークンの情報が表示されるため、[コピー]をクリックして安全な場所に保存しておきます。
※認証トークンの情報は再表示できないため、ご注意ください。

TMC_AKS (21).png

4.2. Tanzu CLIのセットアップ

Tanzu CLIを利用できるようにセットアップを行います。

Tanzu Mission Controlのコンソールに戻り、[Automation Center]-[Tanzu CLI]-[DOWNLOAD TANZU CLI]-[Windows (64bit) ]を選択し、以下ファイルをダウンロードします。

  • tanzu-cli-windows_amd64.exe
TMC_AKS (22).png

ダウンロードしたtanzu-cli-windows_amd64.exeのファイル名をtanzu.exeに変更し、実行可能なパスに配置しておきます。

TMC_AKS (23).png

PowerShellを開き、以下のコマンドでTanzu CLIの初期化を行います。

$ tanzu init

以下コマンドを実行してコンテキストの作成を開始します。
コマンド実行時パラメータの要求があるため、以下のようにして進めます。

$ tanzu context create
? Select context creation type  [Use arrows to move, type to filter]
> Control plane endpoint
  Local kubeconfig
? Enter control plane endpoint 〇〇〇.tmc.cloud.vmware.com
? Give the context a name tmc-context
? API Token ****************************************************************

項目 入力値 備考
Select context creation type Control plane endpoint -
Enter control plane endpoint 〇〇〇.tmc.cloud.vmware.com 利用しているTMCコンソールのhttpを含まないドメイン名
Give the context a name tmc-context Azure Portal上からCloud Shellを利用
API Token ********************** 前手順で取得した認証トークン

4.3. kubectlでAKSへ接続

Tanzu CLIのセットアップが完了したため、Tanzu Mission Controlのkubeconfigを用いてAKSクラスターへkubectlで接続を行います。

Tanzu Mission Controlのコンソールに戻り、[Clusters]から対象のクラスターを選択し、[Actions]-[Access this cluster]を選択します。

TMC_AKS (24).png

[Access this cluster]のポップアップが表示されます。
[DOWNLOAD KUBECONFIG FILE]-[Download kubeconfig for tanzu CLI]を選択します。

TMC_AKS (25).png

対象クラスターのkubeconfigがダウンロードされます。
以下コマンドで動作を確認します。

$ kubectl --kubeconfig=<ダウンロードしたkubeconfigファイル> get namespaces

以下のようにクラスター内のnamespaceが表示されたら認証成功となります。

NAME                        STATUS   AGE
aks-command                 Active   52m
default                     Active   54m
kube-node-lease             Active   54m
kube-public                 Active   54m
kube-system                 Active   54m
tanzu-package-repo-global   Active   50m
tanzu-system                Active   50m
vmware-system-tmc           Active   52m

4.4. AKSでPodを起動

Kubernetesとしての動作確認として、Podの起動を実施します。

以下コマンドで、KubernetesにPodとServiceを作成します。
本手順では、公開コンテナレジストリ(gcr.io)からgcr.io/kuar-demo/kuard-amd64:blue イメージをダウンロードしてPodを起動しています。そして、HTTP(TCP 80)でアクセスできるようにします。

$ kubectl --kubeconfig=<ダウンロードしたkubeconfigファイル> `
create deployment --image=gcr.io/kuar-demo/kuard-amd64:blue kuard
$ kubectl --kubeconfig=<ダウンロードしたkubeconfigファイル> `
create service loadbalancer kuard --tcp=80:8080

最後に以下コマンドで、起動したPodとServiceの状態を確認します。

$ kubectl --kubeconfig=<ダウンロードしたkubeconfigファイル> get pod,svc

以下出力例のように、PodがRunning、service/kuardに[入力方向CIDR]の範囲からEXTERNAL-IPが振られていれば成功となります 。

$ 
NAME                 TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
service/kuard        LoadBalancer   10.0.215.68   20.210.45.160   80:30787/TCP   29s
service/kubernetes   ClusterIP      10.0.0.1      <none>          443/TCP        138m

EXTERNEL-IPにWebブラウザからアクセスをすると、起動したPodが動作していることが確認できます。

TMC_AKS (26).png

5. AKS ライフサイクル管理

作成したAKSクラスターのライフサイクル管理として、以下4つの実施をします。

  • クラスターアップグレード
  • クラスターへのノードの追加(ノードプールのスケーリング設定)
  • クラスターへのノードプール追加
  • クラスターの削除

5.1. クラスターアップグレード

AKSクラスターのKubernetesバージョンのアップグレードを行っていきます。
本手順では 1.25.6 から 1.26.3 へアップグレードをします。

対象のクラスターの画面を開き、右上の[UPGRADE]をクリックします。

TMC_AKS (27).png

[Upgrade cluster]のポップアップが表示されます。
[Kubernetes version]でアップグレード先として選択可能なバージョンが確認できます。
[1.26.3]を選択し、[UPGRADE]をクリックします。

TMC_AKS (28).png

アップグレード処理が完了後[Nodes]タブに移動すると、各ノードのKubernetes versionが 1.26.3 になっていることが確認できます。

TMC_AKS (29).png

5.2. クラスターへのノードの追加(ノードプールのスケーリング設定)

AKSクラスターに登録されているノードプール[np1]のスケーリング設定を変更しノードが追加されることを確認します。

対象クラスターの[Node pools]を開き、np1の[︙]-[Edit]をクリックします。

TMC_AKS (30).png

ノードプールの設定編集画面が表示されます。
Scalingの[Minimum # nodes]の値を4に変更して、[SAVE]をクリックします。

TMC_AKS (31).png

処理が完了すると対象クラスターの[Node]タブを確認すると、4つ目のノードが作成されていることが確認できます。

TMC_AKS (32).png

5.3. ノードプールの追加

AKSクラスターにノードプールの追加を行います。

対象クラスターの[Node pools]-[CREATE NODE POOL]をクリックします。

TMC_AKS (33).png

ノードプールの作成画面が表示されます。
本手順では以下パラメータを入力および選択して[CREATE]をクリックします。

  • Name:np2
  • Compute
    • Node (VM) size:Standard_A8_v2 (8 vCPU, 16GiB memory)
  • Scaling
    • Minimum # nodes:2
    • Maximum # nodes:2
  • Enable public IP per node:ラジオボタンオン
TMC_AKS (34).png

作成が完了すると[Node pools]タブにてnp2が作成されていることが確認できます。

TMC_AKS (35).png

5.4. クラスターの削除

最後にAKSクラスターの削除を実施します。

対象クラスターを開き、[ACTIONS]-[Delete]を選択します。

TMC_AKS (36).png

削除の確認のポップアップが表示されます。
本手順ではリソースも削除を行うため、[Delete and remove resource(recommended)]を選択し、[aks-1]を入力して[DELETE]をクリックします
※Manually deleteはTanzu Mission Controlのコンソール上から表示されなくなるのみで、リソースは削除されません。

TMC_AKS (37).png

削除が完了すると、Tanzu Mission Controlのコンソールに表示されなくなります。

TMC_AKS (38).png

Azure Portal上のアクティビティログを確認すると、削除が行われた様子が確認できます。

TMC_AKS (39).png

 

手順完了時の構成図

本手順完了時(クラスタの削除を除く)の構成は以下のようになります。
新しくTanzu Mission ControlがAKSを管理するためのリソースと、実際にデプロイしたAKSが追加されています。
また、AKS上のKubernetes操作もTanzu Mission Controlから取得したkubeconfigにて可能となっています。

TMC_AKS (40).png

まとめ

今回はTanzu Mission ControlでAKSのライフサイクル管理を実施する手順についてご紹介しました。
Azure側で必要な操作は最初のTanzu Mission Controlと連携するまでとなっており、あとはTanzu Mission Control側でほぼすべて対応できるようになりました。
一方で連携するまでの手順はAKS, EKS, Tanzu Kubernetes Gridそれぞれで異なります。ただし、その連携部分さえ終えればあとは1つのコンソールにてまとめて管理できるという点はとても大きなメリットだと思います。

著者紹介

SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -

VMware vExpert