vSphere 8.0 U2 で、vSphere with Tanzu の自宅ラボ環境を構築していきます。今回は、NSX と NSX ALB を使用しているスーパーバイザーで Tanzu Kubernetes Gird Service(TKGS)のクラスタを作成します。
今回の内容です。
- ラボ構成のイメージ
- Tanzu Kubernetes Gird Service(TKGS)クラスタの作成
- TKG クラスタの確認
- TKGS クラスタの Control Plane IP アドレスの様子
- TKGS クラスタでの LoadBalancer Service の作成
ラボ構成のイメージ
今回は 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
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
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 側にサーバー ロード バランサは作成されません。
つづく。