こんにちは。SB C&Sの村上です。
本記事ではTanzu Kubernetes Grid(TKG)の構築をAmazon Web Services(AWS)上に行い、最終的にTanzu Mission Control(TMC)の管理下にするまでの手順についてご紹介します。
まず前提として、TKGに関しては以下のように2種類ありますが、本記事で取り扱うものはTKGmと呼ばれるものとなります。
※本記事上でTKGと記載しているものはTKGmを指します
項目 | 説明 |
---|---|
TKGm:マルチクラウド対応のTKG |
|
TKGs:vSphere with TanzuでのTKG |
|
各TKGの情報に関しては別記事でも紹介していますため、ご参照ください。
また、本手順にて作成していくコンポーネントは以下となります。
それぞれ仮想マシンが作成されますが、本手順では全てEC2インスタンスとなります。
項目 | 説明 |
---|---|
Bootstrapマシン |
|
Management Cluster |
|
Workload Cluster |
|
環境情報
展開先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 |
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 |
環境イメージ
手順開始時の環境イメージは以下です。
環境構築後のイメージは以下です。
各操作は操作用のデスクトップを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リンク
ログイン画面に遷移するためログインを行うと、一般条項の同意画面が表示されます。
内容確認後、チェックボックスにチェックを入れ[ACCEPT]をクリックすると端末にkubectlのファイルがダウンロードされます。
ダウンロードしたファイルを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の作成を進めていきます。
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]をクリックします。
各パラメータの設定画面が表示されます。
IaaS Providerは以下パラメータを選択して、[CONNECTED]-[NEXT]をクリックします。
- AWS CREDENTIAL PROFILE: default
- REGION: ap-northeast-1
VPC for AWSは事前に作成しておいたVPC IDを選択して[NEXT]をクリックします。
続いてManagement Cluster Settingsは以下パラメータを選択して[NEXT]をクリックします。
- INSTANCE TYPE: t2.xlarge(Development)
- EC2 KEY PAIR: Windows-for-TKGm-Dev
「Metadata」, 「Kubernetes Network」, 「Identity Management」の設定画面は変更せずに[NEXT]をクリックしていきます。
OS Imageは以下を選択後[NEXT]をクリックします。
- OS IMAGE: ubuntu-20.0.4-amd64
最後のCEIP Agreementは、作成されるManagement Clusterの設定には影響しないため、内容確認後任意でチェックをつけます。
[NEXT]-[REVIEW CONFIGURATION]をクリックします。
各パラメータの確認画面が表示されます。
内容が問題ないことを確認して、[DEPLOY MANAGEMENT CLUSTER]をクリックします。
Management Clusterの作成が開始され、作成が完了するまで待機します。
作成完了後、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のマシンが実行されていることも確認できます。
以上でManagement Clusterの構築が完了しました。
これによりManagement ClusterからWorkload Custerの作成を行うことができるようになりました。
このあとの手順では、TMCからManagement Clusterに指示を出してWorkload Clusterの作成を行います。
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]をクリックします。
Management Clusterの登録するためのパラメータ入力画面が表示されます。
Name and assignの設定は以下パラメータを入力して[NEXT]をクリックします。
- Name: tkg-mgmt-aws
- Default cluster group for managed workload clusters: default
続いてConfigure (optional)は変更せずに[NEXT]をクリックします。
Management Clusterに対して実行する、登録用のコマンドが表示されるので、コピーしておきます。
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]をクリックします。
Management Cluster上にTMCのextensionが追加されていく様子が確認できます。
StatusがHealthyになったらManagement Clusterの登録完了です。
3.2 Workload Clusterの作成
登録したManagement Clusterに対してWorkload Clusterを作成していきます。
[Clusters]-[ADD CLUSTER]-[Create Tanzu Kubernetes Grid cluster]をクリックします。
Management Clusterを選択する画面が表示されます。
先ほど登録したManagement Clusterを選択して、[CONTINUE TO CREATE CLUSTER]をクリックします。
Clusterの作成画面が表示されます。
Choose Provisionerは以下パラメータを選択して、[NEXT]をクリックします。
- Provisioner: default
Named and assignは以下パラメータを入力及び選択して[NEXT]をクリックします。
- Cluster name: tkg-wc-02-aws
- Cluster group: default
- Cluster Class: tkg-aws-default-v1.2.0
Cluster variablesは以下パラメータを選択して[NEXT]をクリックします。
- instance Type: t2.xlarge
Configure networkingは変更せずに[NEXT]をクリックします。
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回クリック
Configure node poolは以下パラメータを選択して[NEXT]をクリックします。
- OS version: ubuntu 20.04 amd64
Advanced settingsは変更せず[CREATE CLUSTER]をクリック
Workload Clusterの作成が開始されます。
作成完了後は、TMCの管理下としてTMCの管理コンソール上から各管理を実行することができます。
手順完了時の構成図
本手順完了時の構成は以下のようになります。
AWS上にBootstrapマシンとTKGの各コンポーネントが追加されています。
また、今回はTMCに登録を行ったことで、Management Clusterに変更を行う以外は、基本的にTMCから各種管理を行うことができるようになっています。
まとめ
今回はTKGをAWS上に構築して、TMCの管理下にするまでの手順についてご紹介しました。
もちろんTKGはAWSだけでなくAzureやvSphere上でも展開できるKubernetesディストリビューションとなります。そのため、マルチクラウドやハイブリッドクラウドでのKubernetes利用において、運用の共通化という観点でメリットがあると感じます。
また、TMCを併用することで管理コンソールの一本化も行うことができるため、合わせて活用することでより大きなメリットがあると思われます。
他のおすすめ記事はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -
VMware vExpert