背景

業務で vCD(VMware Cloud Director)環境でTKGクラスタの検証を行なっているのだが、その練習として今回はEC2にTanzu CEを構築してみる。

概要

  1. TanzuのCLIをインストール
  2. CLIでUnManaged Clusterを作成する
  3. GUIでManaged Clusterを作成する
  4. Managed Clusterからその後CLIでWorkload Clusterを作成する

環境

  • AWS EC2(t2.2xlarge)
  • Ubuntu 20.04.3 LTS
  • EC2のプライベートIPアドレス(172.31.10.190)
  • Docker version 20.10.13
  • kubectl v1.23.0

Install tanzu CLI

githubのvmware-tanzu/community-editionからtanzu CLIをダウンロードしてインストールする。今回はRelease v0.11.0-rc.2を利用する。
(注意)rootユーザーで実行するとスクリプトの実行で失敗する。そのため、一般ユーザーで実行する。

wget https://github.com/vmware-tanzu/community-edition/releases/download/v0.11.0-rc.2/tce-linux-amd64-v0.11.0-rc.2.tar.gz
ls
tce-linux-amd64-v0.11.0-rc.2.tar.gz
tar zxvf  tce-linux-amd64-v0.11.0-rc.2.tar.gz
cd tce-linux-amd64-v0.11.0-rc.2/
ls
default-local  install.sh  tanzu  uninstall.sh
./install.sh

Tanzu CLIがインストールされた。

which tanzu
/usr/local/bin/tanzu
tanzu version
version: v0.11.2
buildDate: 2022-03-17
sha: 6431d1d
tanzu management-cluster create -b 172.31.10.190:8080 -u --browser=none

Validating the pre-requisites...
Serving kickstart UI at http://172.31.10.190:8080

EC2と紐づいているグローバルIPアドレスにアクセスすると下記のような画面が表示される。

Tanzu 管理クラスタ UI

クラスタ作成(CLI, GUI)

CLIでクラスタを作成する(UnManaged Cluster)

先程GUIの画面を紹介したが、一旦その画面は使用せずにCLIでクラスタを作成してみる。
unmanaged clustertanzu-testという名前で作成する。

tanzu unmanaged-cluster create tanzu-test

出力は下記のようになる。

📁 Created cluster directory

🔧 Resolving Tanzu Kubernetes Release (TKR)
   projects.registry.vmware.com/tce/tkr:v0.17.0
   Downloaded to: /home/ubuntu/.config/tanzu/tkg/unmanaged/bom/projects.registry.vmware.com_tce_tkr_v0.17.0
   Rendered Config: /home/ubuntu/.config/tanzu/tkg/unmanaged/tanzu-test/config.yaml
   Bootstrap Logs: /home/ubuntu/.config/tanzu/tkg/unmanaged/tanzu-test/bootstrap.log

🔧 Processing Tanzu Kubernetes Release

🎨 Selected base image
   projects.registry.vmware.com/tce/kind:v1.22.4

📦 Selected core package repository
   projects.registry.vmware.com/tce/repo-10:0.10.0

📦 Selected additional package repositories
   projects.registry.vmware.com/tce/main:v0.11.0

📦 Selected kapp-controller image bundle
   projects.registry.vmware.com/tce/kapp-controller-multi-pkg:v0.30.1

🚀 Creating cluster tanzu-test
   Cluster creation using kind!
   ❤️  Checkout this awesome project at https://kind.sigs.k8s.io
   Base image downloaded
   Cluster created
   To troubleshoot, use:

   kubectl ${COMMAND} --kubeconfig /home/ubuntu/.config/tanzu/tkg/unmanaged/tanzu-test/kube.conf

📧 Installing kapp-controller
   kapp-controller status: Running

📧 Installing package repositories
   Core package repo status: Reconcile succeeded

🌐 Installing CNI
   calico.community.tanzu.vmware.com:3.22.1

✅ Cluster created

🎮 kubectl context set to tanzu-test

View available packages:
   tanzu package available list
View running pods:
   kubectl get po -A
Delete this cluster:
   tanzu unmanaged delete tanzu-test

起動中のPodを確認する

kubectl get po -A
NAMESPACE            NAME                                               READY   STATUS    RESTARTS   AGE
kube-system          calico-kube-controllers-5b78fc7bb7-zrp86           1/1     Running   0          35m
kube-system          calico-node-2dx5d                                  1/1     Running   0          35m
kube-system          coredns-78fcd69978-45gjd                           1/1     Running   0          35m
kube-system          coredns-78fcd69978-7jlsh                           1/1     Running   0          35m
kube-system          etcd-tanzu-test-control-plane                      1/1     Running   0          36m
kube-system          kube-apiserver-tanzu-test-control-plane            1/1     Running   0          36m
kube-system          kube-controller-manager-tanzu-test-control-plane   1/1     Running   0          36m
kube-system          kube-proxy-z2ht6                                   1/1     Running   0          35m
kube-system          kube-scheduler-tanzu-test-control-plane            1/1     Running   0          36m
local-path-storage   local-path-provisioner-85494db59d-4c6rm            1/1     Running   0          35m
tkg-system           kapp-controller-779d9777dc-8c5lx                   1/1     Running   0          35m

利用可能なパッケージを確認する

tanzu package available list
/ Retrieving available packages...
  NAME                                                 DISPLAY-NAME            SHORT-DESCRIPTION                                                                                                                                          LATEST-VERSION
  cartographer.community.tanzu.vmware.com              Cartographer            Kubernetes native Supply Chain Choreographer.                                                                                                              0.2.2
  cert-injection-webhook.community.tanzu.vmware.com    cert-injection-webhook  The Cert Injection Webhook injects CA certificates and proxy environment variables into pods                                                               0.1.0
  cert-manager.community.tanzu.vmware.com              cert-manager            Certificate management                                                                                                                                     1.6.1
  contour.community.tanzu.vmware.com                   contour                 An ingress controller                                                                                                                                      1.20.1
  external-dns.community.tanzu.vmware.com              external-dns            This package provides DNS synchronization functionality.                                                                                                   0.10.0
  fluent-bit.community.tanzu.vmware.com                fluent-bit              Fluent Bit is a fast Log Processor and Forwarder                                                                                                           1.7.5
  fluxcd-source-controller.community.tanzu.vmware.com  Flux Source Controller  The source-controller is a Kubernetes operator, specialised in artifacts acquisition from external sources such as Git, Helm repositories and S3 buckets.  0.21.2
  gatekeeper.community.tanzu.vmware.com                gatekeeper              policy management                                                                                                                                          3.7.0
  grafana.community.tanzu.vmware.com                   grafana                 Visualization and analytics software                                                                                                                       7.5.7-1
  harbor.community.tanzu.vmware.com                    harbor                  OCI Registry                                                                                                                                               2.3.3
  knative-serving.community.tanzu.vmware.com           knative-serving         Knative Serving builds on Kubernetes to support deploying and serving of applications and functions as serverless containers                               1.0.0
  kpack.community.tanzu.vmware.com                     kpack                   kpack builds application source code into OCI compliant images using Cloud Native Buildpacks                                                               0.5.1
  local-path-storage.community.tanzu.vmware.com        local-path-storage      This package provides local path node storage and primarily supports RWO AccessMode.                                                                       0.0.20
  multus-cni.community.tanzu.vmware.com                multus-cni              This package provides the ability for enabling attaching multiple network interfaces to pods in Kubernetes                                                 3.7.1
  prometheus.community.tanzu.vmware.com                prometheus              A time series database for your metrics                                                                                                                    2.27.0-1
  velero.community.tanzu.vmware.com                    velero                  Disaster recovery capabilities                                                                                                                             1.8.0
  whereabouts.community.tanzu.vmware.com               whereabouts             A CNI IPAM plugin that assigns IP addresses cluster-wide                                                                                                   0.5.0

docker psでどのようなPodが動いているか確認。Kindを使っているようである。

  docker ps
CONTAINER ID   IMAGE                                           COMMAND                  CREATED          STATUS          PORTS                       NAMES
d94f1196928b   projects.registry.vmware.com/tce/kind:v1.22.4   "/usr/local/bin/entr…"   38 minutes ago   Up 37 minutes   127.0.0.1:43171->6443/tcp   tanzu-test-control-plane

GUIでクラスタを作成する(Managed Cluster)

先程のGUIコンソールからDockerを選び、管理クラスタを作成する

Tanzu 管理クラスタ UI

次の画面でクラスタの名前、CNIのCIDRの設定を実施する

クラスタ名とCNIの設定画面

次の画面で入力した設定が正しいか確認する

クラスタ名とCNIの設定確認

クラスタ作成時のログが次の画面で表示される

クラスタの作成ログ

管理クラスタの作成が完了すると下記のように表示される

管理クラスタ作成

管理クラスタを正常に作成できたか確認する。

tanzu management-cluster get
  NAME         NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES       PLAN
  mng-cluster  tkg-system  running  1/1           1/1      v1.22.5+vmware.1  management  dev


Details:

NAME                                                            READY  SEVERITY  REASON  SINCE  MESSAGE
/mng-cluster                                                    True                     13m
├─ClusterInfrastructure - DockerCluster/mng-cluster             True                     13m
├─ControlPlane - KubeadmControlPlane/mng-cluster-control-plane  True                     13m
│ └─Machine/mng-cluster-control-plane-bzl5t                     True                     13m
└─Workers
  └─MachineDeployment/mng-cluster-md-0                          True                     13m
    └─Machine/mng-cluster-md-0-6cf74db48c-6ht9t                 True                     13m


Providers:

  NAMESPACE                          NAME                   TYPE                    PROVIDERNAME  VERSION  WATCHNAMESPACE
  capd-system                        infrastructure-docker  InfrastructureProvider  docker        v1.0.1
  capi-kubeadm-bootstrap-system      bootstrap-kubeadm      BootstrapProvider       kubeadm       v1.0.1
  capi-kubeadm-control-plane-system  control-plane-kubeadm  ControlPlaneProvider    kubeadm       v1.0.1
  capi-system                        cluster-api            CoreProvider            cluster-api   v1.0.1

管理クラスタに疎通するためのkubeconfigを下記のコマンドで確認する

tanzu management-cluster kubeconfig get mng-cluster --admin

Credentials of cluster 'mng-cluster' have been saved
You can now access the cluster by running 'kubectl config use-context mng-cluster-admin@mng-cluster'

指示通り下記のコマンドを実行する

kubectl config use-context mng-cluster-admin@mng-cluster
Switched to context "mng-cluster-admin@mng-cluster".

管理クラスタ上で動作するPodを確認する


kubectl get po -A
NAMESPACE                           NAME                                                             READY   STATUS              RESTARTS   AGE
capd-system                         capd-controller-manager-86b587cf4b-8sd9d                         1/1     Running             0          26m
capi-kubeadm-bootstrap-system       capi-kubeadm-bootstrap-controller-manager-7ffb6dc8fc-f9482       1/1     Running             0          26m
capi-kubeadm-control-plane-system   capi-kubeadm-control-plane-controller-manager-667999fdb8-lxzw9   1/1     Running             0          26m
capi-system                         capi-controller-manager-65c5769c4c-pf7k4                         1/1     Running             0          26m
cert-manager                        cert-manager-cainjector-cc485fcdc-x88cn                          1/1     Running             0          29m
cert-manager                        cert-manager-d6b468546-rtfxv                                     1/1     Running             0          29m
cert-manager                        cert-manager-webhook-dd697458d-tpdrh                             1/1     Running             0          29m
kube-system                         antrea-agent-sjlh8                                               2/2     Running             0          25m
kube-system                         antrea-agent-xxcjj                                               2/2     Running             0          24m
kube-system                         antrea-controller-648f8c54bc-d7jvc                               1/1     Running             0          25m
kube-system                         coredns-6765cf8944-gqrgj                                         1/1     Running             0          29m
kube-system                         coredns-6765cf8944-rvffc                                         1/1     Running             0          29m
kube-system                         etcd-mng-cluster-control-plane-bzl5t                             1/1     Running             0          30m
kube-system                         kube-apiserver-mng-cluster-control-plane-bzl5t                   1/1     Running             0          30m
kube-system                         kube-controller-manager-mng-cluster-control-plane-bzl5t          1/1     Running             0          30m
kube-system                         kube-proxy-hjk2b                                                 1/1     Running             0          29m
kube-system                         kube-proxy-tsvfp                                                 1/1     Running             0          29m
kube-system                         kube-scheduler-mng-cluster-control-plane-bzl5t                   1/1     Running             0          30m
kube-system                         metrics-server-747466f474-jd7j8                                  1/1     Running             0          25m
tanzu-system                        secretgen-controller-6ff4b6b97f-ssc9d                            1/1     Running             0          25m
tkg-system                          kapp-controller-5dcd4cdcd8-9hbbd                                 1/1     Running             0          27m
tkg-system                          tanzu-addons-controller-manager-8d88f6578-dhxcx                  1/1     Running             0          26m
tkg-system                          tanzu-capabilities-controller-manager-6865b9fdbb-57gpd           1/1     Running             0          28m
tkg-system                          tanzu-featuregates-controller-manager-7979574447-lgksn           0/1     ContainerCreating   0          25m
tkr-system                          tkr-controller-manager-6c8bcddf48-75gf9                          1/1     Running             0          29m

CLIでManagement ClusterからWorkload Clusterを作成する

workload-clusterという名前のクラスタを、下記のコマンドで作成する

tanzu cluster create workload-cluster --plan dev

クラスタが作成できたら、下記のコマンドで確認する。workload-clusterが正常に表示されていることがわかる。

tanzu cluster list
  NAME              NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   PLAN
  workload-cluster  default    running  1/1           1/1      v1.22.5+vmware.1  <none>  dev

Workload Clusterのkubeconfigを取得する。

tanzu cluster kubeconfig get workload-cluster --admin
Credentials of cluster 'workload-cluster' have been saved
You can now access the cluster by running 'kubectl config use-context workload-cluster-admin@workload-cluster'

指示に従い、下記コマンドを実行する

kubectl config use-context workload-cluster-admin@workload-cluster

どのようなPodWorkload clusterで動作しているのか確認してみる

kubectl get pods --all-namespaces
NAMESPACE      NAME                                                           READY   STATUS    RESTARTS   AGE
kube-system    antrea-agent-jkk99                                             2/2     Running   0          4m11s
kube-system    antrea-agent-zzhd6                                             2/2     Running   0          4m11s
kube-system    antrea-controller-75bdc46c56-d7s9h                             1/1     Running   0          4m11s
kube-system    coredns-6765cf8944-g7srj                                       1/1     Running   0          5m6s
kube-system    coredns-6765cf8944-pdz2n                                       1/1     Running   0          5m6s
kube-system    etcd-workload-cluster-control-plane-ccvz8                      1/1     Running   0          5m8s
kube-system    kube-apiserver-workload-cluster-control-plane-ccvz8            1/1     Running   0          5m8s
kube-system    kube-controller-manager-workload-cluster-control-plane-ccvz8   1/1     Running   0          5m8s
kube-system    kube-proxy-8n44x                                               1/1     Running   0          4m36s
kube-system    kube-proxy-kfjns                                               1/1     Running   0          5m6s
kube-system    kube-scheduler-workload-cluster-control-plane-ccvz8            1/1     Running   0          5m8s
kube-system    metrics-server-84fcdcb464-j4pw2                                1/1     Running   0          4m17s
tanzu-system   secretgen-controller-5497d6cd98-9f8zf                          1/1     Running   0          4m18s
tkg-system     kapp-controller-74c67946c7-vb6q5                               1/1     Running   0          5m6s
tkg-system     tanzu-capabilities-controller-manager-6865b9fdbb-vhds7         1/1     Running   0          5m6s

最後に

本記事では、GUIでManagement Clusterを作成し、その後Worklaod Clusterを作成するまでの流れを試した。 本記事が参考になれば嬉しい。

参考サイト