vm.gowatana.jp

NEOにほんごVMware(仮)

Tanzu Kubernetes Grid 2.1 で以前のバージョン(TKG 1.6)の YAML から Workload Cluster を作成してみる。

Tanzu Kubernetes Grid(TKG)2.1 がリリースされたので、以前に投稿した TKG 1.6 環境を流用してセットアップしてみます。

 

TKG 2.1 のリリースノートはこちら。

 

TKG 2.1 では、デフォルトだと TKG 1.6 とは異なる Class-based clusters という新しい形式で Workload Cluster が作成されるようです。

ドキュメントでは下記のあたりが参考になります。

 

そこで、ためしに以前の TKG 1.6 で利用していたままの YAML ファイルを指定して、tanzu cluster create を実行してみました。

 

今回の内容です。

 

0. 今回の環境

以前に用意した TKG 1.6 環境を流用しています。スーパーバイザ クラスタは利用しないで vSphere 7.0 U3 環境にスタンドアローンの TKG Management Cluster を作成します。

 

1. TKG 2.1.0 のダウンロード

TKG 2.1 は、これまでと同様に VMware Customer Connect からダウンロードします。

 

今回は、Linux の Bootstrap マシンで最低限必要になる、3つのファイルをダウンロードしておきます。

  • VMware Tanzu CLI for Linux
    • tanzu-cli-bundle-linux-amd64.tar.gz
    • アーカイブ ファイル名にバージョン文字列が含まれていないので、他のもとの間違えないように要注意。
  • kubectl cli v1.24.9 for Linux
    • kubectl-linux-v1.24.9+vmware.1.gz
  • Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.1.0
    • photon-3-kube-v1.24.9+vmware.1-tkg.1-f5e94dab9dfbb9988aeb94f1ffdc6e5e.ova
    • Management Cluster をデプロイするには Kubernetes v1.24.9 の OVA が必須だが、Workload Cluster は v1.22.17、v1.23.15、v1.24.9 から選択可。
    • Photon OS または Ubuntu の OVA が利用できるが、今回は Photon OS のものを利用。

 

OVA ファイルは、vCenter Server から「photon-3-kube-v1.24.9+vmware.1」という名前でデプロイして、テンプレートに変換しておきます。

 

2. Bootstrap マシンでの準備

今回は、下記の投稿で構築した Bootstrap マシンを流用します。

 

Management Cluster を作成するために、Photon OS のマシンで、Docker のサービスを起動してあります。

demo-03 [ ~ ]$ cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892
demo-03 [ ~ ]$ systemctl is-active docker
active

 

まだ利用中の TKG 1.6 と併用したいので、今回は OS ユーザを追加作成します。

root@lab-tkg-02 [ ~ ]# useradd -m demo-03
root@lab-tkg-02 [ ~ ]# passwd demo-03
root@lab-tkg-02 [ ~ ]# usermod -aG docker demo-03

 

ここからは、追加作成したユーザで作業します。

root@lab-tkg-02 [ ~ ]# su - demo-03
demo-03 [ ~ ]$

 

SSH 鍵のペアを作成しておきます。

demo-03 [ ~ ]$ ssh-keygen -P '' -f $HOME/.ssh/id_rsa
demo-03 [ ~ ]$ cat $HOME/.ssh/id_rsa.pub

 

TKG 関連の CLI を配置するディレクトリを作成して、PATH を通しておきます。

demo-03 [ ~ ]$ mkdir $HOME/bin
demo-03 [ ~ ]$ echo 'export PATH=$HOME/bin:$PATH' >> $HOME/.bash_profile
demo-03 [ ~ ]$ export PATH=$HOME/bin:$PATH

 

TKG 2.1 の tanzu CLI と kubectl のファイルを、scp などで転送しておきます。

demo-03 [ ~ ]$ ls -1
kubectl-linux-v1.24.9+vmware.1.gz
tanzu-cli-bundle-linux-amd64.tar.gz

 

tanzu CLI と kubectl をインストールします。

demo-03 [ ~ ]$ tar zxf tanzu-cli-bundle-linux-amd64.tar.gz
demo-03 [ ~ ]$ install cli/core/v0.28.0/tanzu-core-linux_amd64 $HOME/bin/tanzu
demo-03 [ ~ ]$ gunzip kubectl-linux-v1.24.9+vmware.1.gz -k
demo-03 [ ~ ]$ install kubectl-linux-v1.24.9+vmware.1 $HOME/bin/kubectl
demo-03 [ ~ ]$ rm -f kubectl-linux-* tanzu-cli-bundle-linux-amd64.tar.gz

 

これで、tanzu CLI と kubectl インストールされました。

demo-03 [ ~ ]$ tanzu version
version: v0.28.0
buildDate: 2023-01-20
sha: 3c34115bc-dirty
demo-03 [ ~ ]$ kubectl version --client --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.24.9+vmware.1
Kustomize Version: v4.5.4

 

tanzu CLI のプラグインをインストールしておきます。

demo-03 [ ~ ]$ tanzu plugin sync
?  Checking for required plugins...
?  Installing plugin 'telemetry:v0.28.0' with target 'kubernetes'
?  Installing plugin 'isolated-cluster:v0.28.0'
?  Installing plugin 'login:v0.28.0'
?  Installing plugin 'management-cluster:v0.28.0' with target 'kubernetes'
?  Installing plugin 'package:v0.28.0' with target 'kubernetes'
?  Installing plugin 'pinniped-auth:v0.28.0'
?  Installing plugin 'secret:v0.28.0' with target 'kubernetes'
?  Successfully installed all required plugins
?  Done

 

3. Management Cluster の作成

 

3-1. YAML ファイルの作成

Management Cluster を定義する YAML ファイルを作成します。これは、TKG 1.6 で利用していた形式のままで利用してみます。また、この定義にあわせて事前に vCenter インベントリ オブジェクト(リソース プールや仮想マシン フォルダなど)を作成しておく必要があります。

tkg21mc01.yml

gist.github.com

 

3-2. Management Cluster の作成

tanzu management-cluster create コマンドを実行すると、Management Cluster は従来の YAML 形式のままでも作成できました。

demo-03 [ ~ ]$ tanzu management-cluster create -f tkg21mc01.yml

 

これで、しばらく待つと Management Cluster が作成されます。

demo-03 [ ~ ]$ kubectl get nodes
NAME                                    STATUS   ROLES           AGE   VERSION
tkg21mc01-g54v5-tc4jh                   Ready    control-plane   27m   v1.24.9+vmware.1
tkg21mc01-md-0-tntbb-54cd58bf96-hcxwz   Ready              24m   v1.24.9+vmware.1
demo-03 [ ~ ]$ kubectl get apps -A
NAMESPACE    NAME                             DESCRIPTION           SINCE-DEPLOY   AGE
tkg-system   tanzu-addons-manager             Reconcile succeeded   3m44s          4m9s
tkg-system   tanzu-auth                       Reconcile succeeded   2m20s          4m9s
tkg-system   tanzu-cliplugins                 Reconcile succeeded   3m16s          4m9s
tkg-system   tanzu-core-management-plugins    Reconcile succeeded   109s           2m11s
tkg-system   tanzu-featuregates               Reconcile succeeded   3m10s          4m9s
tkg-system   tanzu-framework                  Reconcile succeeded   4m13s          4m15s
tkg-system   tkg-clusterclass                 Reconcile succeeded   4m11s          4m14s
tkg-system   tkg-clusterclass-vsphere         Reconcile succeeded   2m10s          4m8s
tkg-system   tkg-pkg                          Reconcile succeeded   4m18s          4m20s
tkg-system   tkg21mc01-antrea                 Reconcile succeeded   58s            22m
tkg-system   tkg21mc01-capabilities           Reconcile succeeded   5m5s           22m
tkg-system   tkg21mc01-metrics-server         Reconcile succeeded   5m17s          22m
tkg-system   tkg21mc01-pinniped               Reconcile succeeded   5m22s          22m
tkg-system   tkg21mc01-secretgen-controller   Reconcile succeeded   5m12s          22m
tkg-system   tkg21mc01-tkg-storageclass       Reconcile succeeded   5m23s          22m
tkg-system   tkg21mc01-vsphere-cpi            Reconcile succeeded   64s            22m
tkg-system   tkg21mc01-vsphere-csi            Reconcile succeeded   62s            22m
tkg-system   tkr-service                      Reconcile succeeded   4m6s           4m9s
tkg-system   tkr-source-controller            Reconcile succeeded   2m1s           2m11s
tkg-system   tkr-vsphere-resolver             Reconcile succeeded   2m3s           2m11s

 

Management Cluster は、tkg-system Namespace に作成されています。

demo-03 [ ~ ]$ tanzu cluster list --include-management-cluster -A
  NAME       NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES       PLAN  TKR
  tkg21mc01  tkg-system  running  1/1           1/1      v1.24.9+vmware.1  management  dev   v1.24.9---vmware.1-tkg.1

 

参考: Web UI で生成された YAML

今回は TKG 1.6 の頃の YAML ファイルを利用しましたが、今回の Management Cluster と同様の構成を TKG の Web UI から作成すると、YAML ファイルは下記のように生成されます。

tkg21mc01_tkg2.1-ui.yaml

gist.github.com

 

4. Workload Cluster の作成

TKG 2.1 では、Workload Cluster の作成方法が3種類用意されています。

  1. Class-based clusters (default)
  2. Plan-based clusters (legacy) → 以前の TKG の方式
  3. TKC-based clusters (legacy) → スーパーバイザー クラスタの TKC

 

tanzu CLI では、features.cluster.allow-legacy-cluster: false となっており、デフォルトでは Legacy 方式での Workload Cluster 作成はできないようです。

demo-03@lab-tkg-02 [ ~ ]$ tanzu config get
clientOptions:
    cli:
        discoverySources:
            - oci:
                name: default
                image: projects.registry.vmware.com/tkg/packages/standalone-plugins:v0.28.0_vmware.1
        edition: tkg
        bomRepo: projects.registry.vmware.com/tkg
        compatibilityFilePath: tkg-compatibility
    features:
        cluster:
            allow-legacy-cluster: "false"
            custom-nameservers: "false"
            dual-stack-ipv4-primary: "false"
            dual-stack-ipv6-primary: "false"
        global:
            context-aware-cli-for-plugins: "true"
            context-target-v2: "true"
            tkr-version-v1alpha3-beta: "false"
        management-cluster:
            aws-instance-types-exclude-arm: "true"
            custom-nameservers: "false"
            deploy-in-cluster-ipam-provider: "true"
            dual-stack-ipv4-primary: "false"
            dual-stack-ipv6-primary: "false"
            export-from-confirm: "true"
            import: "false"
            package-based-cc: "true"
            standalone-cluster-mode: "false"
        package:
            kctrl-command-tree: "true"

 

4-1. YAML ファイルの作成

ためしに TKG 1.6 で利用していた、Plan-based clusters の YAML を用意します。

tkg21wc01.yml

gist.github.com

 

Management Cluster の YAML との差分です。

demo-03 [ ~ ]$ diff tkg21mc01.yml tkg21wc01.yml
5c5
< CLUSTER_NAME: tkg21mc01
---
> CLUSTER_NAME: tkg21wc01
21c21
< VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.11.203
---
> VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.11.204
26c26
< VSPHERE_FOLDER: /infra-dc-01/vm/05-Lab-k8s/k8s_lab-tkg-02_demo-03/vm_tkg21mc01
---
> VSPHERE_FOLDER: /infra-dc-01/vm/05-Lab-k8s/k8s_lab-tkg-02_demo-03/vm_tkg21wc01

 

この YAML ファイルで Workload Cluster を作成してみると、Workload Cluster の YAML ファイルが「Legacy configuration file」であることが検知され、Workload Cluster の作成は中断されます。そして、自動的に新しい形式にコンバートされた YAML ファイルが生成されます。

demo-03 [ ~ ]$ tanzu cluster create -f tkg21wc01.yml
Validating configuration...
Warning: Pinniped configuration not found; Authentication via Pinniped will not be set up in this cluster. If you wish to set up Pinniped after the cluster is created, please refer to the documentation.

Legacy configuration file detected. The inputs from said file have been converted into the new Cluster configuration as '/home/demo-03/.config/tanzu/tkg/clusterconfigs/tkg21wc01.yaml'

To create a cluster with it, use
    tanzu cluster create --file /home/demo-03/.config/tanzu/tkg/clusterconfigs/tkg21wc01.yaml

 

生成された YAML ファイルを、わかりやすい名前で保存しておきます。

demo-03 [ ~ ]$ cp $HOME/.config/tanzu/tkg/clusterconfigs/tkg21wc01.yaml tkg21wc01_new.yml

 

コンバートされた YAML の内容です。

tkg21wc01_new.yml

gist.github.com

 

4-2. Workload Cluster の作成

コンバート生成された YAML ファイルを指定して tanzu cluster create コマンドを実行すると、Workload Cluster が作成されます。

demo-03 [ ~ ]$ tanzu cluster create -f tkg21wc01_new.yml
Validating configuration...
Warning: Pinniped configuration not found; Authentication via Pinniped will not be set up in this cluster. If you wish to set up Pinniped after the cluster is created, please refer to the documentation.
creating workload cluster 'tkg21wc01'...
waiting for cluster to be initialized...
[zero or multiple KCP objects found for the given cluster, 0 tkg21wc01 default, no MachineDeployment objects found for the given cluster]
cluster control plane is still being initialized: ScalingUp
cluster control plane is still being initialized: WaitingForIPAllocation @ Machine/tkg21wc01-9spnb-f5zkj
cluster control plane is still being initialized: WaitingForKubeadmInit
waiting for cluster nodes to be available...
unable to get the autoscaler deployment, maybe it is not exist
waiting for addons core packages installation...

Workload cluster 'tkg21wc01' created

demo-03 [ ~ ]$

 

Workload Cluster が作成されたことを確認しておきます。

demo-03 [ ~ ]$ tanzu cluster list --include-management-cluster -A
  NAME       NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES       PLAN  TKR
  tkg21wc01  default     running  1/1           1/1      v1.24.9+vmware.1        dev   v1.24.9---vmware.1-tkg.1
  tkg21mc01  tkg-system  running  1/1           1/1      v1.24.9+vmware.1  management  dev   v1.24.9---vmware.1-tkg.1

 

Workload Cluster の kubeconfig を取得して、コンテキストを切り替えます。

demo-03 [ ~ ]$ tanzu cluster kubeconfig get tkg21wc01 --admin
Credentials of cluster 'tkg21wc01' have been saved
You can now access the cluster by running 'kubectl config use-context tkg21wc01-admin@tkg21wc01'
demo-03 [ ~ ]$ kubectl config use-context tkg21wc01-admin@tkg21wc01
Switched to context "tkg21wc01-admin@tkg21wc01".

 

Workload Cluster ノードの一覧です。

demo-03 [ ~ ]$ kubectl get nodes
NAME                                   STATUS   ROLES           AGE     VERSION
tkg21wc01-9spnb-f5zkj                  Ready    control-plane   28m     v1.24.9+vmware.1
tkg21wc01-md-0-bsvmc-7745b88ff-rvchz   Ready    <none>          4m34s   v1.24.9+vmware.1

 

Workload Cluster  にインストールされてたパッケージの一覧です。

demo-03 [ ~ ]$ kubectl get apps -A
NAMESPACE    NAME                             DESCRIPTION           SINCE-DEPLOY   AGE
tkg-system   tkg21wc01-antrea                 Reconcile succeeded   60s            34m
tkg-system   tkg21wc01-capabilities           Reconcile succeeded   65s            34m
tkg-system   tkg21wc01-metrics-server         Reconcile succeeded   108s           34m
tkg-system   tkg21wc01-pinniped               Reconcile succeeded   13m            34m
tkg-system   tkg21wc01-secretgen-controller   Reconcile succeeded   69s            34m
tkg-system   tkg21wc01-tkg-storageclass       Reconcile succeeded   13m            34m
tkg-system   tkg21wc01-vsphere-cpi            Reconcile succeeded   13m            34m
tkg-system   tkg21wc01-vsphere-csi            Reconcile succeeded   21s            34m

 

以上、TKG 2.1 で Workload Cluster を作成してみる話でした。