vSphere 7.0 U2 で、vSphere with Tanzu + NSX Advanced Load Balancer のラボ環境を構築していきます。今回は、スーパーバイザー名前空間に Tanzu Kubernetes クラスタ(TKC)を作成します。
前回はこちら。
今回の内容です。
- kubectl のダウンロード
- Tanzu Kubernetes クラスタのマニフェストの用意
- スーパーバイザー クラスタへの接続
- Tanzu Kubernetes クラスタの作成
- Tanzu Kubernetes クラスタへの接続
- Tanzu Kubernetes クラスタでの Load Balancer 作成
ドキュメントでは下記のあたりです。
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
スーパーバイザー クラスタへの接続
kubectl でスーパーバイザー クラスタの制御プレーンにログインして、これから TKC を作成するスーパーバイザー名前空間のコンテキストに切り替えます。
ラボでは、次のようなスクリプトを利用しています。
次のようにログインしておきます。
$ 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 バージョンが確認できます。
Tanzu Kubernetes クラスタの作成
さきほどの YAML で、TKC を作成します。
$ kubectl apply -f tanzu-cluster-51.yml tanzukubernetescluster.run.tanzu.vmware.com/tanzu-cluster-51 created
しばらくすると、TKC の制御プレーンとワーカーがデプロイされます。
TKC「tanzu-cluster-51」の状態が「実行中」になり、制御プレーンのアドレスは、NSX-ALB で指定したデータ ネットワークの IP アドレス プールの範囲から採番されます。
NSX-ALB で確認すると、このアドレスは、データ ネットワークに設定した「Static IP Pools」の IP レンジのアドレスから払い出されています。
なお、スクリーンショットでは次の 5つの IP アドレスがレンジから払い出された状態です。
- スーパーバイザー クラスタの制御プレーン(kube-apiserver)
- Service Engine #1 のサーバ接続側の IP アドレス(Server Conn IP)
- Service Engine #2 のサーバ接続側の IP アドレス(Server Conn IP)
- TKC の制御プレーン
- TKC で作成した Load Balancer Service(後続の手順で動作確認として作成した「svc-web」Service)
TKC のノード(制御プレーンとワーカー)の IP アドレスは、ワークロード管理を有効化する際に指定した、ワークロード ネットワーク(network-1)の範囲から払い出されます。
なお、スクリーンショットの例では、実際には何度か TKC を作成した後の状態なので「192.168.25.110」となっています。しかしこのラボのネットワーク構成であれば、はじめて TKC を作成した際には、Supervisor Control Plane VM 3台分のあとの IP アドレスである「192.168.25.104」あたりから採番されるはずです。
Tanzu Kubernetes クラスタへの接続
kubectl で TKC に接続します。ラボでは次のようなスクリプトを利用しています。
次のようにログインします。
$ 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 を作成しています。
ClusterRoleBinding を作成します。
$ kubectl apply -f tkc-crb-privileged.yml clusterrolebinding.rbac.authorization.k8s.io/crb-vmware-system-privileged created
Pod(Deployment で)と、Load Balancer Service を作成してみます。
次のようなマニフェストを用意しました。
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 で払い出されていることがわかります。
以上、NSX-ALB を利用した vSphere with Tanzu ラボの構築でした。