前回は、vSphere with Kubernetes のラボ環境で、Tanzu Kubernetes Cluster 作成の準備作業をしました。
今回は Tanzu Kubernetes Cluster を作成してみます。
前回はこちら。
vSphere with Kubernetes ラボ環境構築。Part-12: Supervisor Namespace での Tanzu Kubernetes Cluster 準備編
Tanzu Kubernetes Grid(TKG)サービスで利用されている Cluster API では、
Management Cluster と Workload Cluster という役割の Kubernetes クラスタが登場しますが、
今回作成する Tanzu Kubernetes Cluster は、Workload Cluster にあたります。
Supervisor Cluster への接続。
kubectl で、Supervisor Cluster に接続します。
vSphere 専用の kubectl の準備については、下記の投稿のようにしています。
vSphere with Kubernetes ラボ環境構築。Part-11: kubectl で vSphere Pod 起動編
kubectl では、下記のようログインにしてます。
- この環境では Supervisor Cluster の Control Plane アドレスとして、192.168.70.33 を指定します。
- このあとの対話入力で、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".
作成されている Storage Class です。
あとで Tanzu Kuberntes Cluster の設定値として 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 Cluster の設定値を記載したマニュフェストを、YAML 形式のファイルとして作成します。
tkg-cluster-01.yml
---
kind: TanzuKubernetesCluster
apiVersion: run.tanzu.vmware.com/v1alpha1
metadata:
name: tkg-cluster-01
spec:
distribution:
version: v1.16.8
topology:
controlPlane:
count: 3
class: best-effort-xsmall
storageClass: vm-storage-policy-wcp
workers:
count: 3
class: best-effort-xsmall
storageClass: vm-storage-policy-wcp
settings:
network:
cni:
name: calico
services:
cidrBlocks: ["198.51.100.0/12"] # Cannot overlap with Supervisor Cluster
pods:
cidrBlocks: ["192.0.2.0/16"] # Cannot overlap with Supervisor Cluster
storage:
classes: ["vm-storage-policy-wcp"] # Named PVC storage classes
defaultClass: vm-storage-policy-wcp # Default PVC storage class
YMAL では、下記のようにパラメータを指定しています。
Kubernetes のバージョンは、コンテンツ ライブラリに登録されている OVF テンプレート
(にもどづく VirtualMachineImage の名前)の文字列を指定します。
ここでは省略して「v1.16.8」と指定しています。
- spec.distribution.version
各所で指定している「vm-storage-policy-wcp」は、
名前空間へのストレージ ポリシー追加で自動的に作成・利用可能になった、
仮想マシン ストレージ ポリシーと同名の StorageClass です。
CIDR によるアドレス範囲は、Supervisor Cluster とは別のものを指定します。
ちなみに、Pod Network の CNI では、Calico が使用されます。
- spec.settings.network.services.cidrBlocks
- spec.settings.network.pods.cidrBlocks
Control Plane ノード、Worker ノードは、それぞれ 3ノードです。
- spec.topology.controlPlane.count
- spec.topology.worker.count
Control Plane ノード、Worker ノードの 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 Cluster の作成。
それでは、Tanzu Kubernetes Cluster を作成します。
用意した 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 Cluster が構成されています。
Kubernetes のバージョンは、v1.16.8 になっています。
これは、Supervisor Cluster の Kubernetes バージョンと一致するわけではありません。
kubectl でログイン先として指定する、制御プレーンのアドレスもわかります。
(これは、Supervisor Cluster への接続と同じアドレスです)
YAML で指定したとおり、Kubernetes Node が VM で作成されています。
Control Plane Node(VM 名は、<クラスタ名>-control-plane-~) が 3 VM、
Worker Node(VM 名は、<クラスタ名>-worker-~)が 3 VM 作成されています。
どちらも、仮想マシン クラスは、best-effort-xsmall になっています。
続く?