こんにちは。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の環境は利用可能な状態から開始します。注意すべき点として以下の権限がそれぞれ必要となります。
- 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ブラウザ | - |
環境構築後のイメージは下記です。
1. EKS Credentialの作成
Tanzu Mission ControlからAWSの操作を行うための資格情報として、Credentialの作成を行います。
VMware Cloud Services Consoleにログインし、[サービス]からVMware Tanzu Mission Controlの[サービスを起動]をクリックします。
Tanzu Mission Controlが起動したら、[Administration]-[Accounts]-[CREATE CREDENTIAL]-[AWS EKS]を選択します。
EKS Credentialの作成画面が表示されます。
[Credential Name]にeks-credentialと入力して[NEXT]をクリックします。
続いてCloudFormation Stackのテンプレート生成画面が表示されます。
[GENERATE TEMPLATE]をクリック後[NEXT]をクリックします。
続いてCloudFormation Stackを作成するための案内の画面が表示されます。
[AWS Console]を選択し、表示されたURLにアクセスします。
AWS マネジメントコンソールで、CloudFormation Stackの作成画面が表示されます。
画面下部の[承認]にチェックを入れ、[スタックの作成]をクリックします。
補足となりますが、こちらのCloudFormation StackはTanzu Mission ControlからAWS上の各種サービス(ELBやCloudWatch、Lambda等)を実行するために必要なIAMの作成をしています。
リソースタブを確認するとIAMロールとIAMポリシーがいくつか作成されていることが確認できます。
続いてこの後の手順にてAmazon Resource Name(ARN)の情報が必要となるため確認しておきます。
CloudFormation Stackが作成完了後、出力タブに切り替えることで必要なARNの情報を確認できます。
Tanzu Mission Controlに戻り、[NEXT]を選択するとARNの入力画面が表示されます
先ほど確認したARNを入力して[NEXT]-[CREATE]をクリックすると作成が開始されます。
Credentialの一覧画面に戻り、Credentialが作成されたことが確認できます。
これでTanzu Mission ControlからEKSのライフサイクル管理を行う準備が完了しました。作成されたEKS Credentialの資格情報をもとに、EKSの作成から管理まで実施が可能になっています。
2. EKSクラスターの作成
作成されたCredentialを用いて、EKSクラスターの作成を行います。
2.1. VPCの作成
EKSクラスターの作成にあたりVPCが必要となります。
本手順ではEKSのユーザーガイドにて提供されているCloudFormationのテンプレートを用いてpublic and privateのサブネットを含む形で作成します。
AWS マネジメントコンソールにて、CloudFormationにアクセスし[スタックの作成]をクリックします。
スタックの作成画面が表示されます。
以下テンプレートURLを入力して[次へ]をクリックします。https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
スタックの詳細情報を入力する画面が表示されます。
本手順ではスタック名にcf-eks-vpcを入力して、他はデフォルトのまま[次へ]をクリックします。
※デフォルトではVpcBlockは192.168.0.0/16となっているため、既存VPCと重複がないようご注意ください。
スタックオプションの設定画面が表示されます。
そのまま[次へ]をクリックします。
レビュー画面が表示されます。
内容を確認後[送信]をクリックするとVPCの作成が開始します。
作成されたVPCを確認すると、同時に作成されたサブネット等が関連付けられていることが確認できます。
2.2. EKSクラスターの作成
EKSクラスターの作成を行います。
Tanzu Mission Controlのコンソールに戻り、[Clusters]-[ADD CLUSTER]-[Create EKS cluster]を選択します。
EKSの作成画面が表示されます。
本手順では以下パラメータを入力して[NEXT]をクリックします。
- Cluster name:eks-1
- Cluster group:default
続いて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
続いてノードプールの設定画面が表示されます。
本手順では以下パラメータを入力および選択して[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
Proxyの設定画面が表示されます。
そのまま[CREATE]をクリックすると作成が開始されます。
作成完了後、[Clusters]からクラスターの各情報を確認できます。
補足となりますが、AWS マネジメントコンソールからもEKSの情報を確認することができます。
ただし、EKSの仕様としてKubernetesリソースに対して最初から適用される権限は、EKSのデプロイを行ったIAM Roleのみとなります。
今回はTanzu Mission Controlで使われているIAM Roleにてデプロイがされているため、現在権限がなくノードの情報は表示されていない形となります。
本手順上では割愛しますが、AWS マネジメントコンソールにてKubernetesリソースの確認が必要な場合はAWS公式ドキュメントをご参照ください。
また、EKSデプロイ時にはFargateの有効化はされないため、必要に応じてAWS マネジメントコンソールから実施する必要があります。
このようにTanzu Mission Control上での操作にて、EKSのデプロイを実施できます。VPCに関してはAWS マネジメントコンソール上にてあらかじめ準備をしておく必要がありますが、それ以外の作業をTanzu Mission Controlに集約することができました。
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の右上のアカウント名を選択し、[マイアカウント]を選択します。
[APIトークン]-[新しいAPIトークンの生成]をクリックします。
APIトークンの生成画面が表示されます。
本手順では以下パラメータを入力および選択して[生成]をクリックします。
- トークン名:tmc-token
- 範囲の定義:VMware Tanzu Mission Control
生成が完了されると認証トークンの情報が表示されるため、[コピー]をクリックして安全な場所に保存しておきます。
※認証トークンの情報は再表示できないため、ご注意ください。
3.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を利用 | ||
3.3. kubectlでEKSへ接続
Tanzu CLIのセットアップが完了したため、Tanzu Mission Controlからダウンロードしたkubeconfigを用いてEKSクラスターへ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
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が動作していることが確認できます。
4. EKS ライフサイクル管理
作成したEKSクラスターのライフサイクル管理として、以下4つの実施をします。
- クラスターアップグレード
- クラスターへのノードの追加(ノードプールのスケーリング設定)
- クラスターへのノードプール追加
- クラスターの削除
4.1. クラスターアップグレード
EKSクラスターのKubernetesバージョンのアップグレードを行っていきます。
本手順では 1.24 から 1.25 へアップグレードをします。
対象のクラスターの画面を開き、右上の[UPGRADE]をクリックします。
[Upgrade cluster]のポップアップが表示されます。
そのまま[UPGRADE]をクリックします。
アップグレード処理が完了後[Nodes]タブに移動すると、各ノードのKubernetes versionが 1.25になっていることが確認できます。
4.2. クラスターへのノードの追加(ノードプールのスケーリング設定)
EKSクラスターに登録されているノードプール[np1]のスケーリング設定を変更しノードが追加されることを確認します。
対象クラスターの[Node pools]を開き、np1の[︙]-[Edit]をクリックします。
ノードプールの設定編集画面が表示されます。
Scalingの[Desired # nodes]と[Minimum # nodes]の値を4に変更して、[SAVE]をクリックします。
処理が完了後、対象クラスターの[Node]タブを確認すると、4つ目のノードが作成されていることが確認できます。
4.3. ノードプールの追加
EKSクラスターにノードプールの追加を行います。
対象クラスターの[Node pools]-[CREATE NODE POOL]をクリックします。
ノードプールの作成画面が表示されます。
本手順では以下パラメータを入力および選択して[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
作成が完了すると[Node pools]タブにてnp2が作成されていることが確認できます。
4.4. クラスターの削除
最後にEKSクラスターの削除を実施します。
対象クラスターを開き、[ACTIONS]-[Delete]を選択します。
削除の確認のポップアップが表示されます。
本手順ではリソースも削除を行うため、[Delete and remove resources(recommended)]を選択し、[eks-1]を入力して[DELETE]をクリックします
※Manually deleteはTanzu Mission Controlのコンソール上から表示されなくなるのみで、リソースは削除されません。
削除が完了すると、Tanzu Mission Controlのコンソールに表示されなくなります。
AWS マネジメントコンソール上のCloudTrailを確認すると、削除が行われた様子が確認できます。
手順完了時の構成図
本手順完了時(クラスターの削除を除く)の構成は以下のようになります。
新しくTanzu Mission ControlがEKSを管理するためのIAMロールと、実際にデプロイしたEKSが追加されています。
また、EKS上のKubernetes操作もTanzu Mission Controlから取得したkubeconfigにて可能となっています。
まとめ
今回はTanzu Mission ControlでEKSのライフサイクル管理を実施する手順についてご紹介しました。
注意点としては、Fargateの設定等はTanzu Mission Control上には見当たらなかったため、こちらも併用される場合は都度AWS マネジメントコンソールから操作を行う必要はあるかと思われます。
一方で、部分的にAKSとは異なる手順もありましたが、基本的には同様な操作にてライフサイクル管理を実現でき、1つのコンソールでマルチクラウドのkubernetesを管理できるという点が大きなメリットと感じました。
他のおすすめ記事はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -
VMware vExpert