vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-24: TKGS クラスタの作成(NSX + NSX ALB スーパーバイザー)

vSphere 8.0 U2 で、vSphere with Tanzu の自宅ラボ環境を構築していきます。今回は、NSX と NSX ALB を使用しているスーパーバイザーで Tanzu Kubernetes Gird Service(TKGS)のクラスタを作成します。

 

今回の内容です。

 

ラボ構成のイメージ

今回は TKGS クラスタを作成して、NSX ALB による VIP の様子を確認してみます。

 

これまでと同様に、TKGS クラスタを作成することで、Kubernetes クラスタのノードを構成する仮想マシンが自動的に展開されます。

 

Tanzu Kubernetes Gird Service(TKGS)クラスタの作成

NSX と NSX ALB のスーパーバイザーでの Tanzu Kubernetes Gird Service(TKGS)の作成も、NSX だけのスーパーバイザーでの手順と同様です。

これまで投稿と同様の手順で、vSphere 名前空間を作成して、kubectl でスーパーバイザーに接続して、TKGS クラスタを作成します。

 

vSphere 名前空間は、「Part-11: vSphere 名前空間の作成」の手順で「demo-ns-03」という名前で作成してあります。

 

TKGS クラスタは、「Part-13: TKGS クラスタの作成」で使用した YAML(tkc-01)で作成します。

tkc-01_v1beta1.yml

gist.github.com

 

kubectl でスーパーバイザーに接続して、TKGS クラスタを作成します。kubectl での接続先は、NSX ALB の VIP によって提供されるスーパーバイザー制御プレーンの IP アドレスになります。

Supervisor Control Plane VM への経路は、下記のようになるはずです。

 

demo-ns-03 コンテキスト(名前空間も demo-ns-03)で、TKGS を作成します。

$ kubectl config use-context demo-ns-03
Switched to context "demo-ns-03".
$ kubectl apply -f tkc-01_v1beta1.yml
cluster.cluster.x-k8s.io/tkc-01 created

 

TKG クラスタの確認

スーパーバイザーに作成された TKGS のクラスタです。

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

 

TKGS クラスタのノードとなる仮想マシン リソースです。

$ kubectl get machine
NAME                                        CLUSTER   NODENAME                                    PROVIDERID                                       PHASE     AGE    VERSION
tkc-01-4cp9t-r2bbx                          tkc-01    tkc-01-4cp9t-r2bbx                          vsphere://421cb2b5-f2ed-ff91-d8a0-b8dd7de11ba6   Running   137m   v1.26.5+vmware.2-fips.1
tkc-01-node-pool-1-dcnsb-67fdc5d4b8-qh27w   tkc-01    tkc-01-node-pool-1-dcnsb-67fdc5d4b8-qh27w   vsphere://421c4fd6-ae17-0db7-5fa8-399dd21d0afe   Running   68m    v1.26.5+vmware.2-fips.1
$ kubectl get vspheremachine
NAME                                   ZONE     PROVIDERID                                       IPADDR
tkc-01-control-plane-7qznz-97gwl       zone-1   vsphere://421cb2b5-f2ed-ff91-d8a0-b8dd7de11ba6   10.244.0.34
tkc-01-node-pool-1-infra-5l7v9-rd6lt            vsphere://421c4fd6-ae17-0db7-5fa8-399dd21d0afe   10.244.0.36

 

TKGS クラスタは、tkc-01 という名前で作成しました。

 

tkc-01 クラスタの Control Plane の IP アドレスは、LoadBalancer Service として設定されています。

$ kubectl get service
NAME                           TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)          AGE
tkc-01-control-plane-service   LoadBalancer   10.96.1.85   192.168.131.35   6443:31110/TCP   140m

 

TKGS クラスタの Control Plane IP アドレスの様子

ここからは、「Part-14: TKGS クラスタでのアプリ展開」と同様に TKGS クラスタに接続して様子を確認します。

まず、kubectl で TKGS クラスタに接続します。

kubectl vsphere login \
--server=192.168.131.34 \
-u administrator@vsphere.local \
--tanzu-kubernetes-cluster-namespace=demo-ns-03 \
--tanzu-kubernetes-cluster-name=tkc-01 \
--insecure-skip-tls-verify

 

TKGS クラスタのコンテキストに切り替えます。

$ kubectl config use-context tkc-01
Switched to context "tkc-01".

 

TKGS クラスタのノードです。

$ kubectl get nodes
NAME                                        STATUS   ROLES           AGE   VERSION
tkc-01-4cp9t-r2bbx                          Ready    control-plane   87m   v1.26.5+vmware.2-fips.1
tkc-01-node-pool-1-dcnsb-67fdc5d4b8-qh27w   Ready    <none>          12m   v1.26.5+vmware.2-fips.1

 

TKGS クラスタには、デフォルトでは NSX LAB と連携する Operator(AKO)がインストールされていないようです。

$ kubectl get pod -A
NAMESPACE                      NAME                                                        READY   STATUS    RESTARTS       AGE
kube-system                    antrea-agent-pp29g                                          2/2     Running   0              13m
kube-system                    antrea-agent-r47hs                                          2/2     Running   4 (58m ago)    73m
kube-system                    antrea-controller-67c556675c-hbksh                          1/1     Running   12 (16m ago)   73m
kube-system                    coredns-794978f977-6pbxn                                    1/1     Running   3 (40m ago)    87m
kube-system                    coredns-794978f977-pzmck                                    1/1     Running   0              13m
kube-system                    docker-registry-tkc-01-4cp9t-r2bbx                          1/1     Running   0              88m
kube-system                    docker-registry-tkc-01-node-pool-1-dcnsb-67fdc5d4b8-qh27w   1/1     Running   0              12m
kube-system                    etcd-tkc-01-4cp9t-r2bbx                                     1/1     Running   0              88m
kube-system                    kube-apiserver-tkc-01-4cp9t-r2bbx                           1/1     Running   9 (22m ago)    88m
kube-system                    kube-controller-manager-tkc-01-4cp9t-r2bbx                  1/1     Running   11 (11m ago)   88m
kube-system                    kube-proxy-c2dpk                                            1/1     Running   0              88m
kube-system                    kube-proxy-r7fs4                                            1/1     Running   0              13m
kube-system                    kube-scheduler-tkc-01-4cp9t-r2bbx                           1/1     Running   11 (11m ago)   88m
kube-system                    metrics-server-f89d47888-tr6x4                              1/1     Running   0              73m
kube-system                    snapshot-controller-688569584f-n62qx                        1/1     Running   8 (27m ago)    79m
secretgen-controller           secretgen-controller-5bf77c8b8-2clnr                        1/1     Running   0              73m
tkg-system                     kapp-controller-cb844bcd9-5fpj7                             2/2     Running   0              82m
tkg-system                     tanzu-capabilities-controller-manager-745dd58fc5-p4rhn      1/1     Running   0              73m
vmware-system-auth             guest-cluster-auth-svc-4fcgn                                1/1     Running   0              52m
vmware-system-cloud-provider   guest-cluster-cloud-provider-89c4c47ff-mg528                1/1     Running   13 (12m ago)   79m
vmware-system-csi              vsphere-csi-controller-5d9c449655-mlw6w                     7/7     Running   11 (11m ago)   79m
vmware-system-csi              vsphere-csi-node-48sdb                                      3/3     Running   15 (17m ago)   79m
vmware-system-csi              vsphere-csi-node-h59r9                                      3/3     Running   0              13m

 

AKO は、スーパーバイザー側にインストールされています。コンテキストを vSphere 名前空間の demo-ns-03 にすると、AKO の Pod が起動されています。

$ kubectl --context demo-ns-03 -n vmware-system-ako get pod
NAME                                                        READY   STATUS    RESTARTS         AGE
vmware-system-ako-ako-controller-manager-65d78d698d-x8km5   2/2     Running   43 (4m43s ago)   10h

 

この LB に対応する仮想サービスが、NSX ALB で作成されています。

 

ダッシュボードの「表示 VS ツリー」などで確認すると、プールのメンバーとして TKGS クラスタの Control Plane ノードの IP アドレス(10.244.0.34)が登録されています。

 

10.244.0.34 は、Control Plane ノードの仮想マシンに設定されている IP アドレスです。

 

TKGS クラスタでの LoadBalancer Service の作成

以前の「Part-14: TKGS クラスタでのアプリ展開」で使用した YAML で、Pod と LoadBalancer Service を作成してみます。

nginx.yml

gist.github.com

 

demo Namespace を作成して、YAML を適用します。

$ kubectl create ns demo
namespace/demo created
$ kubectl label --overwrite ns demo pod-security.kubernetes.io/enforce=privileged
namespace/demo labeled
$ kubectl apply -f nginx.yml -n demo
service/srvclb-ngnx created
deployment.apps/loadbalancer created

 

少し待つと、LoadBalancer Service に EXTERNAL-IP が設定されます。

$ kubectl get all -n demo
NAME                               READY   STATUS    RESTARTS   AGE
pod/loadbalancer-74994645d-n6t2x   1/1     Running   0          68s
pod/loadbalancer-74994645d-pgvh5   1/1     Running   0          68s

NAME                  TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
service/srvclb-ngnx   LoadBalancer   172.17.4.22   192.168.131.36   80:32177/TCP   68s

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/loadbalancer   2/2     2            2           68s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/loadbalancer-74994645d   2         2         2       68s

 

LoadBalancer Service を作成すると、Control Plane の IP と同じ IP レンジから EXTERNAL-IP(192.168.131.36)が払い出されています。

$ kubectl --context tkc-01 -n demo  get service
NAME          TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
srvclb-ngnx   LoadBalancer   172.17.4.22   192.168.131.36   80:32177/TCP   76s

 

LoadBalancer Service は、スーパーバイザー側(demo-ns-03 コンテキスト)にも作成されます。

$ kubectl --context demo-ns-03 get service
NAME                           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)          AGE
tkc-01-12853deca2d78d3db9481   LoadBalancer   10.96.1.115   192.168.131.36   80:31477/TCP     5m58s
tkc-01-control-plane-service   LoadBalancer   10.96.1.85    192.168.131.35   6443:31110/TCP   6h6m

 

NSX ALB の Web UI でも、仮想サービスが作成されています。

 

ちなみに、TKGS クラスタで LoadBalancer Service を作成した場合も、NSX 側にサーバー ロード バランサは作成されません。

 

つづく。