vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-13: TKGS クラスタの作成

vSphere 8.0 U2 で、vSphere with Tanzu の自宅ラボ環境を構築していきます。今回は、vSphere 名前空間に、Tanzu Kubernetes Gird Service(TKGS)のクラスタを作成します。

 

今回の内容です。

 

ラボ構成のイメージ

今回は、Tanzu Kubernetes Gird Service(TKGS)クラスタを作成します。これにより、vSphere 名前空間の Tier-1 ゲートウェイに、追加のオーバーレイ ネットワークが作成され、Kubernetes クラスタを構成する仮想マシンがデプロイされます。

 

今回の TKGS クラスタでは、制御プレーン x1、ワーカー x1 を展開します。仮想マシン クラス「best-effort-xsmall」を指定することで、どちらも 2 vCPU / 2GB RAM が割り当てられます。

 

vSphere with Tanzu での Kubernetes クラスタの種類

vSphere with Tanzu では、2種類の Kubernetes クラスタで構成されます。

  1. スーパーバイザー: vSphere に組み込まれた Kubernetes クラスタ。
    • TKGS クラスタや、スーパーバイザー サービスを管理するための Kubernetes クラスタ。
    • 制御プレーン ノードは、Supervisor Controller Plane VM。
    • Worker ノードは ESXi ホストだが、NSX を使用する 1-Zone スーパーバイザーの場合のみ、ESXi が Kubernetes の Worker ノードとなり、vSphere Pod を起動できる。
  2. Tanzu Kubernetes Grid Service(TKGS)クラスタ: スーパーバイザーの vSphere 名前空間に、仮想マシンによる Kubernetes クラスタを作成する。
    • 仮想マシンのゲスト OS で Kubernetes クラスタを作成して、その上で Pod を起動する。
    • 制御プレーン ノードは、コンテンツ ライブラリの OVF から展開された仮想マシン。
    • Worker ノードも、コンテンツ ライブラリの OVF から展開された仮想マシン。

 

そして、TKGS クラスタのベースとなる Cluster API では、前述の vSphere with Tanzu での観点とは別の観点の、2種類の Kubernetes クラスタの役割が存在します。

  1. Management Cluster
    • Kubernetes クラスタのライフサイクル(作成やアップデート)を管理するために利用される、Kubernetes クラスタ。
    • vSphere with Tanzu の TKGS では、スーパーバイザー クラスタが Management Cluster の役割となる。
  2. Workload Cluster
    • 管理用途でははないアプリケーション(ワークロード)を展開するための Kubernetes クラスタ。
    • vSphere with Tanzu の TKGS では、スーパーバイザーの vSphere 名前空間に 仮想マシンがデプロイされて、そのゲスト OS でさらに Kubernetes クラスタが作成される。

 

ここからは、Cluster API での「Workload Cluster」にあたる、TKGS クラスタを作成します。

 

Tanzu Kubernetes Release のコンテンツ ライブラリ

TKGS クラスタの仮想マシンは、Tanzu Kubernetes Release(TKR)の OVF から展開されますが、これはコンテンツ ライブラリから提供されます。

以前は、コンテンツ ライブラリを手動作成する必要がありました。しかし vSphere 8.0 U2 では、自動的に「Kubernetes Service Content Library」という名前のコンテンツ ライブラリが作成され、vSphere 名前空間に登録されます。

ただし、TKR の OVF はインターネットからダウンロードするので、コンテンツ ライブラリがインターネットからファイルをダウンロードできるように環境構成しておく必要があります。

 

1. TKGS の Kubernetes クラスタを定義した YAML の作成

今回は、下記の YAML を作成しました。

tkc-01_v1beta1.yml

  • 1行目: Cluster API(cluster.x-k8s.io)の v1beta1 バージョンを利用します。
  • 2行目: 作成するリソースは、Cluster(TanzuKubernetesCluster ではなく)
  • 4行目: クラスタ名は tkc-01
  • 8行目: Kubernetes バージョンは v1.26.5(TKR は v1.26.5---vmware.2-fips.1-tkg.1)
  • 10行目: Control Plane ノード数は 1
  • 15行目: Worker ノード数は 1
  • 18行目: 仮想マシン クラスは、best-effort-xsmall
  • 19~22行目: StorageClass / デフォルトの StorageClass は、どちらも vwt-nfs-policy
  • 25行目: Kubernetes クラスタ内でのサービスで利用される IP レンジ
  • 27行目: Pod に割り当てる IP レンジ

ちなみに Pod Network の CNI には、デフォルトでは Antrea が使用されます。

gist.github.com

 

2. TKGS での Kubernetes クラスタの作成

kubectl で用意した YAML をもとに Kubernetes クラスタを作成します。

スーパーバイザーには、下記のように接続しておきます。

 

vSphere 名前空間のコンテキストに切り替えておきます。

$ kubectl config use-context demo-ns-01
Switched to context "demo-ns-01".

 

YAML で指定した vmClass が、vSphere 名前空間に VirtualMachineClassBindings として 追加されていることを確認しておきます。

$ kubectl get virtualmachineclassbindings
NAME                 AGE
best-effort-small    15m
best-effort-xsmall   15m

 

kubectl apply で、YAML ファイルを指定して TKGS クラスタを作成します。

$ kubectl apply -f tkc-01_v1beta1.yml
cluster.cluster.x-k8s.io/tkc-01 created

 

しばらく待つと、Kubernetes クラスタが作成されます。cluster リソースを確認すると Provisioned になっています。

$ kubectl get cluster
NAME     PHASE         AGE   VERSION
tkc-01   Provisioned   61m   v1.26.5+vmware.2-fips.1

 

仮想マシンの様子は、Machine リソースで確認できます。すべての仮想マシンが Running になっています。

$ kubectl get machine
NAME                                       CLUSTER   NODENAME                                   PROVIDERID                                       PHASE     AGE   VERSION
tkc-01-jczhj-8qvqn                         tkc-01    tkc-01-jczhj-8qvqn                         vsphere://421c58aa-14d9-56b5-0fa9-c5deff803794   Running   63m   v1.26.5+vmware.2-fips.1
tkc-01-node-pool-1-gz5rs-d8bbc7d9b-dkj4j   tkc-01    tkc-01-node-pool-1-gz5rs-d8bbc7d9b-dkj4j   vsphere://421c38dd-a786-3ed9-84f2-df90dad490ef   Running   64m   v1.26.5+vmware.2-fips.1

 

vSphere ならではの、vSphereMachine リソースもあります。

$ kubectl get vspheremachine
NAME                                   ZONE     PROVIDERID                                       IPADDR
tkc-01-control-plane-gn88b-dp2xq       zone-1   vsphere://421c58aa-14d9-56b5-0fa9-c5deff803794   10.244.0.34
tkc-01-node-pool-1-infra-6mh8z-rnbm9            vsphere://421c38dd-a786-3ed9-84f2-df90dad490ef   10.244.0.35

 

Worker ノードの、MachineDeployments の様子です。

$ kubectl get machinedeployments
NAME                       CLUSTER   REPLICAS   READY   UPDATED   UNAVAILABLE   PHASE     AGE   VERSION
tkc-01-node-pool-1-gz5rs   tkc-01    1          1       1         0             Running   66m   v1.26.5+vmware.2-fips.1

 

3. 作成された Kubernetes クラスタの確認

TKGS のクラスタは、vSphere 名前空間の直下にオブジェクトが作成され、さらにその下にノードの仮想マシンが作成されます。この例では、Control Plane x1、Worker x1 で、合計2台の仮想マシンが作成されています。

 

「ワークロード管理」メニュー → vSphere 名前空間(demo-ns-01)→「コンピューティング」タブを開くと、「Tanzu Kubernetes クラスタ」にも、作成したクラスタが表示されています。

 

「仮想マシン」には、2台の仮想マシンが表示されています。

 

「ネットワーク」タブ →「サービス」を開くと、Control Plane の外部 IP アドレスが、LoadBalancer タイプの Service リソースで払い出されていることがわかります。

 

NSX Manager では、この LoadBalancer Service が NSX ロードバランサで用意されていることがわかります。

 

参考: TKGS クラスタの削除

TKGS クラスタが不要になったら、下記のように削除できます。

スーパーバイザーにログインしてある状態で、コンテキストを vSphere 名前空間に変更しておきます。

$ kubectl config use-context demo-ns-01
Switched to context "demo-ns-01".

 

作成時に利用した YAML ファイルを利用して削除します。

$ kubectl delete -f tkc-01_v1beta1.yml

 

YAML ファイルを指定せず、下記のように Cluster リソース(tkc-01)を指定して削除することもできます。

$ kubectl delete cluster tkc-01
cluster.cluster.x-k8s.io "tkc-01" deleted

 

つづく。