こんにちは。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を利用 |
1. サービスプリンシパルの作成
Tanzu Mission ControlからAzureの操作を行えるようにするために、Azure側にサービスプリンシパルを作成しておく必要があります。本手順では自己証明書を利用して実施するため、Azure CLIにて新規で作成していきます。
作成するサービスプリンシパルは以下となります。
- 名前:aks-principal
- 権限:サブスクリプションの共同作成者(Contributor)
- 証明書:自己証明書を適用
Azure Portalへログインを行い、右上のアイコンより[Cloud Shell]を開きます。
以下コマンドにてサービスプリンシパルの作成を行います。
※コマンドが長いため、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の[サービスを起動]をクリックします。
Tanzu Mission Controlが起動したら、[Administration]-[Accounts]-[CREATE CREDENTIAL]-[Azure AKS]を選択します。
AKS Credentialの作成画面が表示されます。
[Credential Name]にaks-credentialと入力して[NEXT]をクリックします。
続いてサービスプリンシパルの設定画面が表示されます。
事前に作成しておいたサービスプリンシパルの情報(アプリケーションID、テナントID、証明書の中身)とサブスクリプションIDをそれぞれ入力して[NEXT]をクリックします。
最後にリージョンの選択画面が表示されます。
(Asia Pacific) Japan Eastを選択して[NEXT]-[CREATE]とクリックすると作成が開始されます。
Credentialの一覧画面に戻り、Credentialが作成されたことが確認できます。
また、作成完了後にAzure Portalで確認すると、Tanzu Mission Controlの管理用リソースグループとその中にリソースが作成されていることが確認できます。
これによりTanzu Mission ControlからAKSのライフサイクル管理を行う準備が完了しました。作成されたAKS Credentialの資格情報をもとに、AKSの作成から管理まで実施が可能になっています。
3. AKSクラスターの作成
作成されたCredentialを用いてAKSクラスターの作成を行います。
[Clusters]-[ADD CLUSTER]-[Create AKS cluster]を選択します。
AKSの作成画面が表示されます。
本手順では以下パラメータを入力して[NEXT]をクリックします。
- Cluster name:aks-1
- Cluster group:default
続いて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
続いてノードプールの設定画面が表示されます。
本手順では以下パラメータを入力および選択して[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:ラジオボタンオン
Proxyの設定画面が表示されます。
そのまま[CREATE]をクリックすると作成が開始されます。
作成完了後[Clusters]からクラスターの各情報を確認できます。
このようにTanzu Mission Control上での操作にてAKSのデプロイを実施できます。これにより、今までは都度Azure Portalへ接続してデプロイしていた作業をTanzu Mission Controlに集約することができました。
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の右上のアカウント名を選択し、[マイアカウント]を選択します。
[APIトークン]-[新しいAPIトークンの生成]をクリックします。
APIトークンの生成画面が表示されます。
本手順では以下パラメータを入力および選択して[生成]をクリックします。
- トークン名:tmc-token
- 範囲の定義:VMware Tanzu Mission Control
生成が完了されると認証トークンの情報が表示されるため、[コピー]をクリックして安全な場所に保存しておきます。
※認証トークンの情報は再表示できないため、ご注意ください。
4.2. Tanzu CLIのセットアップ
Tanzu CLIを利用できるようにセットアップを行います。
Tanzu Mission Controlのコンソールに戻り、[Automation Center]-[Tanzu CLI]-[DOWNLOAD TANZU CLI]-[Windows (64bit) ]を選択し、以下ファイルをダウンロードします。
- tanzu-cli-windows_amd64.exe
ダウンロードしたtanzu-cli-windows_amd64.exeのファイル名をtanzu.exeに変更し、実行可能なパスに配置しておきます。
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 ****************************************************************
項目 | 入力値 | 備考 |
---|---|---|
- | ||
Azure Portal上からCloud Shellを利用 | ||
4.3. kubectlでAKSへ接続
Tanzu CLIのセットアップが完了したため、Tanzu Mission Controlのkubeconfigを用いてAKSクラスターへkubectlで接続を行います。
Tanzu Mission Controlのコンソールに戻り、[Clusters]から対象のクラスターを選択し、[Actions]-[Access this cluster]を選択します。
[Access this cluster]のポップアップが表示されます。
[DOWNLOAD KUBECONFIG FILE]-[Download kubeconfig for tanzu CLI]を選択します。
対象クラスターの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が動作していることが確認できます。
5. AKS ライフサイクル管理
作成したAKSクラスターのライフサイクル管理として、以下4つの実施をします。
- クラスターアップグレード
- クラスターへのノードの追加(ノードプールのスケーリング設定)
- クラスターへのノードプール追加
- クラスターの削除
5.1. クラスターアップグレード
AKSクラスターのKubernetesバージョンのアップグレードを行っていきます。
本手順では 1.25.6 から 1.26.3 へアップグレードをします。
対象のクラスターの画面を開き、右上の[UPGRADE]をクリックします。
[Upgrade cluster]のポップアップが表示されます。
[Kubernetes version]でアップグレード先として選択可能なバージョンが確認できます。
[1.26.3]を選択し、[UPGRADE]をクリックします。
アップグレード処理が完了後[Nodes]タブに移動すると、各ノードのKubernetes versionが 1.26.3 になっていることが確認できます。
5.2. クラスターへのノードの追加(ノードプールのスケーリング設定)
AKSクラスターに登録されているノードプール[np1]のスケーリング設定を変更しノードが追加されることを確認します。
対象クラスターの[Node pools]を開き、np1の[︙]-[Edit]をクリックします。
ノードプールの設定編集画面が表示されます。
Scalingの[Minimum # nodes]の値を4に変更して、[SAVE]をクリックします。
処理が完了すると対象クラスターの[Node]タブを確認すると、4つ目のノードが作成されていることが確認できます。
5.3. ノードプールの追加
AKSクラスターにノードプールの追加を行います。
対象クラスターの[Node pools]-[CREATE NODE POOL]をクリックします。
ノードプールの作成画面が表示されます。
本手順では以下パラメータを入力および選択して[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:ラジオボタンオン
作成が完了すると[Node pools]タブにてnp2が作成されていることが確認できます。
5.4. クラスターの削除
最後にAKSクラスターの削除を実施します。
対象クラスターを開き、[ACTIONS]-[Delete]を選択します。
削除の確認のポップアップが表示されます。
本手順ではリソースも削除を行うため、[Delete and remove resource(recommended)]を選択し、[aks-1]を入力して[DELETE]をクリックします
※Manually deleteはTanzu Mission Controlのコンソール上から表示されなくなるのみで、リソースは削除されません。
削除が完了すると、Tanzu Mission Controlのコンソールに表示されなくなります。
Azure Portal上のアクティビティログを確認すると、削除が行われた様子が確認できます。
手順完了時の構成図
本手順完了時(クラスタの削除を除く)の構成は以下のようになります。
新しくTanzu Mission ControlがAKSを管理するためのリソースと、実際にデプロイしたAKSが追加されています。
また、AKS上のKubernetes操作もTanzu Mission Controlから取得したkubeconfigにて可能となっています。
まとめ
今回は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