こんにちは。SB C&Sの村上です。
この記事では、VMware Cloud on AWSでTanzu Kubernetes Gridを構築し、Kubernetesを利用するまでの手順についてご紹介します。
VMware Cloud on AWS上で構成するTanzu Kubernetes Gridでは、vSphereの機能拡張であるスーパーバイザーを有効にするプロセスが自動化されており、そこに手作業でTanzu Kubernetes Clusterを作成します。また、スーパーバイザーは、VMware Cloud on AWSのドキュメントでは「ワークロード制御プレーン」と表現されていることもあります。
<参考ブログ>
Tanzu Kubernetes Gridに関しては、以下ブログをご参照ください。
マルチクラウド対応 Kubernetes の Tanzu Kubernetes Grid(TKG)とは?
スーパーバイザーとTanzu Kubernetes Clusterの詳細に関しては、以下ブログをご参照ください。
vSphere 7 の新機能「vSphere with Tanzu」とは?
環境情報
本手順では、VMware Cloud on AWSでSDDCがすでに構築済みの状態から開始します。注意すべき点として、VMware Cloud on AWSにてTanzu Kubernetes Gridを有効化するには3台以上のマルチホスト構成である必要があります。
Tanzu Kubernetes Gridの有効化は、SDDCの外部にある操作用デスクトップのWebブラウザから、インターネット経由でVMware Cloud Services Consoleにアクセスして実施します。そして作成したTanzu Kubernetes Clusterの操作にあたり、SDDC上には外部からリモートデスクトップでアクセスできる作業用VM(Windows)を用意しています。
1. Tanzu Kubernetes Gridの有効化
まず、SDDCでTanzu Kubernetes Gridの有効化を行います。
従来のvSphereでは、この作業に相当する「ワークロード管理」の有効化をvSphere Clientから実施していましたが、VMware Cloud on AWSではVMware Cloud Consoleから有効化します。
VMware Cloud Consoleへログインし、3ホストで構成された、対象のSDDCのクラスタの[アクション]から[Tanzu Kubernetes Grid の有効化]を選択します。
ウィザードでは、[ネットワーク]パラメータの入力画面が表示されます。
こちらで指定した内容に基づき、Tanzu Kubernetes Gridの有効化処理のなかでネットワークが自動作成されます。そのため、ここで指定するCIDRは既存のネットワークセグメントとは重複しないように指定する必要性があります。それぞれのCIDRの詳細な説明については、ドキュメントをご確認ください。
本手順では以下のようにCIDRを入力して次に進みます。
サービスCIDR | 10.96.0.0/24 | スーパーバイザーのClusterIP(Kubernetes内部通信用)で使用されます |
---|---|---|
名前空間のネットワークCIDR | 172.16.0.0/23 | /23以上のサブネットが必要となります (/24以降はエラーになります) |
入力方向CIDR | 192.168.64.0/24 | Tanzu Kubernetes Clusterのコンテナに外部からアクセスするためのLBなどで使用されます |
出力方向CIDR | 192.168.128.0/24 | Tanzu Kubernetes Clusterのコンテナから外部にアクセスするSNATで利用されます |
最後に確認画面が表示されるため、内容に不備がないことを確認して[TANZU KUBERNETES GRID の有効化]をクリックすると、Tanzu Kubernetes Gridの作成が開始されます。
数分すると、vSphere Clientの[ワークロード管理]画面よりステータスが確認できます。
このように、vSphereクラスタがKubernetesに対応したスーパーバイザーに機能拡張されます。これによりKubernetesの制御プレーンとして、自動的にSupervisor Control Plane VMが3台デプロイされます。
2. コンテンツライブラリの作成
このあとの手順にてTanzu Kubernetes Clusterをデプロイする際に、OVAが必要になります。そこで、VMwareが公開しているTanzu Kubernetes Grid仮想マシンのOVAをダウンロードしたコンテンツライブラリを作成しておきます。
コンテンツライブラリは、次のように作成します。
- 名前と場所
- 名前:TKC-OVA ※名称は任意
- vCenter Server:デフォルトのまま
- コンテンツライブラリの設定
- [サブスクライブ済みコンテンツライブラリ]にチェック
- サブスクリプションURL:https://wp-content.vmware.com/v2/latest/lib.json
- [信頼性が確認できない]旨のポップアップが出るが[はい]をクリック
- セキュリティポリシーの適用
- 何もせず[次へ]
- ストレージの追加
- [WorkloadDatastore]を選択
パラメータの入力を進めると以下のような確認画面が表示されるので、[完了]をクリックします。
3. vSphere名前空間の作成
Tanzu Kubernetes Clusterのデプロイ先となる、vSphere名前空間の作成を行います。
名前空間の作成
[ワークロード管理]メニューで[名前空間]タブを開き、[名前空間の作成]をクリックします。
[名前空間の作成]のポップアップが表示されます。作成に必要なパラメータは、名前のみです。例として tkc-example という名前空間を作成します。
名前空間が作成されると、Tanzu Kubernetes Clusterのデプロイに必要な準備についての説明が表示されます。
名前空間の設定
名前空間には、ストレージポリシーの選択、ユーザーへの権限付与、仮想マシンのスペックを指定する仮想マシン クラス、コンテンツライブラリの追加が必要です。
本手順では作成した名前空間に以下内容を設定します。
- ストレージポリシー
- VMC Workload Storage Policy - Cluster-1
※VMware Cloud on AWSでは、管理用データストアの「vSAN Default Storage Policy」は使わないためご注意ください。
- VMC Workload Storage Policy - Cluster-1
- 権限
- ID ソース:vmc.local
- ユーザー/グループの検索:cloudadmin
- ロール:編集可能
※検証目的のため、SDDCのデフォルトの管理者ユーザーであるcloudadmin@vmc.localを利用しています。
- 仮想マシンクラス
- best-effort-small
- コンテンツライブラリ
- TKC-OVA
これらは以下スクリーンショットのように、名前空間の[サマリ]タブにて、設定項目ごとにパネルが用意されています。
4. kubectl からスーパーバイザーへのログイン
有効化したスーパーバイザーにTanzu Kubernetes Clusterを作成するため、kubectlでログインを行います。
kubectlのインストール
スーパーバイザーへのログインには、vSphere pluginを含んだkubectlが必要です。これらは、スーパーバイザー(実際には Supervisor Control Plane VM)からダウンロードできます。
vSphere名前空間の[サマリ]-[ステータス]内にある、[CLIツールへのリンク]の[リンクのコピー]をクリックします。
SDDC内の作業用VMへリモートデスクトップなどで接続し、Webブラウザでコピーしたリンクにアクセスすると、Kubernetes CLI Toolsをダウンロードできる画面が表示されます。
[DOWNLOAD CLI PLUGIN WINDOWS]でZipファイルをダウンロードします。
ダウンロードした vsphere-plugin.zip ファイルを展開すると、kubectl.exeとvSphere plugin(kubectl-vsphere.exe)が含まれています。
PowerShellを起動して、cdコマンドにて、以下のように展開したフォルダの中へ移動しておきます。
これで、「.\kubectl」とコマンド入力して実行すると kubectl.exe が実行できるようになります。
$ cd {展開したフォルダ}\vsphere-plugin\bin
また、PATH 環境変数が設定されたフォルダに kubectl.exe を配置する場合は、かならずセットで kubectl-vsphere.exe も配置してください。
スーパーバイザーへのログイン
まず、ログイン先のスーパーバイザーのアドレスを確認します。
[ワークロード管理]-[スーパーバイザー]に表示されている、[制御プレーン ノードのアドレス]がスーパーバイザーのアドレスです。
以下コマンドを実行し、パスワードを要求されるためvCenterのユーザーパスワードを入力します。
「--vsphere-username」は事前にvSphere名前空間で権限付与したユーザーを指定するため、本手順ではcloudadmin@vmc.local を指定しています。
$ .\kubectl vsphere login --insecure-skip-tls-verify --server="確認した制御プレーンアドレス" --vsphere-username="cloudadmin@vmc.local"
出力に[Logged in successfully]が出力されていればログイン成功となります。
5. Tanzu Kubernetes Clusterデプロイ
準備が完了したため、Tanzu Kubernetes Clusterのデプロイを行います。
まずTanzu Kubernetes Clusterのデプロイ用のtkc.yamlというファイルの作成を行います。本手順では「tkc-1」という名前で作成する以下yamlで進めます。
また、cidrBlocksに指定するCIDRはTanzu Kubernetes Cluster 内部で利用されるものですが、本手順では既存の環境と重複しないアドレスを指定しています。
---
kind: TanzuKubernetesCluster
apiVersion: run.tanzu.vmware.com/v1alpha1
metadata:
name: tkc-1
spec:
distribution:
version: v1.23.8
topology:
controlPlane:
count: 1
class: best-effort-small
storageClass: vmc-workload-storage-policy-cluster-1
workers:
count: 1
class: best-effort-small
storageClass: vmc-workload-storage-policy-cluster-1
settings:
network:
cni:
name: antrea
services:
cidrBlocks: ["10.21.0.0/16"]
pods:
cidrBlocks: ["10.22.0.0/16"]
kubectlのコンテキストを、Tanzu Kubernetes Clusterのデプロイ用に作成したvSphere名前空間のものに切り替えます。
$ .\kubectl config use-context tkc-example
以下コマンドで、Tanzu Kubernetes Clusterのデプロイが開始します。
$ .\kubectl apply -f tkc.yaml
vSphere Clientに戻り[ワークロード管理]メニューにある[名前空間]-[コンピューティング]を開くと、作成処理のステータスが確認可能です。
作成が完了したら、以下コマンドでTanzu Kubernetes Clusterにログインします。
パスワードが要求されるので、スーパーバイザーへのログインと同様にvCenterのユーザーパスワードを入力してください。
※コマンドが長いため、PowerShellのエスケープ文字である「`」で改行しています。
$ .\kubectl vsphere login --insecure-skip-tls-verify ` --server="制御プレーンアドレス" ` --tanzu-kubernetes-cluster-namespace=tkc-example ` --tanzu-kubernetes-cluster-name=tkc-1 ` --vsphere-username="cloudadmin@vmc.local"
出力に[Logged in successfully]が出力されていればログイン成功となります。
コンテキストを、Tanzu Kubernetes Clusterのものに切り替えます。
$ .\kubectl config use-context tkc-1
無事に[Switched to context "tkc-1".]が表示されたら、kubectlでTanzu Kubernetes Clusterを操作できるようになっています。
6. コンテナイメージの通信許可
後の手順にてPodを展開する際に、コンテナイメージを外部から取得する必要があります。しかし、VMware Cloud on AWSでは、標準でSDDC外部との通信がNSXのゲートウェイファイアウォールにて拒否されるような構成となっています。そのため、SDDCで構成されているNSX Managerにて通信の許可が必要です。
許可をする通信は、Tanzu Kubernetes Gridを有効化する際に[出力方向CIDR]として設定した、[192.168.128.0/24]のネットワークから外部宛先のものです。
ここでは具体的な手順は省略しますが、NSX Managerにて以下のように出力方向CIDRから外部への通信を許可するルールを作成します。
- ルール名:Internet Access
- 送信元:192.168.128.0/24(コンピューティンググループ)
- 宛先:任意
- サービス:任意
- 適用元:All Uplinks
- アクション:Allow
7. Tanzu Kubernetes ClusterでPodを起動
Kubernetesとしての動作確認として、Podの起動を実施します。
以下コマンドで、KubernetesにPodとServiceを作成します。
本手順では、公開コンテナレジストリ(gcr.io)からgcr.io/kuar-demo/kuard-amd64:blue イメージをダウンロードしてPodを起動しています。そして、HTTP(TCP 80)でアクセスできるようにします。
$ .\kubectl create clusterrolebinding rb-vmware-system-privileged --clusterrole=psp:vmware-system-privileged --group=system:serviceaccounts $ .\kubectl create deployment --image=gcr.io/kuar-demo/kuard-amd64:blue kuard $ .\kubectl create service loadbalancer kuard --tcp=80:8080
最後に以下コマンドで、起動したPodとServiceの状態を確認します。
$ .\kubectl get pod,svc
以下出力例のように、PodがRunning、service/kuardに[入力方向CIDR]の範囲からEXTERNAL-IPが振られていれば成功となります 。
NAME READY STATUS RESTARTS AGE
pod/kuard-5f964d5746-4vdbt 1/1 Running 0 22s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kuard LoadBalancer 10.21.235.95 192.168.64.4 80:31061/TCP 14s
service/kubernetes ClusterIP 10.21.0.1 <none> 443/TCP 21m
service/supervisor ClusterIP None <none> 6443/TCP 21m
EXTERNEL IPに作業用VMのWebブラウザからアクセスをすると、起動したPodが動作していることが確認できます。
手順完了時の構成図
本手順完了時の構成は以下のようになります。
新しくSupervisor Control PlaneとTanzu Kubernetes Clusterの制御プレーンとワーカーがノードとして追加されています。
また、Kubernetesが外部と通信するためのIPアドレスの範囲として以下が用意されています。
- 入力方向CIDR
- Kubernetesの外からPodへアクセスするためのLoad BalancerのIPアドレス範囲
- 出力方向CIDR
- PodからKubernetesの外へアクセスするためのSNATのIPアドレス範囲
※最後にアクセスしたEXTERNEL IPは入力方向CIDRより払い出されています
まとめ
今回はVMware Cloud on AWS上にTanzu Kubernetes Gridを構築する手順をご紹介しました。
一部ストレージポリシーなどVMware Cloud on AWSならではの決まりがありましたが、基本的にはオンプレミスで構築するのと比較して手順が容易になります。
オンプレミスでの構築では、NSXの準備などを1から行う場合は必要な手順が多くなります。
その点VMware Cloud on AWSでは必要なNSXのアプライアンス等が自動で準備されているため、少ない手順にて構築を実施することができるようになっています。
他のおすすめ記事はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -
VMware vExpert