vSphere 8.0 U2 の vSphere with Tanzu 自宅ラボ環境を、vDS + Avi Load Balancer を利用して構築していきます。今回は Tanzu Kubernetes Grid Service(TKGS)のクラスタを作成して、Nginx の Pod を起動してみます。
前回はこちら。
今回の内容です。
1. vSphere 名前空間の作成
スーパーバイザーに TKGS クラスタを作成するには、「vSphere 名前空間」を作成します。これは、Kubernetes の名前空間(Namespace)にあたります。
手順は、以前に投稿した NSX を使用したスーパーバイザーのものと同様です。
vDS + Avi で構成されたスーパーバイザーの vSphere 名前空間では、NSX スーパーバイザーとは異なり、スーパーバイザーのネットワークを選択します。
- スーパーバイザー: avi-sv
- 名前: demo-ns-01
- ネットワーク: dvpg-wl-01
そして、作成された vSphere 名前空間での設定については、NSX スーパーバイザーと同様に下記を実施します。
- 権限の追加: Administrator@vsphere.local に編集可能(Edit)権限を追加
- ストレージの追加: vwt-nfs-policy ストレージポリシーを追加
- 仮想マシン クラスの追加: TKGS の展開で使用予定の仮想マシン クラスを追加
- best-effort-small(2 vCPU、4 GB RAM)
- best-effort-xsmall(2 vCPU、2 GB RAM)
2. スーパーバイザーへの接続
スーパーバイザーに接続する、vSphere 専用の kubectl と Plug-in を用意して、スーパーバイザーに接続します。
この手順も NSX スーパーバイザーと同様なので、下記投稿の手順で進めます。
2-1. kubectl と vSphere Plug-in のインストール
Web ブラウザから、HTTPS で制御プレーン ノード の IP アドレスにアクセスすと、kubectl や vSphere Plug-in などをダウンロードできるサイトが開きます。
しかし、今回のファイルのダウンロードは curl で実施します。スーパーバイザー制御プレーンの VIP アドレスは 192.168.131.11 なので、kubectl のダウンロードは下記のようになります。
$ curl -k -L -O https://192.168.131.11/wcp/plugin/linux-amd64/vsphere-plugin.zip $ unzip vsphere-plugin.zip $ export PATH=$(pwd)/bin:$PATH
vCenter Server 8.0 U2c の kubectl のバージョンです。
$ kubectl version --client --short Flag --short has been deprecated, and will be removed in the future. The --short output will become the default. Client Version: v1.27.5+vmware.wcp.1 Kustomize Version: v5.0.1
2-2. スーパーバイザーへの接続
スーパーバイザーにログインします。
$ export KUBECTL_VSPHERE_PASSWORD='VMware1!' $ kubectl vsphere login --server=192.168.131.11 -u administrator@vsphere.local --insecure-skip-tls-verify Logged in successfully. You have access to the following contexts: 192.168.131.11 demo-ns-01 If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use `kubectl config use-context <workload name>`
コンテキストを、vSphere 名前空間に切り替えます。
$ kubectl config use-context demo-ns-01 Switched to context "demo-ns-01".
スーパーバイザーの Kubernetes ノードを確認すると、ESXi ホストもノードとして組み込まれています。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION 421f1864e84593aa0761f0812c4c5188 Ready control-plane,master 7h28m v1.27.5+vmware.wcp.1 421f1e77ecc0c9760d90dc080018f45c Ready control-plane,master 7h14m v1.27.5+vmware.wcp.1 421f52c1a0d5e46e1df3dab3b3248aa8 Ready control-plane,master 7h14m v1.27.5+vmware.wcp.1 lab-esxi-131.go-lab.jp Ready agent 7h10m v1.27.2-sph-4b023f8 lab-esxi-132.go-lab.jp Ready agent 7h10m v1.27.2-sph-4b023f8 lab-esxi-133.go-lab.jp Ready agent 7h11m v1.27.2-sph-4b023f8
3. TKGS クラスタの作成
TKGS クラスタの作成は、以前の下記投稿と同様です。
- vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-13: TKGS クラスタの作成(NSX)
- vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-24: TKGS クラスタの作成(NSX + NSX ALB スーパーバイザー)
YAML ファイルも、以前の投稿と同じものを利用します。
tkc-01_v1beta1.yml
TKGS クラスタを作成します。
$ kubectl apply -f tkc-01_v1beta1.yml cluster.cluster.x-k8s.io/tkc-01 created
しばらく待つと、TKGS クラスタが作成されます。
Cluster リソースです。
$ kubectl get cluster NAME PHASE AGE VERSION tkc-01 Provisioned 55m v1.26.5+vmware.2-fips.1
MachinedeDloyments リソースです。
$ kubectl get machinedeployments NAME CLUSTER REPLICAS READY UPDATED UNAVAILABLE PHASE AGE VERSION tkc-01-node-pool-1-djw87 tkc-01 1 1 1 0 Running 55m v1.26.5+vmware.2-fips.1
Machine リソースです。
$ kubectl get machine NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION tkc-01-htmnf-48xvs tkc-01 tkc-01-htmnf-48xvs vsphere://421fb11a-d408-9d17-743a-ed8016988994 Running 55m v1.26.5+vmware.2-fips.1 tkc-01-node-pool-1-djw87-6cd8f7b57fx6h5qf-zmstn tkc-01 tkc-01-node-pool-1-djw87-6cd8f7b57fx6h5qf-zmstn vsphere://421f22c6-059d-ac33-a8bd-911faad6834b Running 55m v1.26.5+vmware.2-fips.1
vsphereMachine リソースです。
$ kubectl get vspheremachine NAME ZONE PROVIDERID IPADDR tkc-01-control-plane-skn8w-rncmb z1 vsphere://421fb11a-d408-9d17-743a-ed8016988994 192.168.134.104 tkc-01-node-pool-1-infra-vmw6w-rqkrs vsphere://421f22c6-059d-ac33-a8bd-911faad6834b 192.168.134.105
TKGS クラスタ制御プレーンの Service です。
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tkc-01-control-plane-service LoadBalancer 10.96.1.230 192.168.131.12 6443:30658/TCP 75m
4. アプリの展開
以前の投稿の、下記と同様に LoadBalancer Service と Pod を展開してみます。
- vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-14: TKGS クラスタでのアプリ展開(NSX スーパーバイザ)
- vSphere with Tanzu 8.0 U2 ラボ環境構築。Part-24: TKGS クラスタの作成(NSX + NSX ALB スーパーバイザー)
4-1. TKGS クラスタへの接続
kubectl で、TKGS クラスタに接続します。接続先の IP アドレスは、スーパーバイザー制御プレーン(TKGS クラスタの制御プレーンではなく)です。
kubectl vsphere login \ --server=192.168.131.11 \ -u administrator@vsphere.local \ --tanzu-kubernetes-cluster-namespace=demo-ns-01 \ --tanzu-kubernetes-cluster-name=tkc-01 \ --insecure-skip-tls-verify
ログインしてみると、TKGS 名(tkc-01)のコンテキストが表示されません。
$ kubectl vsphere login \ > --server=192.168.131.11 \ > -u administrator@vsphere.local \ > --tanzu-kubernetes-cluster-namespace=demo-ns-01 \ > --tanzu-kubernetes-cluster-name=tkc-01 \ > --insecure-skip-tls-verify Logged in successfully. You have access to the following contexts: 192.168.131.11 demo-ns-01 If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use `kubectl config use-context <workload name>`
しかし、kubectl config get-contexts で確認すると、コンテキストが作成されて CURRENT になっているので、そのまま進みます。
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE 192.168.131.11 192.168.131.11 wcp:192.168.131.11:administrator@vsphere.local demo-ns-01 192.168.131.11 wcp:192.168.131.11:administrator@vsphere.local demo-ns-01 * tkc-01 192.168.131.12 wcp:192.168.131.12:administrator@vsphere.local
TKGS クラスタのノードが確認できます。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION tkc-01-htmnf-48xvs Ready control-plane 72m v1.26.5+vmware.2-fips.1 tkc-01-node-pool-1-djw87-6cd8f7b57fx6h5qf-zmstn Ready <none> 64m v1.26.5+vmware.2-fips.1
4-2. Deployment と LoadBalancer Service の作成
ここでも、以前の投稿と同様の YAML ファイルを使用します。
nginx.yml
demo Namespace を作成します。
$ kubectl create ns demo namespace/demo created $ kubectl label --overwrite ns demo pod-security.kubernetes.io/enforce=privileged namespace/demo labeled
YAML を適用します。
$ kubectl apply -f nginx.yml -n demo service/srvclb-ngnx created deployment.apps/loadbalancer created
少し待つと・・・
$ kubectl get all -n demo NAME READY STATUS RESTARTS AGE pod/loadbalancer-74994645d-98k24 1/1 Running 0 35s pod/loadbalancer-74994645d-pndcr 1/1 Running 0 36s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/srvclb-ngnx LoadBalancer 172.17.107.154 192.168.131.13 80:32096/TCP 38s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/loadbalancer 2/2 2 2 38s NAME DESIRED CURRENT READY AGE replicaset.apps/loadbalancer-74994645d 2 2 2 37s
スーパーバイザー側(demo-ns-01)にも、TKGS クラスタと同じ EXTERNAL-IP の Service が作成されています。
$ kubectl --context demo-ns-01 get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tkc-01-12853deca2d78d3db9481 LoadBalancer 10.96.0.227 192.168.131.13 80:30403/TCP 2m tkc-01-control-plane-service LoadBalancer 10.96.1.230 192.168.131.12 6443:30658/TCP 101m $ kubectl --context tkc-01 -n demo get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE srvclb-ngnx LoadBalancer 172.17.107.154 192.168.131.13 80:32096/TCP 2m8s
以上、vDS + Avi Load Balancer を使用した vSphere with Tanzu 8.0 U2 のラボを構築してみる話でした。