0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

NUCで始めるVMware Tanzu - vSphere with TanzuをTKG CLIで操作

本日は、、このシリーズを始めてから、ずっと気になっていた内容を検証したいと思います。
それは、TKG CLIを使ってvSphere with Tanzuを操作する というネタです。

実は、この講座を始めるちょっと前からこのドキュメントが公開され、気になってました。。
これ、導線が悪いと思うんですよね。TKGのドキュメントの方に、紹介されてるんです。
TKGの方に来る人って恐らく、手っ取り早くvSphere環境でK8sを触りたい人だと思うんですよね。。
そんな人にvSphere with Tanzu環境が前提のドキュメントを見せても、響かないだろうなぁとw
TKG CLIの方が、UIとしては手軽で優れてると思ってました。そこにvSphere with Tanzuの特徴が加わることで、Managed K8s環境としてのレベルが上ったなぁという感想です。
ちょうどここに、vSphere with Tanzuがあるので、やっと試せます!

前提条件

  1. TKG CLIがインストールされている
     → Day13で導入した踏み台(nested-bastion01) を使います
  2. vSphere7にクラスタをデプロイ可能な権限を持つvSphereアカウント
     → Day18で作成したdevopsユーザで良さそうですね:grinning:
  3. vSphere with Tanzu 機能が有効なvSphere7インスタンスにアクセス可能
     → もちろん!Day19の話ですね。
  4. 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種類の指定方法をサポートしています。

  1. 「tkg create cluster hoge --config XXX=YYY」 : configフラグにより、TKC作成時にパラメータを渡す方法
  2. 「~/.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」が作成されたことが確認できます!
スクリーンショット 2020-12-23 17 54 33
この後、Day22で紹介したAPPデプロイを試しましたが、PVもLBも問題なく利用できました!

TKG CLIでSupervisorクラスタを操作するメリット

まずは、yamlを用意しなくても、vSphere with TanzuのTKCをデプロイできるようになったことが挙げられます。クラスタを量産したい人にとっては良いでしょう。
そして、一番のメリットは、Day12で紹介した各OSSを、導入することが挙げられます。
これらは、TKG CLIをベースとした導入方法となっているため、vSphere with TanzuとTKGの両方のメリットを享受できることになります!将来的には、もっと統合が進み、インストールももっと楽になると思われます。。

はい、本日は終了です。残すところ、あと2日ですね。。
明日は久しぶりに、NUCの話をしようかなと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?