vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu 8.0 U2(vDS + Avi)ラボ環境構築。Part-04: TKGS クラスタとアプリの展開

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 クラスタの作成は、以前の下記投稿と同様です。

 

YAML ファイルも、以前の投稿と同じものを利用します。

tkc-01_v1beta1.yml

gist.github.com

 

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 を展開してみます。

 

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

gist.github.com

 

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 のラボを構築してみる話でした。