前回は、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 形式のファイルとして作成します。
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 クラスタが構成されています。
Kubernetes のバージョンは、v1.16.8 になっています。これは、スーパーバイザー クラスタの Kubernetes バージョンと一致するわけではありません。
kubectl でログイン先として指定する、制御プレーンのアドレスもわかります。これは、スーパーバイザー クラスタへの接続と同じアドレスです。
YAML で指定したとおり、Kubernetes ノードが VM で作成されています。
制御プレーン ノード(VM 名は、<クラスタ名>-control-plane-~) が 3 VM、ワーカー ノード(VM 名は、<クラスタ名>-worker-~)が 3 VM 作成されています。どちらも、仮想マシン クラスは、best-effort-xsmall になっています。
続く