vSphere 8.0 U2 で、vSphere with Tanzu の自宅ラボ環境を構築していきます。今回は、vSphere 名前空間に、Tanzu Kubernetes Gird Service(TKGS)のクラスタを作成します。
今回の内容です。
- ラボ構成のイメージ
- vSphere with Tanzu での Kubernetes クラスタの種類
- Tanzu Kubernetes Release のコンテンツ ライブラリ
- 1. TKGS の Kubernetes クラスタを定義した YAML の作成
- 2. TKGS での Kubernetes クラスタの作成
- 3. 作成された Kubernetes クラスタの確認
- 参考: 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 クラスタで構成されます。
- スーパーバイザー: vSphere に組み込まれた Kubernetes クラスタ。
- TKGS クラスタや、スーパーバイザー サービスを管理するための Kubernetes クラスタ。
- 制御プレーン ノードは、Supervisor Controller Plane VM。
- Worker ノードは ESXi ホストだが、NSX を使用する 1-Zone スーパーバイザーの場合のみ、ESXi が Kubernetes の Worker ノードとなり、vSphere Pod を起動できる。
- Tanzu Kubernetes Grid Service(TKGS)クラスタ: スーパーバイザーの vSphere 名前空間に、仮想マシンによる Kubernetes クラスタを作成する。
- 仮想マシンのゲスト OS で Kubernetes クラスタを作成して、その上で Pod を起動する。
- 制御プレーン ノードは、コンテンツ ライブラリの OVF から展開された仮想マシン。
- Worker ノードも、コンテンツ ライブラリの OVF から展開された仮想マシン。
そして、TKGS クラスタのベースとなる Cluster API では、前述の vSphere with Tanzu での観点とは別の観点の、2種類の Kubernetes クラスタの役割が存在します。
- Management Cluster
- Kubernetes クラスタのライフサイクル(作成やアップデート)を管理するために利用される、Kubernetes クラスタ。
- vSphere with Tanzu の TKGS では、スーパーバイザー クラスタが Management Cluster の役割となる。
- 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 が使用されます。
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
つづく。