Tanzu CLIを使ってvSphere with TanzuのSupervisor Clusterを操作するメモ
vSphere with TanzuのSupervisor ClusterをTanzu CLIから操作してTanzu Kubernetes Cluster (Workload Cluster)を作成するメモ。 ドキュメントはこちら 。
TanzuKubernetesClusterリソースをYAMLで作成するのが面倒な時にtanzu CLIでクラスタを作成すると便利な場合がある。
Supervisor Clusterへの接続
まずはkubectl vsphere loginコマンドでSupervisor Clusterにログインする。
export SUPERVISOR_IP=192.168.123.3
export KUBECTL_VSPHERE_USERNAME=administrator@vsphere.local
export KUBECTL_VSPHERE_PASSWORD=VMware1!
export TKC_NAMESPACE=ns-tmaki
kubectl vsphere login --server=${SUPERVISOR_IP} --vsphere-username=${KUBECTL_VSPHERE_USERNAME} --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace ${TKC_NAMESPACE}
kubectl config use-context ${TKC_NAMESPACE}
次にTanzu CLIで対象のSupervisor Cluster及びNamespaceにログインする。
$ tanzu login --name ${TKC_NAMESPACE} --context ${TKC_NAMESPACE} --kubeconfig ~/.kube/config
✔ successfully logged in to management cluster using the kubeconfig ns-tmaki
ログインが成功すれば再度tanzu loginコマンドを実行した時に、Supervisor Clusterが選択肢に現れる。
$ tanzu login
? Select a server [Use arrows to move, type to filter]
> carrot ()
ns-tmaki ()
+ new server
✔ successfully logged in to management cluster using the kubeconfig ns-tmaki
tanzu cluster listコマンドで対象のSupervisor Clusterが管理しているTanzu Kubernetes Cluster一覧が取得できる。
$ tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN
cheese ns-tmaki running 1/1 3/3 v1.20.2 <none>
Tanzu Kubernetes Clusterの作成
次にtanzuコマンドでTanzu Kubernetes Clusterを作成する。作成するクラスタのスペックを環境変数かYAMLに定義する。
デフォルト値はYAMLに定義して、必要に応じて環境変数でオーバーライドするのが良いと思う。YAMLのファイルはどこに置いても良い。
ここでは~/.tanzu/tkg/tkc.yamlに次のファイルを用意した。
$ cat ~/.tanzu/tkg/tkc.yaml
CONTROL_PLANE_STORAGE_CLASS: k8s-storage
WORKER_STORAGE_CLASS: k8s-storage
DEFAULT_STORAGE_CLASS: k8s-storage
STORAGE_CLASSES: k8s-storage
CONTROL_PLANE_VM_CLASS: best-effort-small
WORKER_VM_CLASS: best-effort-medium
NAMESPACE: ns-tmaki
CLUSTER_PLAN: dev
****_STORAGE_CLASSに設定可能な値は次のコマンドで確認できる。
$ kubectl get storageclasses
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
k8s-storage csi.vsphere.vmware.com Delete Immediate true 18d
vsan-default-storage-policy csi.vsphere.vmware.com Delete Immediate true 18d
****_VM_CLASSに設定可能な値は次のコマンドで確認できる。
$ kubectl get virtualmachineclassbinding
NAME VIRTUALMACHINECLASS AGE
best-effort-2xlarge best-effort-2xlarge 25h
best-effort-4xlarge best-effort-4xlarge 25h
best-effort-8xlarge best-effort-8xlarge 25h
best-effort-large best-effort-large 25h
best-effort-medium best-effort-medium 25h
best-effort-small best-effort-small 25h
best-effort-xlarge best-effort-xlarge 25h
best-effort-xsmall best-effort-xsmall 25h
guaranteed-2xlarge guaranteed-2xlarge 25h
guaranteed-4xlarge guaranteed-4xlarge 25h
guaranteed-8xlarge guaranteed-8xlarge 25h
guaranteed-large guaranteed-large 25h
guaranteed-medium guaranteed-medium 25h
guaranteed-small guaranteed-small 25h
guaranteed-xlarge guaranteed-xlarge 25h
guaranteed-xsmall guaranteed-xsmall 25h
$ kubectl get virtualmachineclasses
NAME CPU MEMORY AGE
best-effort-2xlarge 8 64Gi 18d
best-effort-4xlarge 16 128Gi 18d
best-effort-8xlarge 32 128Gi 18d
best-effort-large 4 16Gi 18d
best-effort-medium 2 8Gi 18d
best-effort-small 2 4Gi 18d
best-effort-xlarge 4 32Gi 18d
best-effort-xsmall 2 2Gi 18d
guaranteed-2xlarge 8 64Gi 18d
guaranteed-4xlarge 16 128Gi 18d
guaranteed-8xlarge 32 128Gi 18d
guaranteed-large 4 16Gi 18d
guaranteed-medium 2 8Gi 18d
guaranteed-small 2 4Gi 18d
guaranteed-xlarge 4 32Gi 18d
guaranteed-xsmall 2 2Gi 18d
tanzu cluster createコマンドでクラスタを作成します。まずは--dry-runオプションをつけて設定内容を確認する。結果はYAMLで出力される。
$ tanzu cluster create milk -f ~/.tanzu/tkg/tkc.yaml --tkr v1.20.2---vmware.1-tkg.2.3e10706 --dry-run
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
annotations:
tkg/plan: dev
labels:
tkg.tanzu.vmware.com/cluster-name: milk
name: milk
namespace: ns-tmaki
spec:
distribution:
version: 1.20.2+vmware.1-tkg.2.3e10706
settings:
network:
cni:
name: antrea
pods:
cidrBlocks:
- 100.96.0.0/11
serviceDomain: cluster.local
services:
cidrBlocks:
- 100.64.0.0/13
storage:
classes:
- k8s-storage
defaultClass: k8s-storage
topology:
controlPlane:
class: best-effort-small
count: 1
storageClass: k8s-storage
workers:
class: best-effort-medium
count: 1
storageClass: k8s-storage
--tkrに設定可能な値は次のコマンドで確認できる。
$ tanzu kubernetes-release get
NAME VERSION COMPATIBLE UPGRADEAVAILABLE
v1.16.12---vmware.1-tkg.1.da7afe7 1.16.12+vmware.1-tkg.1.da7afe7 True
v1.16.14---vmware.1-tkg.1.ada4837 1.16.14+vmware.1-tkg.1.ada4837 True
v1.16.8---vmware.1-tkg.3.60d2ffd 1.16.8+vmware.1-tkg.3.60d2ffd False
v1.17.11---vmware.1-tkg.1.15f1e18 1.17.11+vmware.1-tkg.1.15f1e18 True
v1.17.11---vmware.1-tkg.2.ad3d374 1.17.11+vmware.1-tkg.2.ad3d374 True
v1.17.13---vmware.1-tkg.2.2c133ed 1.17.13+vmware.1-tkg.2.2c133ed True
v1.17.17---vmware.1-tkg.1.d44d45a 1.17.17+vmware.1-tkg.1.d44d45a True
v1.17.7---vmware.1-tkg.1.154236c 1.17.7+vmware.1-tkg.1.154236c True
v1.17.8---vmware.1-tkg.1.5417466 1.17.8+vmware.1-tkg.1.5417466 True
v1.18.10---vmware.1-tkg.1.3a6cd48 1.18.10+vmware.1-tkg.1.3a6cd48 True
v1.18.15---vmware.1-tkg.1.600e412 1.18.15+vmware.1-tkg.1.600e412 True
v1.18.15---vmware.1-tkg.2.ebf6117 1.18.15+vmware.1-tkg.2.ebf6117 True
v1.18.5---vmware.1-tkg.1.c40d30d 1.18.5+vmware.1-tkg.1.c40d30d True
v1.19.7---vmware.1-tkg.1.fc82c41 1.19.7+vmware.1-tkg.1.fc82c41 True
v1.19.7---vmware.1-tkg.2.f52f85a 1.19.7+vmware.1-tkg.2.f52f85a True
v1.20.2---vmware.1-tkg.1.1d4f79a 1.20.2+vmware.1-tkg.1.1d4f79a True
v1.20.2---vmware.1-tkg.2.3e10706 1.20.2+vmware.1-tkg.2.3e10706 True
tanzu cluster create -hには出力されないが、旧tkgコマンドと同様に-cでControlPlane数、-wでWorker数を指定することも可能。
$ tanzu cluster create milk -f ~/.tanzu/tkg/tkc.yaml --tkr v1.20.2---vmware.1-tkg.2.3e10706 --dry-run -c 3 -w 5
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
annotations:
tkg/plan: dev
labels:
tkg.tanzu.vmware.com/cluster-name: milk
name: milk
namespace: ns-tmaki
spec:
distribution:
version: 1.20.2+vmware.1-tkg.2.3e10706
settings:
network:
cni:
name: antrea
pods:
cidrBlocks:
- 100.96.0.0/11
serviceDomain: cluster.local
services:
cidrBlocks:
- 100.64.0.0/13
storage:
classes:
- k8s-storage
defaultClass: k8s-storage
topology:
controlPlane:
class: best-effort-small
count: 3 # ⭐️
storageClass: k8s-storage
workers:
class: best-effort-medium
count: 5 # ⭐️
storageClass: k8s-storage
では--dry-runオプションを外して実際にクラスタを作成する。
TanzuKubernetesClusterリソースのYAMLをkubectl applyするのに比べて、クラスタ作成完了までコマンドが待機するのが少し便利。
$ tanzu cluster create milk -f ~/.tanzu/tkg/tkc.yaml --tkr v1.20.2---vmware.1-tkg.2.3e10706 -v 6 -y
Using namespace from config:
Validating configuration...
Waiting for the Tanzu Kubernetes Cluster service for vSphere workload cluster
cluster is still not provisioned, retrying, retrying
...
cluster is still not provisioned, retrying, retrying
Workload cluster 'milk' created
tanzu cluster listを実行して作成したクラスタを確認する。
$ tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN
cheese ns-tmaki running 1/1 3/3 v1.20.2 <none>
milk ns-tmaki running 1/1 1/1 1.20.2+vmware.1-tkg.2.3e10706 <none>
作成したクラスタにkubectlでアクセスするためにkubectl vsphere loginで--tanzu-kubernetes-cluster-nameオプションにクラスタ名を指定する。
kubectl vsphere login --server=${SUPERVISOR_IP} --vsphere-username=${KUBECTL_VSPHERE_USERNAME} --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace ${TKC_NAMESPACE} --tanzu-kubernetes-cluster-name milk
kubectlで対象のクラスタにアクセスできることを確認。
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
milk-control-plane-9txtb Ready control-plane,master 135m v1.20.2+vmware.1 172.21.129.2 <none> VMware Photon OS/Linux 4.19.174-4.ph3-esx containerd://1.4.4
milk-workers-cp5x7-68c7ddd554-nkcvw Ready <none> 133m v1.20.2+vmware.1 172.21.129.3 <none> VMware Photon OS/Linux 4.19.174-4.ph3-esx containerd://1.4.4
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system antrea-agent-jrvpv 2/2 Running 0 135m
kube-system antrea-agent-pqff5 2/2 Running 0 135m
kube-system antrea-controller-6d498b5b54-cf82v 1/1 Running 0 135m
kube-system antrea-resource-init-5774f96d79-mlmqr 1/1 Running 0 135m
kube-system coredns-785f4496d4-l88gg 1/1 Running 0 135m
kube-system coredns-785f4496d4-ppnd2 1/1 Running 0 135m
kube-system docker-registry-milk-control-plane-9txtb 1/1 Running 0 135m
kube-system docker-registry-milk-workers-cp5x7-68c7ddd554-nkcvw 1/1 Running 0 135m
kube-system etcd-milk-control-plane-9txtb 1/1 Running 0 135m
kube-system kube-apiserver-milk-control-plane-9txtb 1/1 Running 0 135m
kube-system kube-controller-manager-milk-control-plane-9txtb 1/1 Running 0 135m
kube-system kube-proxy-45nch 1/1 Running 0 135m
kube-system kube-proxy-5dwcb 1/1 Running 0 135m
kube-system kube-scheduler-milk-control-plane-9txtb 1/1 Running 0 135m
vmware-system-auth guest-cluster-auth-svc-mhb45 1/1 Running 0 135m
vmware-system-cloud-provider guest-cluster-cloud-provider-59f66f469c-glx85 1/1 Running 0 135m
vmware-system-csi vsphere-csi-controller-845866ff86-4nmjq 6/6 Running 0 135m
vmware-system-csi vsphere-csi-node-l6r5x 3/3 Running 0 135m
vmware-system-csi vsphere-csi-node-wdbtp 3/3 Running 0 135m
--tkrオプションの省略
tanzu create clusterに毎度--tkrオプションを指定するのは面倒なのでYAMLにデフォルトのバージョンを指定したい。
ドキュメントには書かれていないが、~/.tanzu/tkg/providers/infrastructure-tkg-service-vsphere/v1.0.0/ytt/overlay.yamlを見るとKUBERNETES_VERSIONという変数を使用していることがわかるので、この変数をYAMLに設定する。
$ cat ~/.tanzu/tkg/tkc.yaml
CONTROL_PLANE_STORAGE_CLASS: k8s-storage
WORKER_STORAGE_CLASS: k8s-storage
DEFAULT_STORAGE_CLASS: k8s-storage
STORAGE_CLASSES: k8s-storage
CONTROL_PLANE_VM_CLASS: best-effort-small
WORKER_VM_CLASS: best-effort-medium
NAMESPACE: ns-tmaki
CLUSTER_PLAN: dev
KUBERNETES_VERSION: v1.20
これで--tkrオプションを省略できる。
$ tanzu cluster create yogurt -f ~/.tanzu/tkg/tkc.yaml --dry-run
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
annotations:
tkg/plan: dev
labels:
tkg.tanzu.vmware.com/cluster-name: yogurt
name: yogurt
namespace: ns-tmaki
spec:
distribution:
version: v1.20
settings:
network:
cni:
name: antrea
pods:
cidrBlocks:
- 100.96.0.0/11
serviceDomain: cluster.local
services:
cidrBlocks:
- 100.64.0.0/13
storage:
classes:
- k8s-storage
defaultClass: k8s-storage
topology:
controlPlane:
class: best-effort-small
count: 1
storageClass: k8s-storage
workers:
class: best-effort-medium
count: 1
storageClass: k8s-storage
以下同様。
$ tanzu cluster create yogurt -f ~/.tanzu/tkg/tkc.yaml -v 6 -y
Using namespace from config:
Validating configuration...
Waiting for the Tanzu Kubernetes Cluster service for vSphere workload cluster
cluster is still not provisioned, retrying, retrying
...
cluster is still not provisioned, retrying, retrying
Workload cluster 'yogurt' created
$ tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN
cheese ns-tmaki running 1/1 3/3 v1.20.2 <none>
milk ns-tmaki running 1/1 1/1 v1.20.2---vmware.1-tkg.2.3e10706 <none>
yogurt ns-tmaki running 1/1 1/1 v1.20 <none>
kubectl vsphere login --server=${SUPERVISOR_IP} --vsphere-username=${KUBECTL_VSPHERE_USERNAME} --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace ${TKC_NAMESPACE} --tanzu-kubernetes-cluster-name yogurt
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
yogurt-control-plane-zl2zz Ready control-plane,master 22m v1.20.2+vmware.1 172.21.129.18 <none> VMware Photon OS/Linux 4.19.174-4.ph3-esx containerd://1.4.4
yogurt-workers-7db75-64c8db8bb5-qftmq Ready <none> 20m v1.20.2+vmware.1 172.21.129.19 <none> VMware Photon OS/Linux 4.19.174-4.ph3-esx containerd://1.4.4
Tanzu Kubernetes Clusterのスケールアウト
tanzu cluster scaleでスケールアウト可能。-cでControlPlane数、-wでWorker数を指定。
$ tanzu cluster scale yogurt -w 3 -n ${TKC_NAMESPACE}
Successfully scaled workers for cluster yogurt
Workload cluster 'yogurt' is being scaled

Tanzu Kubernetes Clusterの削除
$ tanzu cluster delete milk -n ${TKC_NAMESPACE} -y
Workload cluster 'milk' is being deleted