vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu NSX-ALB(Avi)版ラボ環境構築。Part-05 Tanzu Kubernetes クラスタの作成

vSphere 7.0 U2 で、vSphere with Tanzu + NSX Advanced Load Balancer のラボ環境を構築していきます。今回は、スーパーバイザー名前空間に Tanzu Kubernetes クラスタ(TKC)を作成します。

f:id:gowatana:20210404201352p:plain

 

前回はこちら。

 

今回の内容です。

 

ドキュメントでは下記のあたりです。

 

kubectl のダウンロード

スーパーバイザー クラスタ制御プレーンから、kubectl とプラグインをダウンロードします。これは、NSX-T や HAProxy を利用する場合と同じです。

 

Tanzu Kubernetes クラスタのマニフェストの用意

下記のような YAML ファイルを用意しておきます。

  • クラスタ(TKC)の名前: tanzu-cluster-51
  • Kubernetes バージョン: v1.19.7
  • 制御プレーン ノード: 1ノード、スペックは best-effort-xsmall
  • ワーカー ノード: 1ノード、スペックは best-effort-xsmall
  • CNI: Antrea
  • Pod ネットワーク: 10.51.0.0/16
  • サービス ネットワーク: 10.52.0.0/16
  • デフォルト StorageClass: vm-storage-policy-wcp

gist.github.com

 

スーパーバイザー クラスタへの接続

kubectl でスーパーバイザー クラスタの制御プレーンにログインして、これから TKC を作成するスーパーバイザー名前空間のコンテキストに切り替えます。

ラボでは、次のようなスクリプトを利用しています。

gist.github.com

 

次のようにログインしておきます。

$ bash login_wcp-cluster-51.sh

Logged in successfully.

You have access to the following contexts:
   192.168.24.11
   lab-ns-51

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>`
Switched to context "lab-ns-51".

 

スーパーバイザー クラスタのノードが取得できます。

$ kubectl get nodes
NAME                               STATUS   ROLES    AGE    VERSION
422a18cb3f260cd2c9295b6aa7354d41   Ready    master   4d8h   v1.19.1+wcp.2
422a9373373c56306ab4dc5857db4083   Ready    master   4d8h   v1.19.1+wcp.2
422a9ea2a0b02bc1b5fd58a81ea03f77   Ready    master   4d8h   v1.19.1+wcp.2

 

TKC を作成する名前空間のコンテキストが指定された状態です。

$ kubectl config current-context
lab-ns-51

 

TKG のコンテンツ ライブラリを登録されているので、「kubectl get TanzuKubernetesReleases」で、マニフェストで指定できる Kubernetes バージョンが確認できます。

f:id:gowatana:20210404183453p:plain

 

Tanzu Kubernetes クラスタの作成

さきほどの YAML で、TKC を作成します。

$ kubectl apply -f tanzu-cluster-51.yml
tanzukubernetescluster.run.tanzu.vmware.com/tanzu-cluster-51 created

 

しばらくすると、TKC の制御プレーンとワーカーがデプロイされます。

f:id:gowatana:20210404194543p:plain


TKC「tanzu-cluster-51」の状態が「実行中」になり、制御プレーンのアドレスは、NSX-ALB で指定したデータ ネットワークの IP アドレス プールの範囲から採番されます。

f:id:gowatana:20210404194617p:plain

 

NSX-ALB で確認すると、このアドレスは、データ ネットワークに設定した「Static IP Pools」の IP レンジのアドレスから払い出されています。

なお、スクリーンショットでは次の 5つの IP アドレスがレンジから払い出された状態です。

  1. スーパーバイザー クラスタの制御プレーン(kube-apiserver)
  2. Service Engine #1 のサーバ接続側の IP アドレス(Server Conn IP)
  3. Service Engine #2 のサーバ接続側の IP アドレス(Server Conn IP)
  4. TKC の制御プレーン
  5. TKC で作成した Load Balancer Service(後続の手順で動作確認として作成した「svc-web」Service)

f:id:gowatana:20210404230706p:plain

 

TKC のノード(制御プレーンとワーカー)の IP アドレスは、ワークロード管理を有効化する際に指定した、ワークロード ネットワーク(network-1)の範囲から払い出されます。

なお、スクリーンショットの例では、実際には何度か TKC を作成した後の状態なので「192.168.25.110」となっています。しかしこのラボのネットワーク構成であれば、はじめて TKC を作成した際には、Supervisor Control Plane VM 3台分のあとの IP アドレスである「192.168.25.104」あたりから採番されるはずです。

f:id:gowatana:20210404195030p:plain

 

Tanzu Kubernetes クラスタへの接続

kubectl で TKC に接続します。ラボでは次のようなスクリプトを利用しています。

gist.github.com

 

次のようにログインします。

$ bash login_tanzu-cluster-51.sh

Logged in successfully.

You have access to the following contexts:
   192.168.24.11
   lab-ns-51
   tanzu-cluster-51

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>`

 

TKC のコンテキストが選択された状態になります。

$ kubectl config current-context
tanzu-cluster-51
$ kubectl config get-contexts tanzu-cluster-51
CURRENT   NAME               CLUSTER         AUTHINFO                                        NAMESPACE
*         tanzu-cluster-51   192.168.24.14   wcp:192.168.24.14:administrator@vsphere.local

 

Tanzu Kubernetes クラスタでの Load Balancer 作成

TKC では PodSecurityPolicy によるアドミッション コントロールが有効化されています。ラボでは、デモ向けに特権コンテナの Pod(Privileged Pod)を起動できるように、次のような ClusterRoleBinding を作成しています。

gist.github.com

 

ClusterRoleBinding を作成します。

$ kubectl apply -f tkc-crb-privileged.yml
clusterrolebinding.rbac.authorization.k8s.io/crb-vmware-system-privileged created

 

Pod(Deployment で)と、Load Balancer Service を作成してみます。

次のようなマニフェストを用意しました。

gist.github.com

 

Deployment と、Service を作成します。

$ kubectl apply -f web-avi.yml
service/svc-web created
deployment.apps/web created

 

TKC で作成された LoadBalancer Service の EXTERNAL-IP は、NSX-ALB で指定した IP アドレス プールから払い出されています。この例の状態であれば、Web ブラウザから 192.168.24.15 にアクセスすると、テストページが表示されるはずです。

$ kubectl --context tanzu-cluster-51 get service svc-web
NAME      TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
svc-web   LoadBalancer   10.52.6.106   192.168.24.15   80:30772/TCP   69s

 

スーパーバイザー クラスタ側にも、同じ IP アドレスが割り当てられた Service リソースが作成されます。

$ kubectl --context lab-ns-51 get service
NAME                                     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)          AGE
tanzu-cluster-51-4ca2501d7abf9391bac44   LoadBalancer   10.96.0.254   192.168.24.15   80:30753/TCP     91s
tanzu-cluster-51-control-plane-service   LoadBalancer   10.96.0.22    192.168.24.14   6443:30784/TCP   40m

 

「tanzu-cluster-51-4ca2501d7abf9391bac44」という文字列は、NSX-ALB の Virtual Service や VIP の名前でも見つけられます。TKC の Service に払い出された EXTERNAL-IP も、NSX-ALB の VIP で払い出されていることがわかります。

f:id:gowatana:20210404201103p:plain

 

以上、NSX-ALB を利用した vSphere with Tanzu ラボの構築でした。