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

C&S ENGINEER VOICE

SB C&S

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

VMware
2023.09.07

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

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

先日、VMware Explore 2023  Las Vegasでも発表された、Tanzu Mission Controlを用いたAzure Kubernetes Service (AKS)クラスターのライフサイクル管理に関して以下記事を投稿いたしました。
Tanzu Mission ControlでAKSのライフサイクル管理

AKSにも対応したことで、EKSと併用するマルチクラウドでの利用もかなり使い勝手が良くなります。
そのため、AKSの記事の延長線という位置づけで、今後の併用という観点も加味してEKSでのライフサイクル管理をご紹介いたします。

環境情報

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

Tanzu Mission Control

  • VMware Cloud Servicesでの、APIトークンの発行権限

AWS

  • Security Token Service
    • EKSクラスターの展開先リージョン
    • us-west-2(オレゴン)リージョン
      ※Tanzu Mission Controlの連携リソースがus-west-2に作成されるため必要
  • IAM権限
    • CreateRole
    • DeleteRole
    • AttachRolePolicy
    • DetachRolePolicy
    • CreatePolicy
    • DeletePolicy

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

操作対象 操作方法 備考
Tanzu Mission Control 操作用デスクトップのWebブラウザ -
Kubernetesの操作 操作用デスクトップのPowerShell kubectlは導入済み
AWS マネジメントコンソール 操作用デスクトップのWebブラウザ -

手順開始時の環境イメージは下記です。

TMC_EKS (1).png

環境構築後のイメージは下記です。

TMC_EKS (2).png

1. EKS Credentialの作成

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

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

TMC_EKS (3).png

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

TMC_EKS (4).png

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

TMC_EKS (5).png

続いてCloudFormation Stackのテンプレート生成画面が表示されます。
[GENERATE TEMPLATE]をクリック後[NEXT]をクリックします。

TMC_EKS (6).png

続いてCloudFormation Stackを作成するための案内の画面が表示されます。
[AWS Console]を選択し、表示されたURLにアクセスします。

TMC_EKS (7).png

AWS マネジメントコンソールで、CloudFormation Stackの作成画面が表示されます。
画面下部の[承認]にチェックを入れ、[スタックの作成]をクリックします。

TMC_EKS (8).png

補足となりますが、こちらのCloudFormation StackはTanzu Mission ControlからAWS上の各種サービス(ELBやCloudWatch、Lambda等)を実行するために必要なIAMの作成をしています。
リソースタブを確認するとIAMロールとIAMポリシーがいくつか作成されていることが確認できます。

TMC_EKS (10).png

続いてこの後の手順にてAmazon Resource Name(ARN)の情報が必要となるため確認しておきます。
CloudFormation Stackが作成完了後、出力タブに切り替えることで必要なARNの情報を確認できます。

TMC_EKS (9).png

Tanzu Mission Controlに戻り、[NEXT]を選択するとARNの入力画面が表示されます
先ほど確認したARNを入力して[NEXT]-[CREATE]をクリックすると作成が開始されます。

TMC_EKS (11).png

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

TMC_EKS (12).png

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

TMC_EKS (14).png



2. EKSクラスターの作成

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

2.1. VPCの作成

EKSクラスターの作成にあたりVPCが必要となります。
本手順ではEKSのユーザーガイドにて提供されているCloudFormationのテンプレートを用いてpublic and privateのサブネットを含む形で作成します。

AWS マネジメントコンソールにて、CloudFormationにアクセスし[スタックの作成]をクリックします。

TMC_EKS (15).png

スタックの作成画面が表示されます。
以下テンプレートURLを入力して[次へ]をクリックします。
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml

TMC_EKS (16).png

スタックの詳細情報を入力する画面が表示されます。
本手順ではスタック名にcf-eks-vpcを入力して、他はデフォルトのまま[次へ]をクリックします。
※デフォルトではVpcBlockは192.168.0.0/16となっているため、既存VPCと重複がないようご注意ください。

TMC_EKS (17).png

スタックオプションの設定画面が表示されます。
そのまま[次へ]をクリックします。

TMC_EKS (18).png

レビュー画面が表示されます。
内容を確認後[送信]をクリックするとVPCの作成が開始します。

TMC_EKS (19).png

作成されたVPCを確認すると、同時に作成されたサブネット等が関連付けられていることが確認できます。

TMC_EKS (20).png

2.2. EKSクラスターの作成

EKSクラスターの作成を行います。

Tanzu Mission Controlのコンソールに戻り、[Clusters]-[ADD CLUSTER]-[Create EKS cluster]を選択します。

TMC_EKS (21).png

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

  • Cluster name:eks-1
  • Cluster group:default

TMC_EKS (22).png

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

  • Account credential:eks-credential
  • Kubernetes version:1.24
  • Network
    • Region:ap-northeast-1
    • VPC:cf-eks-vpc-VPC
    • Subnets:全選択
  • Cluster endpoint access:Public and private

TMC_EKS (23).png

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

  • Name:np1
  • Instance types:m5.xlarge (vCPU: Up to 4 vCPUs, memory: 16 GiB)
  • Scaling
    • Use with your EC2 Auto Scaling configuration:ラジオボタンチェック
    • Desired # nodes:3
    • Minimum # nodes:3
    • Maximum # nodes:6

TMC_EKS (24).png

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

TMC_EKS (25).png

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

TMC_EKS (26).png

補足となりますが、AWS マネジメントコンソールからもEKSの情報を確認することができます。
ただし、EKSの仕様としてKubernetesリソースに対して最初から適用される権限は、EKSのデプロイを行ったIAM Roleのみとなります。
今回はTanzu Mission Controlで使われているIAM Roleにてデプロイがされているため、現在権限がなくノードの情報は表示されていない形となります。
本手順上では割愛しますが、AWS マネジメントコンソールにてKubernetesリソースの確認が必要な場合はAWS公式ドキュメントをご参照ください。
また、EKSデプロイ時にはFargateの有効化はされないため、必要に応じてAWS マネジメントコンソールから実施する必要があります。

TMC_EKS (27).png

このようにTanzu Mission Control上での操作にて、EKSのデプロイを実施できます。VPCに関してはAWS マネジメントコンソール上にてあらかじめ準備をしておく必要がありますが、それ以外の作業をTanzu Mission Controlに集約することができました。

TMC_EKS (28).png

3. EKSクラスターへの接続

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

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


3.1. APIトークンの生成

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

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

TMC_EKS (29).png

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

TMC_EKS (30).png

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

  • トークン名:tmc-token
  • 範囲の定義:VMware Tanzu Mission Control

TMC_EKS (31).png

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

TMC_EKS (32).png

3.2. Tanzu CLIのセットアップ

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

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

  • tanzu-cli-windows_amd64.exe

TMC_EKS (33).png

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

TMC_EKS (34).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 ********************** 前手順で取得した認証トークン

 

3.3. kubectlでEKSへ接続

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

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

TMC_EKS (35).png

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

TMC_EKS (36).png

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

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

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

NAME                        STATUS   AGE
default                     Active   22m
kube-node-lease             Active   22m
kube-public                 Active   22m
kube-system                 Active   22m
tanzu-package-repo-global   Active   15m
tanzu-system                Active   15m
vmware-system-tmc           Active   17m

3.4. EKSで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が振られていれば成功となります 。
※EXTERNAL-IPがドメイン名で出力されており、長くなっているため以下出力では省略しております。


NAME                         READY   STATUS    RESTARTS   AGE
pod/kuard-6c7b5cd56b-72tv6   1/1     Running   0          2m10s
NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
service/kuard        LoadBalancer   10.100.123.32  <省略>          80:32479/TCP   2m6s
service/kubernetes   ClusterIP      10.100.0.1     <none>          443/TCP        16m

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

TMC_EKS (37).png

4. EKS ライフサイクル管理

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

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

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

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

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

TMC_EKS (38).png

[Upgrade cluster]のポップアップが表示されます。
そのまま[UPGRADE]をクリックします。

TMC_EKS (39).png

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

TMC_EKS (40).png

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

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

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

TMC_EKS (41).png

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

TMC_EKS (42).png

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

TMC_EKS (43).png

4.3. ノードプールの追加

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

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

TMC_EKS (44).png

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

  • Name:np2
  • Instance types:m5.xlarge (vCPU: Up to 4 vCPUs, memory: 16 GiB)
  • Scaling
    • Use with your EC2 Auto Scaling configuration:ラジオボタンチェック
    • Desired # nodes:2
    • Minimum # nodes:2
    • Maximum # nodes:2

TMC_EKS (45).png

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

TMC_EKS (46).png

4.4. クラスターの削除

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

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

TMC_EKS (47).png

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

TMC_EKS (48).png

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

TMC_EKS (51).png

AWS マネジメントコンソール上のCloudTrailを確認すると、削除が行われた様子が確認できます。

TMC_EKS (49).png

手順完了時の構成図

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

TMC_EKS (50).png

まとめ

今回はTanzu Mission ControlでEKSのライフサイクル管理を実施する手順についてご紹介しました。
注意点としては、Fargateの設定等はTanzu Mission Control上には見当たらなかったため、こちらも併用される場合は都度AWS マネジメントコンソールから操作を行う必要はあるかと思われます。
一方で、部分的にAKSとは異なる手順もありましたが、基本的には同様な操作にてライフサイクル管理を実現でき、1つのコンソールでマルチクラウドのkubernetesを管理できるという点が大きなメリットと感じました。

他のおすすめ記事はこちら

著者紹介

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

VMware vExpert