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

C&S ENGINEER VOICE

SB C&S

TKG on AWSの構築(with TMC)

VMware
2023.10.16

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

本記事ではTanzu Kubernetes Grid(TKG)の構築をAmazon Web Services(AWS)上に行い、最終的にTanzu Mission Control(TMC)の管理下にするまでの手順についてご紹介します。

まず前提として、TKGに関しては以下のように2種類ありますが、本記事で取り扱うものはTKGmと呼ばれるものとなります。
※本記事上でTKGと記載しているものはTKGmを指します

項目 説明
TKGm:マルチクラウド対応のTKG
  • マルチクラウド(AWS, Azure)及びオンプレミス環境(vSphere)に展開が可能
  • 通称としてTKGmと呼ばれる
TKGs:vSphere with TanzuでのTKG
  • vSphereでの利用に限定されるが、vSphereで利用しやすくなる機能が搭載

各TKGの情報に関しては別記事でも紹介していますため、ご参照ください。

また、本手順にて作成していくコンポーネントは以下となります。
それぞれ仮想マシンが作成されますが、本手順では全てEC2インスタンスとなります。

項目 説明
Bootstrapマシン
  • TKGのManagement Clusterの作成をするためのマシン
  • 手動でマシンを用意する必要あり
Management Cluster
  • アプリケーションを展開するWorkload Clusterを作成/管理するためのKubernetesクラスタ
Workload Cluster
  • アプリケーションを展開するためのKubernetesクラスタ

環境情報

展開先VPC

AWS上にTKGを展開するにあたり、VPCの用意が必要となります。
本手順ではTKGをDevelopment構成(Management Cluster 1台)で構築を行う想定で以下のVPCを用意しています。
※TKGをProduction構成(Management Cluster 3台)とする場合は、サブネットの数とNATゲートウェイがそれぞれ複数必要

項目 パラメータ
VPC名 TKGm-Dev-01
IPv4 CIDR ブロック 10.1.0.0/16
IPv6 CIDR ブロック 無し
アベイラビリティゾーンの数 1
パブリックサブネット 1
プライベートサブネット 1
NAT ゲートウェイ 1

TKGm_on_AWS_0_1.png

AWS CLI用 IAMユーザー

TKGの展開を行う際にAWS CLIの利用が必要となるため、IAMユーザーを個別で作成しています。
IAMユーザーは「アクセスキーを用いた認証」と「必要な権限の割り当て」が必要となります。
今回当社で操作を行った環境では、権限として以下のようにEC2, VPCなどの権限と必要なIAM権限を割り当てています。

ポリシー名 ポリシー内容
AWS管理ポリシー

AmazonEC2FullAccess

AmazonVPCFullAccess

AWSCloudFormationFullAccess

SecretsManagerReadWrite

インラインポリシー

iam:GetRole

iam:CreateRole

iam:DeleteRole

iam:PassRole

iam:GetPolicy

iam:CreatePolicy

iam:DeletePolicy

iam:PutRolePolicy

iam:AttachRolePolicy

iam:DeleteRolePolicy

iam:DetachRolePolicy

iam:CreateInstanceProfile

iam:DeleteInstanceProfile

iam:AddRoleToInstanceProfile

iam:RemoveRoleFromInstanceProfile

環境イメージ

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

TKGm_on_AWS_0_2.png

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

TKGm_on_AWS_0_3.png

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

操作対象 操作方法
Tanzu Mission Control 操作用デスクトップのWebブラウザ
Bootstrapマシン 操作 操作用デスクトップのPowerShell及びWebブラウザ
AWS マネジメントコンソール 操作用デスクトップのWebブラウザ

1. Bootstrapマシンの作成

TKGのManagement Clusterの展開に必要なBootstrapマシンの作成を行います。
Bootstrapマシンに必要な要件は以下となります。

  • マシンスペック
    • 8GB以上のRAM ※VMwareでは16 GBのRAMを推奨
    • 50GB以上の利用可能なストレージを持つディスク
    • 2個または4個の2コアCPU
  • インストールが必要なソフトウェア
    • Docker
    • Tanzu CLI
    • kubectl
    • AWS CLI ※AWS上に構築する場合のみ

1.1 EC2インスタンスの作成

Bootstrapマシン用に以下のEC2インスタンスの作成をします。

項目 パラメータ
名前 TKGm-Dev-01-Bootstrap
OS Ubuntu Server 20.0.4 LTS
インスタンスタイプ t2.xlarge (vCPU: Up to 4 vCPUs, memory: 16 GiB)
キーペア 新しいキーペアを作成
- キーペア名: Windows-for-TKGm-Dev
- タイプ: RSA
- 形式: pem
VPC TKGm-Dev-01-vpc
サブネット TKGm-Dev-01-subnet-public1-ap-northeast-1a
パブリックIPの自動割り当て 有効化
セキュリティグループ セキュリティグループを作成
- ソース: 自分のIP
- ポート範囲: 22, 80, 8080
EBSボリューム 50GB

作成が完了したら、PowerShellからSSHコマンドで接続します。

$ ssh -i "キーペアファイル" "作成したEC2インスタンスの パブリック IPv4 DNS"

## 例
$ ssh -i "Windows-for-TKGm-Dev.pem" ubuntu@ec2-13-231-213-41.ap-northeast-1.compute.amazonaws.com

1.2 Dockerのインストール

Dockerのインストールを行います。

$ sudo apt update
$ sudo apt install docker.io=24.0.5-0ubuntu1~20.04.1 

Ubuntuの例となりますが、利用可能なDockerのバージョンは以下コマンドで確認可能です。

$ apt-cache show docker.io | grep Version

## 出力
Version: 24.0.5-0ubuntu1~20.04.1
Version: 20.10.21-0ubuntu1~20.04.2
Version: 19.03.8-0ubuntu1

現在のユーザーでDockerの実行ができるようグループに追加します。

$ sudo usermod -aG docker $(whoami)
$ newgrp docker

docker psコマンドを実行して、権限エラーが出ないか確認しておきます。

$ docker ps

## 出力
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

1.3 Tanzu CLIのインストール

TKGの構築にあたりTanzu CLIとPluginが必要となるためインストールを行います。

公式ドキュメント記載のコマンドを順に実行していきます。

$ sudo apt install -y ca-certificates curl gpg
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://packages.vmware.com/tools/keys/VMWARE-PACKAGING-GPG-RSA-KEY.pub | sudo gpg --dearmor -o /etc/apt/keyrings/tanzu-archive-keyring.gpg
$ echo "deb [signed-by=/etc/apt/keyrings/tanzu-archive-keyring.gpg] https://storage.googleapis.com/tanzu-cli-os-packages/apt tanzu-cli-jessie main" | sudo tee /etc/apt/sources.list.d/tanzu.list
$ sudo apt update
$ sudo apt install -y tanzu-cli $ tanzu plugin install --group vmware-tkg/default:v2.4.0

上記最後の[tanzu plugin install]のコマンド実行時は、以下のような質問が出るため内容確認の上で選択を行います。

Do you agree to the VMware General Terms?
 >Yes
  No
Do you agree to participate in the Customer Experience Improvement Program?
 >Yes
  No

最後にインストールしたTanzu CLIとPluginの確認で以下コマンドを実行して問題なくインストールされているか確認しておきます。

$ tanzu plugin list
## 出力
Standalone Plugins
  NAME                DESCRIPTION                                                        TARGET      VERSION  STATUS
  isolated-cluster    Prepopulating images/bundle for internet-restricted environments   global      v0.31.0  installed
  pinniped-auth       Pinniped authentication operations (usually not directly invoked)  global      v0.31.0  installed
  telemetry           configure cluster-wide settings for vmware tanzu telemetry         global      v1.1.0   installed
  management-cluster  Kubernetes management cluster operations                           kubernetes  v0.31.0  installed
  package             Tanzu package management                                           kubernetes  v0.31.0  installed
  secret              Tanzu secret management                                            kubernetes  v0.31.0  installed
  telemetry           configure cluster-wide settings for vmware tanzu telemetry         kubernetes  v0.31.0  installed

1.3 kubectlのインストール

続いてkubectlのインストールを行います

kubectlはVMware Customer Connectからダウンロードします。
以下リンクページ内の[GO TO DOWNLOADS]をクリックして表示されるページにて、[kubectl cli v1.27.5 for Linux]の[DOWNLOAD NOW]を選択します。
VMware Customer Connectリンク

TKGm_on_AWS_1_1.png

ログイン画面に遷移するためログインを行うと、一般条項の同意画面が表示されます。
内容確認後、チェックボックスにチェックを入れ[ACCEPT]をクリックすると端末にkubectlのファイルがダウンロードされます。

TKGm_on_AWS_1_2.png

ダウンロードしたファイルをBootstrapマシンに転送します。
本手順では以下SCPコマンドでBootstrapマシンのホームディレクトリへ転送しています。

$ scp -i "Windows-for-TKGm-Dev.pem" kubectl-linux-v1.27.5+vmware.1.gz ubuntu@ec2-13-231-213-41.ap-northeast-1.compute.amazonaws.com:/home/ubuntu

転送完了後以下のコマンドでkubectlのインストールを完了します。

$ gunzip kubectl-linux-v1.27.5+vmware.1.gz
$ chmod ugo+x kubectl-linux-v1.27.5+vmware.1
$ sudo install kubectl-linux-v1.27.5+vmware.1 /usr/local/bin/kubectl

以下コマンドを実行してkubectlコマンドが動作していることを確認します。

$ kubectl version --short

1.4 AWS CLIのインストールと認証

TKGをAWSへ展開するにあたり、AWS IAMの認証情報が必要となるため登録を行います。

以下コマンドにてAWS CLIのインストールを行います。

$ sudo apt install -y unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip"
$ unzip /tmp/awscliv2.zip -d /tmp/ && sudo /tmp/aws/install -i /usr/local/aws-cli -b /usr/local/bin

続いて以下コマンドを実行し、準備しておいたIAMユーザーのAccess Keyなどを入力します。

$ aws configure
---
AWS Access Key ID [None]: *********
AWS Secret Access Key [None]: *********
Default region name [None]: ap-northeast-1
Default output format [None]: json

以上でBootstrapマシンの準備が完了しました。
このあとBootstrapマシンにインストールしたTanzu CLIなどを用いて、Management Clusterの作成を進めていきます。

TKGm_on_AWS_1_3.png

2. Management Clusterの作成

TKGのManagement Clusterの作成を行っていきます。
本手順ではManagement Clusterの作成をWeb UI上で実施します。

以下コマンドを実行してWeb UIを立ち上げます。

$ tanzu management-cluster create --ui --bind=0.0.0.0:8080 --browser=none

ブラウザからBootstrapマシンのパブリックIPアドレスに8080ポートでアクセスします。
TKGの作成を行う画面が表示されたら、[Amazon Web Services]の[DEPLOY]をクリックします。

TKGm_on_AWS_2_1.png


各パラメータの設定画面が表示されます。
IaaS Providerは以下パラメータを選択して、[CONNECTED]-[NEXT]をクリックします。

  • AWS CREDENTIAL PROFILE: default
  • REGION: ap-northeast-1

TKGm_on_AWS_2_2.png

VPC for AWSは事前に作成しておいたVPC IDを選択して[NEXT]をクリックします。

TKGm_on_AWS_2_3.png

続いてManagement Cluster Settingsは以下パラメータを選択して[NEXT]をクリックします。

  • INSTANCE TYPE: t2.xlarge(Development)
  • EC2 KEY PAIR: Windows-for-TKGm-Dev

TKGm_on_AWS_2_4.png

「Metadata」, 「Kubernetes Network」, 「Identity Management」の設定画面は変更せずに[NEXT]をクリックしていきます。

TKGm_on_AWS_2_5.pngTKGm_on_AWS_2_6.pngTKGm_on_AWS_2_7.png

OS Imageは以下を選択後[NEXT]をクリックします。

  • OS IMAGE: ubuntu-20.0.4-amd64

TKGm_on_AWS_2_8.png

最後のCEIP Agreementは、作成されるManagement Clusterの設定には影響しないため、内容確認後任意でチェックをつけます。
[NEXT]-[REVIEW CONFIGURATION]をクリックします。

TKGm_on_AWS_2_9.png

各パラメータの確認画面が表示されます。
内容が問題ないことを確認して、[DEPLOY MANAGEMENT CLUSTER]をクリックします。

TKGm_on_AWS_2_10.png

Management Clusterの作成が開始され、作成が完了するまで待機します。

TKGm_on_AWS_2_11.png

作成完了後、Bootstrapマシン上にて以下コマンドを実行すると、作成されたManagement Clusterの情報を確認できます。

$ tanzu management-cluster get
## 出力
  NAME                         NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES       PLAN  TKR
  tkg-mgmt-aws-20231010163856  tkg-system  running  1/1           1/1      v1.27.5+vmware.1  management  dev   v1.27.5---vmware.1-tkg.1

また、以下のコマンドにてManagement Clusterのkubeconfigを取得できます。

$ tanzu management-cluster kubeconfig get --admin

kubeconfig取得後、以下コマンドを実行すると2台のノードがManagement Clusterとして動作していることが確認できます。

$ kubectl get nodes
## 出力
NAME                                              STATUS   ROLES           AGE   VERSION
ip-10-1-130-141.ap-northeast-1.compute.internal   Ready    <none>          67m   v1.27.5+vmware.1
ip-10-1-136-164.ap-northeast-1.compute.internal   Ready    control-plane   68m   v1.27.5+vmware.1

また、AWS マネジメントコンソールからEC2インスタンスを確認するとManagement Clusterのマシンが実行されていることも確認できます。

TKGm_on_AWS_2_12.png

以上でManagement Clusterの構築が完了しました。
これによりManagement ClusterからWorkload Custerの作成を行うことができるようになりました。

このあとの手順では、TMCからManagement Clusterに指示を出してWorkload Clusterの作成を行います。

TKGm_on_AWS_2_13.png

3. Workload Clusterの作成

最後にTMCにManagement Clusterを登録して、TMC上からWorkload Clusterの作成を行います。

3.1 Management Clusterの登録

Tanzu Mission Controlのコンソールにアクセスし、[Administration]-[Management Clusters]をクリックします。
表示された画面内の[REGISTER MANAGEMENT CLUSTER]-[Tanzu Kubernetes Grid]をクリックします。

TKGm_on_AWS_4_1.png

Management Clusterの登録するためのパラメータ入力画面が表示されます。
Name and assignの設定は以下パラメータを入力して[NEXT]をクリックします。

  • Name: tkg-mgmt-aws
  • Default cluster group for managed workload clusters: default

TKGm_on_AWS_4_2.png


続いてConfigure (optional)は変更せずに[NEXT]をクリックします。

TKGm_on_AWS_4_3.png

Management Clusterに対して実行する、登録用のコマンドが表示されるので、コピーしておきます。

TKGm_on_AWS_4_4.png

TMCで表示された登録用コマンドを実行します。今回の操作では、Bootstrapマシン上からManagement Clusterに対して実行します。

$ "コピーしたコマンド"
## 出力
namespace/vmware-system-tmc created
secret/tmc-access-secret created
configmap/stack-config created
serviceaccount/tmc-bootstrapper created
clusterrole.rbac.authorization.k8s.io/tmc-bootstrapper created
clusterrolebinding.rbac.authorization.k8s.io/tmc-bootstrapper created
job.batch/tmc-bootstrapper created

TMCのコンソールに戻り、[VIEW MANAGEMENT CLUSTER]をクリックします。

TKGm_on_AWS_4_5.png

Management Cluster上にTMCのextensionが追加されていく様子が確認できます。
StatusがHealthyになったらManagement Clusterの登録完了です。

TKGm_on_AWS_4_6.png

3.2 Workload Clusterの作成

登録したManagement Clusterに対してWorkload Clusterを作成していきます。

[Clusters]-[ADD CLUSTER]-[Create Tanzu Kubernetes Grid cluster]をクリックします。

TKGm_on_AWS_4_7.png

Management Clusterを選択する画面が表示されます。
先ほど登録したManagement Clusterを選択して、[CONTINUE TO CREATE CLUSTER]をクリックします。

TKGm_on_AWS_4_8.png

Clusterの作成画面が表示されます。
Choose Provisionerは以下パラメータを選択して、[NEXT]をクリックします。

  • Provisioner: default

TKGm_on_AWS_4_9.png

Named and assignは以下パラメータを入力及び選択して[NEXT]をクリックします。

  • Cluster name: tkg-wc-02-aws
  • Cluster group: default
  • Cluster Class: tkg-aws-default-v1.2.0

TKGm_on_AWS_4_10.png

Cluster variablesは以下パラメータを選択して[NEXT]をクリックします。

  • instance Type: t2.xlarge

TKGm_on_AWS_4_11.png

Configure networkingは変更せずに[NEXT]をクリックします。

TKGm_on_AWS_4_12.png

Configure control planeは以下パラメータを選択して[NEXT]をクリックします。

  • Kubernetes version: v1.27.5+vmware.1-tkg.1
  • OS version: ubuntu 20.04 amd64
  • Highly available: 選択
  • vpc existingID: 事前準備しておいたVPC
  • ADD SUBNETS: VPC選択後、1回クリック

TKGm_on_AWS_4_13.png

Configure node poolは以下パラメータを選択して[NEXT]をクリックします。

  • OS version: ubuntu 20.04 amd64

TKGm_on_AWS_4_14.png

Advanced settingsは変更せず[CREATE CLUSTER]をクリック

TKGm_on_AWS_4_15.png

Workload Clusterの作成が開始されます。
作成完了後は、TMCの管理下としてTMCの管理コンソール上から各管理を実行することができます。

TKGm_on_AWS_4_16.png

手順完了時の構成図

本手順完了時の構成は以下のようになります。
AWS上にBootstrapマシンとTKGの各コンポーネントが追加されています。
また、今回はTMCに登録を行ったことで、Management Clusterに変更を行う以外は、基本的にTMCから各種管理を行うことができるようになっています。

TKGm_on_AWS_0_3.png

まとめ

今回はTKGをAWS上に構築して、TMCの管理下にするまでの手順についてご紹介しました。
もちろんTKGはAWSだけでなくAzureやvSphere上でも展開できるKubernetesディストリビューションとなります。そのため、マルチクラウドやハイブリッドクラウドでのKubernetes利用において、運用の共通化という観点でメリットがあると感じます。
また、TMCを併用することで管理コンソールの一本化も行うことができるため、合わせて活用することでより大きなメリットがあると思われます。

著者紹介

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

VMware vExpert