VMwareからTanzu Kubernetes Grid (TKG)がリリースされたので、vSphere 6.7u3環境で使ってみました。
Tanzu Kubernetes Gridとは
Cluster APIを使ってvSphereとAWSの環境にKubernetesクラスター(Tanzu Kubernetes Cluster)を作ることができます。内部的には、「Cluster APIをつかってvSphere環境にKubernetesクラスターを作成する」で紹介した内容がtkg cliで簡素化されており、kindを利用してvSphere環境にManagement Clusterを構成し、Cluster APIをホストします。バージョン1.0では以下の環境にTanzu Kubernetes Gridをデプロイすることが可能です。vSphere 7の登場でvSphere with Kubernetesが注目を集めていますが、vSphere 6.7u3の環境にもTKGを構成することが可能です。
- vSphere 6.7u3
- vSphere 7.0
- Amazon EC2
vSphere 7.0ではvSphere with Kubernetesとして利用することができるSupervisor Clusterで同等の機能を実現できます。Supervisor Clusterを有効な場合、TKGのManagement Clusterを有効化する必要はありません。Supervisor Clusterを無効な場合、TKGのMaanagement Clsuterを利用することができますが、Supervisor Clusterの利用が推奨されています。
Bootstrap環境
Bootstrap環境はラップトップ、サーバー、VMなどTanzu Kubernetes Grid CLIをダウンロードして実行する環境です。Docker上で起動するkind(Kubernetes in Docker)によりBootstrap Clusterを構成します。このBootstrap Clusterを利用して、Management Clusterの構成を行います。Management Clusterが正常に構成されると、Bootstrap Clusterは削除されます。
Management Cluster
Management ClusterはTanzu Kubernetes Gridインスタンスの管理と運用を行うためのKubernetes Clusterです。Cluster APIをホストしており、Tanzu Kubernetes Grid CLIによりTanzu Kubernetes Clusterの追加・削除・管理を可能にします。Management Clusterにはユーザーワークロードを実行するための環境として利用しないでください。
Tanzu Kubernetes Clusters
Tanzu Kubernetes ClusetrはManagement ClusterによってデプロイされるKubernetres Clusterです。Tanzu Kubernetes Grid CLI(tkg cli)によって、異なるサイズ、バージョンのTanzu Kubernetes Clusterを複数作成することが可能です。作成されたTanzu Kubernetes ClusterはManagement Clusterによってライフサイクル管理が可能です。クラスター内のPod間通信にはCalicoが利用されています。
vSphere環境でTanzu Kubernetes Gridを使ってみる
Bootstrap環境でtkg cli実行することでvSphere上にManagement Clusterを構成することができます。tkg cliにはUIモードがあり、UIを利用してManagement Clsuterを構成することができますが、今回はUIを利用せずに設定ファイルを利用してManagement Clusterを構成します。
vSphereの要件
- vSpher上でDRS有効なこと
- vSphere上にTKGインスタンスデプロイ先のリソースプール
- vSphere上にTKGインスタンスデプロイ先のフォルダ
- vSphere上にTKGインスタンスデプロイ先のデータストア
- TKGインスタンス接続先のネットワークでDHCPが利用できること
- TKGインスタンス接続先のネットワークがインターネットにアクセス可能なこと(アクセスできない場合はローカルレジストリを準備する必要がある)
- TKGインスタンス接続先のネットワークがvCenter Serverにアクセス可能なこと
- TKGインスタンス全てのホストからNTPサービスにアクセス可能なこと
- bootstrap環境(Linux or macOS)にkubectl, Dockerがインストールされていること
vSphere環境に対するOVAのインポート
vSphre向けのTKGは以下のバイナリで構成されます。tkg cliは現状Windowsに対応していません。
- Tanzu Kubernetes Grid CLI (tkg cli) *linux or macos
- Photon v3 Kubernetes v1.17.3 OVA
- Photon v3 capv haproxy v0.6.3 OVA
Kubernetes/haproxy OVAをvSphere環境にデプロイし、テンプレートに変換します。
Bootstrapの準備
tkg cliをBootstrap環境にダウンロードしてtkg get management-cluster
コマンドを実行します。
# tkg get management-cluster
+-------------------------+--------------+
| MANAGEMENT CLUSTER NAME | CONTEXT NAME |
+-------------------------+--------------+
+-------------------------+--------------+
初回実行時に、~/.tkg/config.yaml
が生成されます。
KUBERNETES_VERSION: v1.17.3+vmware.2
overridesFolder: /root/.tkg/overrides
providers:
- name: cluster-api
url: /root/.tkg/providers/cluster-api/v0.3.3/core-components.yaml
type: CoreProvider
- name: aws
url: /root/.tkg/providers/infrastructure-aws/v0.5.2/infrastructure-components.yaml
type: InfrastructureProvider
- name: vsphere
url: /root/.tkg/providers/infrastructure-vsphere/v0.6.3/infrastructure-components.yaml
type: InfrastructureProvider
- name: tkg-service-vsphere
url: /root/.tkg/providers/infrastructure-tkg-service-vsphere/v1.0.0/unused.yaml
type: InfrastructureProvider
- name: kubeadm
url: /root/.tkg/providers/bootstrap-kubeadm/v0.3.3/bootstrap-components.yaml
type: BootstrapProvider
- name: kubeadm
url: /root/.tkg/providers/control-plane-kubeadm/v0.3.3/control-plane-components.yaml
type: ControlPlaneProvider
images:
cert-manager:
repository: registry.tkg.vmware.run/cert-manager
tag: v0.11.0_vmware.1
以下のパラメータを.tkg/config.yaml
に追記します。パラメータの説明はマニュアルに記載がありますが、vSphere上のオブジェクト(フォルダ、リソースプール、テンプレート名など)はインベントリパスも含めて指定する必要があります。
VSPHERE_SERVER: 10.44.59.100
VSPHERE_USERNAME: administrator
VSPHERE_PASSWORD: VMware1!
VSPHERE_DATACENTER: /DC
VSPHERE_DATASTORE: /DC/datastore/NFSDS
VSPHERE_NETWORK: tkg
VSPHERE_RESOURCE_POOL: /DC/host/CL/Resources/TKG
VSPHERE_FOLDER: /DC/vm/capi
VSPHERE_TEMPLATE: /DC/vm/template/photon-3-kube-v1.17.3+vmware.2
VSPHERE_HAPROXY_TEMPLATE: /DC/vm/template/capv-haproxy
VSPHERE_DISK_GIB: "20"
VSPHERE_NUM_CPUS: "1"
VSPHERE_MEM_MIB: "2048"
VSPHERE_SSH_AUTHORIZED_KEY: "ssh-rsa XXXXXXXXXXXX...."
SERVICE_CIDR: "100.64.0.0/13"
CLUSTER_CIDR: "100.96.0.0/11"
Management Clusterの作成
tkg init
でBootstrap ClusterとManagement Clusterの構成を開始します。
# tkg init --infrastructure=vsphere --name=mgmt
Logs of the command execution can also be found at: /tmp/tkg-20200412T111903196848259.log
Validating the pre-requisites...
Setting up management cluster...
Validating configuration...
Using infrastructure provider vsphere:v0.6.3
Generating cluster configuration...
Setting up bootstrapper...
Installing providers on bootstrapper...
Fetching providers
Installing cert-manager
Waiting for cert-manager to be available...
Installing Provider="cluster-api" Version="v0.3.3" TargetNamespace="capi-system"
Installing Provider="bootstrap-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-bootstrap-system"
Installing Provider="control-plane-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-control-plane-system"
Installing Provider="infrastructure-vsphere" Version="v0.6.3" TargetNamespace="capv-system"
Start creating management cluster...
Installing providers on management cluster...
Fetching providers
Installing cert-manager
Waiting for cert-manager to be available...
Installing Provider="cluster-api" Version="v0.3.3" TargetNamespace="capi-system"
Installing Provider="bootstrap-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-bootstrap-system"
Installing Provider="control-plane-kubeadm" Version="v0.3.3" TargetNamespace="capi-kubeadm-control-plane-system"
Installing Provider="infrastructure-vsphere" Version="v0.6.3" TargetNamespace="capv-system"
Waiting for the management cluster to get ready for move...
Moving all Cluster API objects from bootstrap cluster to management cluster...
Performing move...
Discovering Cluster API objects
Moving Cluster API objects Clusters=1
Creating objects in the target cluster
Deleting objects from the source cluster
Context set for management cluster mgmt as 'mgmt-admin@mgmt'.
Management cluster created!
You can now create your first workload cluster by running the following:
tkg create cluster [name] --kubernetes-version=[version] --plan=[plan]
Bootstrap Clusterの状態
最初にtkgコマンドを実行したホストでkindが起動し、このkindをBootstrap ClusterとしてvSphere環境にManagement Clusterを構成します。Management Clusterの構成に成功するとkindのBootstrap Clusterは自動的に削除されます。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
tkg-kind-bq97l69upeqblofkooag-control-plane Ready master 112s v1.17.3+vmware.1
Management Clusterの状態
Management Clusterは~/.tkg/config.yaml
で指定したフォルダ・リソースプールに作成されます。haproxyがロードバランサー x 1、Master x 1、Node x 1の構成で作成されます。
Management Clusterに接続するためのContextは、~/.kube/config
に自動的に追加されます。
# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* mgmt-admin@mgmt mgmt mgmt-admin
Management ClusterはMaster x 1とNode x 1で構成されています。
# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mgmt-control-plane-fx5ld Ready master 12m v1.17.3+vmware.2 192.168.20.139 192.168.20.139 VMware Photon OS/Linux 4.19.112-1.ph3 containerd://1.3.3
mgmt-md-0-747fd6bcc-2tfff Ready <none> 10m v1.17.3+vmware.2 192.168.20.35 192.168.20.35 VMware Photon OS/Linux 4.19.112-1.ph3 containerd://1.3.3
tkgコマンドでManagement Clusterを確認することが可能です。
# tkg get management-cluster
+-------------------------+-----------------+
| MANAGEMENT CLUSTER NAME | CONTEXT NAME |
+-------------------------+-----------------+
| mgmt * | mgmt-admin@mgmt |
+-------------------------+-----------------+
Tanzu Kubernetes Clusterの作成
tkg create
コマンドでTanzu Kubernetes Clusterを作成することが可能です。-c
でMasterの数、-w
でノードの数を指定することが可能です。
# tkg create cluster tkc01 -p prod -c 3 -w 4
Logs of the command execution can also be found at: /tmp/tkg-20200412T132030005381976.log
Creating workload cluster 'tkc01'...
Context set for workload cluster tkc01 as tkc01-admin@tkc01
Waiting for cluster nodes to be available...
Workload cluster 'tkc01' created
しばらくして作成が完了すると、作成したクラスターのContextが追加されデフォルトのContextが変更されます。
# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
mgmt-admin@mgmt mgmt mgmt-admin
* tkc01-admin@tkc01 tkc01 tkc01-admin
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
tkc01-control-plane-c9mpr Ready master 11m v1.17.3+vmware.2
tkc01-control-plane-drjgd Ready master 3m55s v1.17.3+vmware.2
tkc01-control-plane-jds9s Ready master 90s v1.17.3+vmware.2
tkc01-md-0-dbb597c65-2hsln Ready <none> 4m8s v1.17.3+vmware.2
tkc01-md-0-dbb597c65-cs29n Ready <none> 8m14s v1.17.3+vmware.2
tkc01-md-0-dbb597c65-qhc5b Ready <none> 4m8s v1.17.3+vmware.2
tkc01-md-0-dbb597c65-tkqgs Ready <none> 6m9s v1.17.3+vmware.2
作成したTanzu Kubernetes Clusterを構成するVMはManagement Clusterと同じリソースプールに作成されます。
更にクラスターを作成した場合も、同じリソースプールにVMが追加されます。
# tkg create cluster tkc02 -p dev -w 3
Logs of the command execution can also be found at: /tmp/tkg-20200412T135518055957683.log
Creating workload cluster 'tkc02'...
Context set for workload cluster tkc02 as tkc02-admin@tkc02
Waiting for cluster nodes to be available...
Workload cluster 'tkc02' created
作成したTanzu Kubernetes Clusterはtkgコマンドで確認することができます。
# tkg get clusters
+-------+-------------+
| NAME | STATUS |
+-------+-------------+
| tkc01 | Provisioned |
| tkc02 | Provisioned |
+-------+-------------+
Tanzu Kubernetes Clusterのスケールアウト・イン
また作成済みのClusterのNode数を変更することも可能です。(増減ともに可能)
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
tkc02-control-plane-d8p2z Ready master 9m v1.17.3+vmware.2
tkc02-md-0-674fc8479f-dvgmp Ready <none> 4m9s v1.17.3+vmware.2
tkc02-md-0-674fc8479f-nhs9c Ready <none> 4m9s v1.17.3+vmware.2
tkc02-md-0-674fc8479f-s26ph Ready <none> 7m14s v1.17.3+vmware.2
tkg cliでNode数を4に変更します。
# tkg scale cluster tkc02 -w 4
Successfully updated worker node machine deployment replica count for cluster tkc02
workload cluster tkc02 is being scaled
間もなくClusterのNodeが一台追加されます。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
tkc02-control-plane-d8p2z Ready master 13m v1.17.3+vmware.2
tkc02-md-0-674fc8479f-dvgmp Ready <none> 7m38s v1.17.3+vmware.2
tkc02-md-0-674fc8479f-mxds4 Ready <none> 112s v1.17.3+vmware.2
tkc02-md-0-674fc8479f-nhs9c Ready <none> 7m38s v1.17.3+vmware.2
tkc02-md-0-674fc8479f-s26ph Ready <none> 10m v1.17.3+vmware.2