本日は、、このシリーズを始めてから、ずっと気になっていた内容を検証したいと思います。
それは、TKG CLIを使ってvSphere with Tanzuを操作する というネタです。
実は、この講座を始めるちょっと前からこのドキュメントが公開され、気になってました。。
これ、導線が悪いと思うんですよね。TKGのドキュメントの方に、紹介されてるんです。
TKGの方に来る人って恐らく、手っ取り早くvSphere環境でK8sを触りたい人だと思うんですよね。。
そんな人にvSphere with Tanzu環境が前提のドキュメントを見せても、響かないだろうなぁとw
TKG CLIの方が、UIとしては手軽で優れてると思ってました。そこにvSphere with Tanzuの特徴が加わることで、Managed K8s環境としてのレベルが上ったなぁという感想です。
ちょうどここに、vSphere with Tanzuがあるので、やっと試せます!
#前提条件
- TKG CLIがインストールされている
→ Day13で導入した踏み台(nested-bastion01) を使います - vSphere7にクラスタをデプロイ可能な権限を持つvSphereアカウント
→ Day18で作成したdevopsユーザで良さそうですね - vSphere with Tanzu 機能が有効なvSphere7インスタンスにアクセス可能
→ もちろん!Day19の話ですね。 - TKG CLIコマンドを実行するBootstrapマシンにkubectl vsphere CLIユーティリティ
→ おっと。ここはわざわざ踏み台を分けたので、追加で仕込む必要がありますね。。
基本的にはDay21と手順は一緒で、kubectl-vsphereコマンドのみを追加で設置します。
$ sudo mv bin/kubectl-vsphere /usr/local/bin/
$ ls -l /usr/local/bin/
total 11944
lrwxrwxrwx 1 root root 51 Dec 13 16:07 imgpkg -> /home/ubuntu/tkg/imgpkg-linux-amd64-v0.2.0+vmware.1
lrwxrwxrwx 1 root root 50 Dec 13 16:07 kapp -> /home/ubuntu/tkg/kapp-linux-amd64-v0.33.0+vmware.1
lrwxrwxrwx 1 root root 50 Dec 13 16:07 kbld -> /home/ubuntu/tkg/kbld-linux-amd64-v0.24.0+vmware.1
lrwxrwxrwx 1 root root 47 Dec 13 16:09 kubectl -> /home/ubuntu/tkg/kubectl-linux-v1.19.3-vmware.1
-rwxr-xr-x 1 ubuntu ubuntu 12226737 Aug 11 00:42 kubectl-vsphere
lrwxrwxrwx 1 root root 48 Dec 13 16:07 tkg -> /home/ubuntu/tkg/tkg-linux-amd64-v1.2.1+vmware.1
lrwxrwxrwx 1 root root 49 Dec 13 16:07 ytt -> /home/ubuntu/tkg/ytt-linux-amd64-v0.30.0+vmware.1
# /usr/local/bin に kubectl-vsphereが実行権を持って設置されていること
$ kubectl vsphere version
kubectl-vsphere: version 0.0.5, build 16726330, change 8275972
Supervisorクラスタの登録
# 以前の環境設定に依存した問題を回避するため、config.yaml をmvしておきましょう。
# mvにより、新規にconfig.yamlが作成され、config.yaml.orgから以前の環境に戻すこともできます。
$ mv ~/.tkg/config.yaml{,.org}
# administrator@vsphere.local でSSOログイン
$ SUPERVISOR_IP=172.18.0.208
$ kubectl vsphere login --vsphere-username administrator@vsphere.local --server=$SUPERVISOR_IP --insecure-skip-tls-verify=true
# Supervisorクラスタにコンテキストを切り替え
$ kubectl config use-context $SUPERVISOR_IP
Switched to context "172.18.0.208".
# コンテキストに「172.18.0.208」が加わり、現在のコンテキストとなっていることを確認
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* 172.18.0.208 172.18.0.208 wcp:172.18.0.208:administrator@vsphere.local
my-cluster-admin@my-cluster my-cluster my-cluster-admin
tkg-mgmt-vsphere-20201213161849-admin@tkg-mgmt-vsphere-20201213161849 tkg-mgmt-vsphere-20201213161849 tkg-mgmt-vsphere-20201213161849-admin
tkgs-dev 172.18.0.208 wcp:172.18.0.208:administrator@vsphere.local tkgs-dev
# Supervisorクラスタを確認することができる
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
422e52df766768f43b0339b3a037d99e Ready master 41h v1.18.2-6+38ac483e736488
422e8137eb129484a1a96f3bc8a4b7c6 Ready master 41h v1.18.2-6+38ac483e736488
422ed8a369686aee772434cdd769faa0 Ready master 41h v1.18.2-6+38ac483e736488
# tkgコマンドを初めて叩くと、~/.tkg/config.yaml が新規作成されます。
$ tkg get management-cluster
$ ls ~/.tkg/config.yaml
# 現在のコンテキストを、management-clusterに登録
$ tkg add management-cluster
New management cluster context has been added to config file
# 利用するmanagement-clusterを「172.18.0.208」にセット
$ tkg set management-cluster $SUPERVISOR_IP
The current management cluster context is switched to 172.18.0.208
# management-clusterの一覧に、「172.18.0.208」が追加され、利用中のクラスタ(*印)にセットされている
$ tkg get management-cluster
MANAGEMENT-CLUSTER-NAME CONTEXT-NAME STATUS
172.18.0.208 * 172.18.0.208 Success
#TKCパラメータの設定
次は、TKG CLIがTKCを作成する際に、Supervisorクラスタに渡すパラメータの設定です。
以下の2種類の指定方法をサポートしています。
- 「tkg create cluster hoge --config XXX=YYY」 : configフラグにより、TKC作成時にパラメータを渡す方法
- 「~/.tkg/config.yaml」に設定しておく方法。
毎回パラメータを指定するのは大変なので、2の方法で進めてみます。
# まずは、StorageClass情報をコマンドにより取得
$ kubectl get storageclasses
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
k8s-dev-storage-policy csi.vsphere.vmware.com Delete Immediate true 41h
# 念のため、に戻せるようバックアップをとっておいてから編集しましょう
$ cp ~/.tkg/config.yaml{,.org}
$ vi ~/.tkg/config.yaml
# (途中は省略)
BASTION_HOST_ENABLED: "true"
# ↑の次の行に必要な設定を追記していく。yamlの文法が崩れないところであれば、どこでもよいはず。
CONTROL_PLANE_STORAGE_CLASS: k8s-dev-storage-policy
WORKER_STORAGE_CLASS: k8s-dev-storage-policy
DEFAULT_STORAGE_CLASS: k8s-dev-storage-policy
STORAGE_CLASSES: ""
CONTROL_PLANE_VM_CLASS: best-effort-xsmall
WORKER_VM_CLASS: best-effort-xsmall
SERVICE_CIDR: 100.64.0.0/13
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_DOMAIN: cluster.local
基本は、ドキュメントの指示に従い、パラメータを埋めていきました。
また、こちら が利用可能なVMリソースのクラスとなるので、「CONTROL_PLANE_VM_CLASS」と「WORKER_VM_CLASS」に指定しましょう。
#TKCの作成
準備は整いました。TKCをデプロイしてみましょう!
# この中からお好きなK8sバージョンを利用します。VERSION以下の文字列をセット。
$ kubectl get tkr
NAME VERSION CREATED
v1.16.12---vmware.1-tkg.1.da7afe7 1.16.12+vmware.1-tkg.1.da7afe7 46h
v1.16.14---vmware.1-tkg.1.ada4837 1.16.14+vmware.1-tkg.1.ada4837 46h
v1.16.8---vmware.1-tkg.3.60d2ffd 1.16.8+vmware.1-tkg.3.60d2ffd 46h
v1.17.11---vmware.1-tkg.1.15f1e18 1.17.11+vmware.1-tkg.1.15f1e18 46h
v1.17.11---vmware.1-tkg.2.ad3d374 1.17.11+vmware.1-tkg.2.ad3d374 46h
v1.17.7---vmware.1-tkg.1.154236c 1.17.7+vmware.1-tkg.1.154236c 46h
v1.17.8---vmware.1-tkg.1.5417466 1.17.8+vmware.1-tkg.1.5417466 46h
v1.18.5---vmware.1-tkg.1.c40d30d 1.18.5+vmware.1-tkg.1.c40d30d 46h
$ VERSION="1.18.5+vmware.1-tkg.1.c40d30d"
# 既に作成済みのSupervisor namespaceを指定します。
$ NAMESPACE="tkgs-dev"
# デプロイ
$ tkg create cluster my-tkg-cluster --plan=dev --namespace=$NAMESPACE --kubernetes-version=$VERSION
# (以下、出力メッセージ)
Logs of the command execution can also be found at: /tmp/tkg-20201223T082015363212583.log
You are trying to create a cluster with kubernetes version '1.18.5+vmware.1-tkg.1.c40d30d' on vSphere with Tanzu, Please make sure virtual machine image for the same is available in the cluster content library.
Do you want to continue? [y/N]: y
# content libraryに指定のK8sバージョンがないとデプロイできないので注意。「y」で続行!
Workload cluster 'my-tkg-cluster' created
# 上記のメッセージが出ても、worker構築までは、しばらく待つ。。
$ tkg get cluster
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES
my-tkg-cluster tkgs-dev running 1/1 0/1 1.18.5+vmware.1-tkg.1.c40d30d <none>
tkc-1 tkgs-dev running 1/1 1/1 v1.18 <none>
workerは構築されるまでに、タイムラグがあるようです。体感で10分位でした。
上記のWORKERSが1/1になると、デプロイが完了です。
vCenter上で、「tkgs-dev」namespaceに、「my-tkg-cluster」が作成されたことが確認できます!
この後、Day22で紹介したAPPデプロイを試しましたが、PVもLBも問題なく利用できました!
###TKG CLIでSupervisorクラスタを操作するメリット
まずは、yamlを用意しなくても、vSphere with TanzuのTKCをデプロイできるようになったことが挙げられます。クラスタを量産したい人にとっては良いでしょう。
そして、一番のメリットは、Day12で紹介した各OSSを、導入することが挙げられます。
これらは、TKG CLIをベースとした導入方法となっているため、vSphere with TanzuとTKGの両方のメリットを享受できることになります!将来的には、もっと統合が進み、インストールももっと楽になると思われます。。
はい、本日は終了です。残すところ、あと2日ですね。。
明日は久しぶりに、NUCの話をしようかなと思います。