vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu ラボ環境構築。Part-14: Tanzu Kubernetes Cluster 作成編

前回は、vSphere with Tanzu のラボ環境で、Tanzu Kubernetes クラスタ作成の準備作業をしました。今回は Tanzu Kubernetes クラスタを作成してみます。

 

前回はこちら。

 

一連の投稿のまとめはこちら。

 

Tanzu Kubernetes Grid(TKG)サービスで利用されている Cluster API では、Management Cluster と Workload Cluster という 2つの役割の Kubernetes クラスタが登場します。今回作成する「Tanzu Kubernetes クラスタ」は、このうちの Workload Cluster にあたります。

今回の内容です。

 

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

まず kubectl で、スーパーバイザー クラスタに接続します。

なお、vSphere 専用の kubectl の準備については、下記のようにしています。

 

kubectl では、下記のようログインにしてます。

  • この環境ではスーパーバイザー クラスタの制御プレーン(Control Plane)アドレスとして、192.168.70.33 を指定します。
  • 証明書エラー回避のため、--insecure-skip-tls-verify を指定します。
  • このあとの対話入力で、administrator@vsphere.local とパスワードを入力します。

 

コマンドラインは、次のようになります。

$ kubectl vsphere login --insecure-skip-tls-verify --server=192.168.70.33

 

環境の確認

前回の準備をふまえて、あらためて環境確認をしておきます。

今回は、名前空間「lab-ns-02」に Tanzu Kuberntes Cluster を作成するので、同名の Context に切りかえておきます。

$ kubectl config use-context lab-ns-02
Switched to context "lab-ns-02".

 

作成されている StorageClass です。あとで Tanzu Kuberntes クラスタの設定値として YAML で指定するので、「vm-storage-policy-wcp」という名前をひかえておきます。

$ kubectl get storageclasses
NAME                    PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
vm-storage-policy-wcp   csi.vsphere.vmware.com   Delete          Immediate           false                  7h

 

名前空間へのコンテンツ ライブラリ追加により、VirtualMachineImage の情報取得ができるようになっています。イメージの名前(NAME 列)の文字列から、このあとの YAML では Kubernetes バージョン「v1.16.8」を指定します。

$ kubectl get virtualmachineimages
NAME                                                        VERSION                          OSTYPE
ob-15957779-photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd   v1.16.8+vmware.1-tkg.3.60d2ffd   vmwarePhoton64Guest

 

Tanzu Kuberntes Cluster の YAML 作成

Tanzu Kuberntes クラスタの設定値を記載したマニフェストを、YAML 形式のファイルとして作成します。

gist.github.com

 

YMAL でのパラメータの補足

 

Kubernetes のバージョン

Kubernetes のバージョンは、spec.distribution.version で指定しています。これは、コンテンツ ライブラリに登録されている OVF テンプレート(にもどづく VirtualMachineImage の名前)の文字列から指定します。今回は省略して「v1.16.8」と指定しています。

 

StorageClass の指定

各所で指定している「vm-storage-policy-wcp」は、名前空間へのストレージ ポリシー追加で自動的に作成・利用可能になった、仮想マシン ストレージ ポリシーと同名の StorageClass です。

 

アドレス範囲の指定

CIDR によるアドレス範囲は、Supervisor Cluster とは別のものを指定します。ちなみに Pod Network のデフォルトの CNI は、vSphere 7.0 では Calico、vSphere 7.0 U1 では Antrea が使用されます。

  • spec.settings.network.services.cidrBlocks
  • spec.settings.network.pods.cidrBlocks

 

ノード数の指定

制御プレーン(Control Plane)ノード、ワーカー ノードは、それぞれ 3ノードです。

  • spec.topology.controlPlane.count
  • spec.topology.worker.count

 

ノードのスペック指定

制御プレーン ノード、ワーカー ノードの VM スペックは、下記で指定しています。ここでは、「best-effort-xsmall」を指定しています。

  • spec.topology.controlPlane.class
  • spec.topology.worker.class

 

ここで指定している class(VirtualMachineClass)には、下記が用意されています。

$ kubectl get virtualmachineclasses
NAME                 AGE
best-effort-large    12d
best-effort-medium   12d
best-effort-small    12d
best-effort-xlarge   12d
best-effort-xsmall   12d
guaranteed-large     12d
guaranteed-medium    12d
guaranteed-small     12d
guaranteed-xlarge    12d
guaranteed-xsmall    12d

 

ちなみに、今回指定した VirtualMachineClass「best-effort-xsmall」のスペックは、vCPU は 2個(cpus: 2)、メモリ容量は 2GiB(memory: 2Gi)です。

$ kubectl get virtualmachineclasses best-effort-xsmall -o yaml
apiVersion: vmoperator.vmware.com/v1alpha1
kind: VirtualMachineClass
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"vmoperator.vmware.com/v1alpha1","kind":"VirtualMachineClass","metadata":{"annotations":{},"name":"best-effort-xsmall"},"spec":{"hardware":{"cpus":2,"memory":"2Gi"}}}
  creationTimestamp: "2020-05-24T15:20:10Z"
  generation: 1
  name: best-effort-xsmall
  resourceVersion: "2182"
  selfLink: /apis/vmoperator.vmware.com/v1alpha1/virtualmachineclasses/best-effort-xsmall
  uid: b5a801bc-28d4-4526-966b-7e30dbc9b570
spec:
  hardware:
    cpus: 2
    memory: 2Gi

 

Tanzu Kubernetes クラスタの作成

それでは、Tanzu Kubernetes クラスタを作成します。用意した YAML を指定して、kubectl apply を実行します。

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

 

しばらく待つと、lab-ns-02 名前空間に、Kubernetes のノードになる VM がデプロイ、起動されます。これらの VM(のゲスト OS)で、Tanzu Kubernetes クラスタが構成されています。

f:id:gowatana:20201116083754p:plain

 

Kubernetes のバージョンは、v1.16.8 になっています。これは、スーパーバイザー クラスタの Kubernetes バージョンと一致するわけではありません。

kubectl でログイン先として指定する、制御プレーンのアドレスもわかります。これは、スーパーバイザー クラスタへの接続と同じアドレスです。

f:id:gowatana:20201116083841p:plain

 

YAML で指定したとおり、Kubernetes ノードが VM で作成されています。

制御プレーン ノード(VM 名は、<クラスタ名>-control-plane-~) が 3 VM、ワーカー ノード(VM 名は、<クラスタ名>-worker-~)が 3 VM 作成されています。どちらも、仮想マシン クラスは、best-effort-xsmall になっています。

f:id:gowatana:20201116083902p:plain

 

続く