ニフクラ上の Docker ホストへ VMware Tanzu Community Edition(TCE) のマネージドクラスタを構築してみた(V0.9.1)

この記事は 富士通クラウドテクノロジーズ Advent Calendar 2021 19日目の記事を兼ねています。

18日目は @miyuush さんの ニフクラのTerraform Providerでメタ引数や式を使ってみる でした!
ニフクラ向けの Terraform NIFCLOUD Provider は自分も便利に使わせてもらっていますが、紹介のあったメタ引数を使いこなす事で、複数台構成時によりシンプルに表現出来そうですね。自分も活用していきます。

さて、最近 VMware 製品と戯れられていないので、今回はアドベントカレンダーも兼ねて、 VMware Tanzu Community Edition(TCE) を用いて Managed Clusters を ニフクラ上の単一サーバーの Docker ホスト上へ構築してみます。

完成イメージ
file

VMware Tanzu Community Edition(TCE) とは

紹介ブログ Introducing VMware Tanzu Community Edition によると、VMware Tanzu Community Editionは、下記の様に Kubernetes(k8s) 活用に必要な機能を一通り網羅して提供するディストリビューションです。
これまで VMware Tanzu の 実行環境(Run) として k8s を試すには有償版の Tanzu Kubernetes Grid(TKG) や vSphere with Tanzu を購入するか無かったのですが遂に無償で、一通りの機能が使える様になってのは素晴らしいですね。
(まさにHomeLab環境の為に作られた様なw)

以前、 VMware Tanzu Community Edition を用いて Standalone Clusters を Docker 方式で仮想マシン上に構築してみた で少しだけ触ってたのですが、非常に簡単に k8s 環境構築する事が出来、 k8s 自体や k8s 上でのアプリ開発・運用を学ぶツールとしてはうってつけだと思います。

環境

設定対象 (2021/12/12時点で最新)

  • Ubuntu 20.04.2 LTS
    • ニフクラ上で作成した仮想マシン
    • 記事中、割り当てされたグローバル IP アドレスを ***.***.***.*** と表記
  • VMware Tanzu Community Edition V0.9.1
  • Docker version 20.10.11, build dea9396
  • kubectl
    • Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
    • Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2+vmware.1-360497810732255795", GitCommit:"82192fc841dd268ff5d519057b09607985a46451", GitTreeState:"clean", BuildDate:"2021-06-22T23:55:31Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

操作元

  • Windows 10
  • RLogin 2.26

準備

ニフクラ上でサーバー作成

今回は、アドベントカレンダーも兼ねて、設置する Docker ホストを ニフクラ で構築していきます。
ただ、ローカルホストの仮想マシンで実施する場合も特段違いは無いと思います。

事前にファイアウォール設定を作成する

  • インターネットへ公開されている環境ですので、ファイアウォールの設定はしっかり設定
  • 自宅IPアドレスからの接続の場合のみ Any で通信を許可する設定を投入
    • 現在の自宅IPアドレスが分からなくても、設定時にコントロールパネルが、接続元IPアドレスを認識して、自動的に入力してくれる補助機能が便利です
      file

サーバー作成

ドキュメントによると、 Bootstrap 時と Docker ホストとしての利用時の推奨構成は下記の通り

  • Bootstrap 時:Linux Local Bootstrap Machine Prerequisites
    • Arch: x86; ARM is currently unsupported
    • CPU: 2
    • RAM: 6 GB
  • Docker ホストとして利用時:Create Local Docker Clusters Prerequisites
    • 4 CPUs
    • 6 GB of RAM
    • 15 GB of local machine disk storage for images

今回は、両用途を1台で完結させたいため、ニフクラの下記サーバータイプ(スペック)を利用

  • サーバータイプ:e-large8
    • OS: Ubuntu Server 20.04 LTS x86_64
    • vCPU: 4
    • RAM: 8GB
    • Disk: 30GB

サーバー作成

  • Ubuntu Server 20.04 LTS x86_64 選択
    file
  • e-large8(4vCPU/8GB) 選択
    file
  • 途中、事前に作成したファイアウォール設定を選択してサーバー作成実行
    file

サーバーの初期設定

作成完了後にサーバーへ ssh ログイン

% ssh -p 22 -i ~/.ssh/sshkey.pem root@***.***.***.***

アップデートを適用して再起動

# apt update && apt upgrade -y
# reboot

root ユーザーのパスワードを設定

# passwd
New password: 
Retype new password: 
passwd: password updated successfully

管理用ユーザー ysaotome の追加

# useradd -G 100 -m ysaotome
# passwd ysaotome
New password: 
Retype new password: 
passwd: password updated successfully
# sed -i.org -e 's/^# Members/ysaotome    ALL\=\(ALL\:ALL\) ALL\n# Members/g' /etc/sudoers
# chsh -s /bin/bash ysaotome

管理用ユーザー ysaotome で ssh ログイン出来る様にする

# mkdir -p -m 700 /home/ysaotome/.ssh
# cp /root/.ssh/authorized_keys /home/ysaotome/.ssh/.
# chown -R ysaotome:ysaotome /home/ysaotome/.ssh
# ls -lt /home/ysaotome/.ssh/
total 4
-rw------- 1 ysaotome ysaotome 1424 Dec 18 13:38 authorized_keys

ssh 経由で root ユーザーの直接ログイン禁止設定

# sed -i.org -e 's/^PermitRootLogin .*/PermitRootLogin no/g' /etc/ssh/sshd_config
# service ssh restart

Ubuntu のFW設定を停止(ニフクラファイアウォールで担保)

# service ufw stop
# ufw disable
# ufw status
Status: inactive

管理用ユーザー ysaotome で ssh で入り直す

% ssh -p 22 -i ~/.ssh/sshkey.pem ysaotome@***.***.***.***

サーバーの Docker ホスト化

古いバージョンをアンインストール

$ sudo apt-get remove docker docker-engine docker.io containerd runc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package docker-engine

リポジトリを使用してインストール

$ sudo apt-get update
Hit:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease
Get:2 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:4 http://jp.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:5 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1,400 kB]
Get:6 http://jp.archive.ubuntu.com/ubuntu focal-updates/main Translation-en [283 kB]
Get:7 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 c-n-f Metadata [14.6 kB]
Get:8 http://jp.archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [616 kB]
Get:9 http://jp.archive.ubuntu.com/ubuntu focal-updates/restricted Translation-en [88.1 kB]
Get:10 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [884 kB]
Get:11 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe Translation-en [193 kB]
Get:12 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 c-n-f Metadata [20.0 kB]
Get:13 http://jp.archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [42.0 kB]
Get:14 http://jp.archive.ubuntu.com/ubuntu focal-backports/main Translation-en [10.0 kB]
Get:15 http://jp.archive.ubuntu.com/ubuntu focal-backports/main amd64 c-n-f Metadata [864 B]
Get:16 http://jp.archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [18.9 kB]
Get:17 http://jp.archive.ubuntu.com/ubuntu focal-backports/universe Translation-en [7,492 B]
Get:18 http://jp.archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [636 B]
Get:19 http://jp.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [1,069 kB]
Get:20 http://jp.archive.ubuntu.com/ubuntu focal-security/main Translation-en [197 kB]
Get:21 http://jp.archive.ubuntu.com/ubuntu focal-security/main amd64 c-n-f Metadata [9,096 B]
Get:22 http://jp.archive.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [566 kB]
Get:23 http://jp.archive.ubuntu.com/ubuntu focal-security/restricted Translation-en [80.9 kB]
Get:24 http://jp.archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [668 kB]
Get:25 http://jp.archive.ubuntu.com/ubuntu focal-security/universe Translation-en [112 kB]
Get:26 http://jp.archive.ubuntu.com/ubuntu focal-security/universe amd64 c-n-f Metadata [13.0 kB]
Fetched 6,628 kB in 1s (5,969 kB/s)                                
Reading package lists... Done
$ 
$ sudo apt-get install \
>     ca-certificates \
>     curl \
>     gnupg \
>     lsb-release
Reading package lists... Done
Building dependency tree       
Reading state information... Done
lsb-release is already the newest version (11.1.0ubuntu2).
lsb-release set to manually installed.
ca-certificates is already the newest version (20210119~20.04.2).
ca-certificates set to manually installed.
curl is already the newest version (7.68.0-1ubuntu2.7).
curl set to manually installed.
gnupg is already the newest version (2.2.19-3ubuntu2.1).
gnupg set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

Dockerの公式GPGキーを追加

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

リポジトリ追加

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

DockerEngineをインストール

$  sudo apt-get update
Hit:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease
Get:2 https://download.docker.com/linux/ubuntu focal InRelease [57.7 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:4 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Get:5 http://jp.archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:6 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages [13.5 kB]
Fetched 407 kB in 0s (1,120 kB/s)  
Reading package lists... Done
$ 
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  docker-ce-rootless-extras docker-scan-plugin pigz slirp4netns
Suggested packages:
  aufs-tools cgroupfs-mount | cgroup-lite
The following NEW packages will be installed:
  containerd.io docker-ce docker-ce-cli docker-ce-rootless-extras docker-scan-plugin pigz slirp4netns
0 upgraded, 7 newly installed, 0 to remove and 8 not upgraded.
Need to get 97.2 MB of archives.
After this operation, 409 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 pigz amd64 2.4-1 [57.4 kB]
Get:2 https://download.docker.com/linux/ubuntu focal/stable amd64 containerd.io amd64 1.4.12-1 [23.7 MB]
Get:3 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 slirp4netns amd64 0.4.3-1 [74.3 kB]
Get:4 https://download.docker.com/linux/ubuntu focal/stable amd64 docker-ce-cli amd64 5:20.10.12~3-0~ubuntu-focal [40.7 MB]
Get:5 https://download.docker.com/linux/ubuntu focal/stable amd64 docker-ce amd64 5:20.10.12~3-0~ubuntu-focal [21.2 MB]
Get:6 https://download.docker.com/linux/ubuntu focal/stable amd64 docker-ce-rootless-extras amd64 5:20.10.12~3-0~ubuntu-focal [7,921 kB]
Get:7 https://download.docker.com/linux/ubuntu focal/stable amd64 docker-scan-plugin amd64 0.12.0~ubuntu-focal [3,518 kB]
Fetched 97.2 MB in 1s (92.6 MB/s)             
Selecting previously unselected package pigz.
(Reading database ... 108011 files and directories currently installed.)
Preparing to unpack .../0-pigz_2.4-1_amd64.deb ...
Unpacking pigz (2.4-1) ...
Selecting previously unselected package containerd.io.
Preparing to unpack .../1-containerd.io_1.4.12-1_amd64.deb ...
Unpacking containerd.io (1.4.12-1) ...
Selecting previously unselected package docker-ce-cli.
Preparing to unpack .../2-docker-ce-cli_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb ...
Unpacking docker-ce-cli (5:20.10.12~3-0~ubuntu-focal) ...
Selecting previously unselected package docker-ce.
Preparing to unpack .../3-docker-ce_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb ...
Unpacking docker-ce (5:20.10.12~3-0~ubuntu-focal) ...
Selecting previously unselected package docker-ce-rootless-extras.
Preparing to unpack .../4-docker-ce-rootless-extras_5%3a20.10.12~3-0~ubuntu-focal_amd64.deb ...
Unpacking docker-ce-rootless-extras (5:20.10.12~3-0~ubuntu-focal) ...
Selecting previously unselected package docker-scan-plugin.
Preparing to unpack .../5-docker-scan-plugin_0.12.0~ubuntu-focal_amd64.deb ...
Unpacking docker-scan-plugin (0.12.0~ubuntu-focal) ...
Selecting previously unselected package slirp4netns.
Preparing to unpack .../6-slirp4netns_0.4.3-1_amd64.deb ...
Unpacking slirp4netns (0.4.3-1) ...
Setting up slirp4netns (0.4.3-1) ...
Setting up docker-scan-plugin (0.12.0~ubuntu-focal) ...
Setting up containerd.io (1.4.12-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
Setting up docker-ce-cli (5:20.10.12~3-0~ubuntu-focal) ...
Setting up pigz (2.4-1) ...
Setting up docker-ce-rootless-extras (5:20.10.12~3-0~ubuntu-focal) ...
Setting up docker-ce (5:20.10.12~3-0~ubuntu-focal) ...
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.13) ...

インストールされた Docker を確認

$ docker --version
Docker version 20.10.12, build e91ed57

利用ユーザーとして、管理ユーザー ysaotome を追加

$ sudo groupadd docker
$ sudo usermod -aG docker ysaotome
$ newgrp docker 
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ここまでで Bootstrap 実行前準備まで完了。

VMware Tanzu Community Edition(TCE) セットアップ

基本的には公式ドキュメントを確認して手順に沿って実施しています。

Bootstrap マシンとしてのセットアップ

cgroup の状態を確認

$ docker info | grep -i cgroup 
WARNING: No swap limit support
 Cgroup Driver: cgroupfs
 Cgroup Version: 1

Cgroup Version: 1 を使っているので問題無し

jq のインストール

このあとの手順で利用するので、 JSON を扱うためのコマンド jq をインストール

$ sudo apt install jq
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libjq1 libonig5
The following NEW packages will be installed:
  jq libjq1 libonig5
0 upgraded, 3 newly installed, 0 to remove and 8 not upgraded.
Need to get 313 kB of archives.
After this operation, 1,062 kB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 libonig5 amd64 6.9.4-1 [142 kB]
Get:2 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 libjq1 amd64 1.6-1ubuntu0.20.04.1 [121 kB]
Get:3 http://jp.archive.ubuntu.com/ubuntu focal-updates/universe amd64 jq amd64 1.6-1ubuntu0.20.04.1 [50.2 kB]
Fetched 313 kB in 0s (2,562 kB/s)
Selecting previously unselected package libonig5:amd64.
(Reading database ... 108262 files and directories currently installed.)
Preparing to unpack .../libonig5_6.9.4-1_amd64.deb ...
Unpacking libonig5:amd64 (6.9.4-1) ...
Selecting previously unselected package libjq1:amd64.
Preparing to unpack .../libjq1_1.6-1ubuntu0.20.04.1_amd64.deb ...
Unpacking libjq1:amd64 (1.6-1ubuntu0.20.04.1) ...
Selecting previously unselected package jq.
Preparing to unpack .../jq_1.6-1ubuntu0.20.04.1_amd64.deb ...
Unpacking jq (1.6-1ubuntu0.20.04.1) ...
Setting up libonig5:amd64 (6.9.4-1) ...
Setting up libjq1:amd64 (1.6-1ubuntu0.20.04.1) ...
Setting up jq (1.6-1ubuntu0.20.04.1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

VMware Tanzu Community Edition(TCE) をインストール

GitHub のプロジェクトサイトのリリース一覧 から最新の安定版 latest を探す
最新 latestRelease v0.9.1 Latest である事を確認

V0.9.1 を指定してダウンロード

$ curl -H "Accept: application/vnd.github.v3.raw" \
    -L https://api.github.com/repos/vmware-tanzu/community-edition/contents/hack/get-tce-release.sh | \
    bash -s v0.9.1 linux

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2096  100  2096    0     0   9034      0 --:--:-- --:--:-- --:--:--  9034
Validating dependencies ...
curl is /usr/bin/curl
grep is /usr/bin/grep
sed is /usr/bin/sed
tr is /usr/bin/tr
jq is /usr/bin/jq
Warning: No GITHUB_TOKEN variable defined - requests to the GitHub API may be rate limited
Downloading asset ...
######################################################################## 100.0%curl: Saved to filename 'tce-linux-amd64-v0.9.1.tar.gz'

解凍

$ tar vzxf tce-linux-amd64-v0.9.1.tar.gz tce-linux-amd64-v0.9.1/
tce-linux-amd64-v0.9.1/
tce-linux-amd64-v0.9.1/bin/
tce-linux-amd64-v0.9.1/bin/tanzu
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-cluster
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-kubernetes-release
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-login
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-package
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-pinniped-auth
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-management-cluster
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-builder
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-standalone-cluster
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-conformance
tce-linux-amd64-v0.9.1/bin/tanzu-plugin-diagnostics
tce-linux-amd64-v0.9.1/install.sh
tce-linux-amd64-v0.9.1/uninstall.sh

インストール実行

$ cd tce-linux-amd64-v0.9.1
$ ./install.sh
+ ALLOW_INSTALL_AS_ROOT=
+ [[ 1000 -eq 0 ]]
+++ dirname ./install.sh
++ cd .
++ pwd
+ MY_DIR=/home/ysaotome/tce-linux-amd64-v0.9.1
++ uname
+ BUILD_OS=Linux
+ case "${BUILD_OS}" in
+ XDG_DATA_HOME=/home/ysaotome/.local/share
+ echo /home/ysaotome/.local/share
/home/ysaotome/.local/share
++ command -v tanzu
+ TANZU_BIN_PATH=
+ [[ -n '' ]]
+ TANZU_BIN_PATH=/usr/local/bin
+ [[ :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: == *\:\/\h\o\m\e\/\y\s\a\o\t\o\m\e\/\b\i\n\:* ]]
+ echo Installing tanzu cli to /usr/local/bin
Installing tanzu cli to /usr/local/bin
+ sudo install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu /usr/local/bin
+ mkdir -p /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-builder /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-cluster /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-conformance /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-diagnostics /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-kubernetes-release /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-login /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-management-cluster /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-package /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-pinniped-auth /home/ysaotome/.local/share/tanzu-cli
+ for plugin in "${MY_DIR}"/bin/tanzu-plugin*
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/bin/tanzu-plugin-standalone-cluster /home/ysaotome/.local/share/tanzu-cli
+ mkdir -p /home/ysaotome/.local/share/tce
+ install /home/ysaotome/tce-linux-amd64-v0.9.1/uninstall.sh /home/ysaotome/.local/share/tce
+ TANZU_PLUGIN_CACHE=/home/ysaotome/.cache/tanzu/catalog.yaml
+ [[ -n /home/ysaotome/.cache/tanzu/catalog.yaml ]]
+ echo 'Removing old plugin cache from /home/ysaotome/.cache/tanzu/catalog.yaml'
Removing old plugin cache from /home/ysaotome/.cache/tanzu/catalog.yaml
+ rm -f /home/ysaotome/.cache/tanzu/catalog.yaml
+ tanzu init
| initializing ✔  successfully initialized CLI 
++ tanzu plugin repo list
++ grep tce
+ TCE_REPO=
+ [[ -z '' ]]
+ tanzu plugin repo add --name tce --gcp-bucket-name tce-tanzu-cli-plugins --gcp-root-path artifacts
++ tanzu plugin repo list
++ grep core-admin
+ TCE_REPO=
+ [[ -z '' ]]
+ tanzu plugin repo add --name core-admin --gcp-bucket-name tce-tanzu-cli-framework-admin --gcp-root-path artifacts-admin
+ echo 'Installation complete!'
Installation complete!

インストール確認

$ tanzu version
version: v0.2.1
buildDate: 2021-09-29
sha: ceaa474

kubectl をインストール

ダウンロードして設置

$ curl -LO https://dl.k8s.io/release/v1.20.1/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   154  100   154    0     0    690      0 --:--:-- --:--:-- --:--:--   690
100 38.3M  100 38.3M    0     0  25.6M      0  0:00:01  0:00:01 --:--:-- 64.3M
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

インストール確認

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

Managed Cluster でセットアップ

Tanzu Community Edition installer interface (GUI) を使ってセットアップ

ssh から GUI を起動
***.***.***.*** 部分はサーバーに割り当てられたIPアドレス

$ tanzu management-cluster create --ui --browser none --bind ***.***.***.***:8080
Downloading TKG compatibility file from 'projects.registry.vmware.com/tkg/framework-zshippable/tkg-compatibility'
Downloading the TKG Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkg-bom:v1.4.0'
Downloading the TKr Bill of Materials (BOM) file from 'projects.registry.vmware.com/tkg/tkr-bom:v1.21.2_vmware.1-tkg.1'
ERROR 2021/12/18 14:34:01 svType != tvType; key=release, st=map[string]interface {}, tt=<nil>, sv=map[version:], tv=<nil>

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

ブラウザからサーバーに割り当てられたIPアドレスの 8080 ポートへアクセス(http://***.***.***.***:8080 をブラウザで開く)し、 Docker メニューの DEPLOY をクリック
file

GUI で Deploy Management Cluster on Docker を実行して Manager Cluster をセットアップ

ブラウザ上で操作

Docker Daemon Validate the local Docker daemon で Docker が動作している事がチェックされている事を確認して NEXT をクリック
file

Management Cluster Settings Optional: Specify the management cluster nameMANAGEMENT CLUSTER NAME (OPTIONAL) に適当な名前 tce-mngmt を入力し、 NEXT をクリック
MANAGEMENT CLUSTER NAME は、 RFC1123 準拠で、かつ、末尾を数字で終わる事が出来ないので注意
file

Kubernetes Network Cluster Pod CIDR: 100.96.0.0/11 の内容を確認して(基本はデフォルトで良いと思う)、 NEXT をクリック
file

REVIEW CONFIGURATION をクリック
file

内容を確認して DEPLOY MANAGEMENT CLUSTER をクリック
file

GUI でセットアップの進捗が見える
file

セットアップ完了!(開始から完了まで約15分)
file

※処理中の ssh 側の出力

Identity Provider not configured. Some authentication features won't work.
Validating configuration...
Using infrastructure provider docker:v0.3.23
Generating cluster configuration...
web socket connection established
sending pending 5 logs to UI
Setting up bootstrapper...
Bootstrapper created. Kubeconfig: /home/ysaotome/.kube-tkg/tmp/config_pPAKdoVD
Installing providers on bootstrapper...
Fetching providers
Installing cert-manager Version="v1.1.0"
Waiting for cert-manager to be available...
Installing Provider="cluster-api" Version="v0.3.23" TargetNamespace="capi-system"
Installing Provider="bootstrap-kubeadm" Version="v0.3.23" TargetNamespace="capi-kubeadm-bootstrap-system"
Installing Provider="control-plane-kubeadm" Version="v0.3.23" TargetNamespace="capi-kubeadm-control-plane-system"
Installing Provider="infrastructure-docker" Version="v0.3.23" TargetNamespace="capd-system"
Start creating management cluster...
Saving management cluster kubeconfig into /home/ysaotome/.kube/config
Installing providers on management cluster...
Fetching providers
Installing cert-manager Version="v1.1.0"
Waiting for cert-manager to be available...
Installing Provider="cluster-api" Version="v0.3.23" TargetNamespace="capi-system"
Installing Provider="bootstrap-kubeadm" Version="v0.3.23" TargetNamespace="capi-kubeadm-bootstrap-system"
Installing Provider="control-plane-kubeadm" Version="v0.3.23" TargetNamespace="capi-kubeadm-control-plane-system"
Installing Provider="infrastructure-docker" Version="v0.3.23" TargetNamespace="capd-system"
Waiting for the management cluster to get ready for move...
Waiting for addons installation...
Moving all Cluster API objects from bootstrap cluster to management cluster...
Performing move...
Discovering Cluster API objects
Moving Cluster API objects Clusters=1
Creating objects in the target cluster
Deleting objects from the source cluster
Waiting for additional components to be up and running...
Waiting for packages to be up and running...
Warning: Management cluster is created successfully, but some packages are failing. Failure while waiting for packages to be installed: package reconciliation failed: kapp: Error: Timed out waiting after 30s
Context set for management cluster tce-mngmt as 'tce-mngmt-admin@tce-mngmt'.
Management cluster created!

You can now create your first workload cluster by running the following:

  tanzu cluster create [name] -f [file]

セットアップされた Managed Cluster を確認

情報を取得

$ tanzu management-cluster get

  NAME       NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES       
  tce-mngmt  tkg-system  running  1/1           1/1      v1.21.2+vmware.1  management  

Details:

NAME                                                          READY  SEVERITY  REASON  SINCE  MESSAGE
/tce-mngmt                                                    True                     15m           
├─ClusterInfrastructure - DockerCluster/tce-mngmt             True                     15m           
├─ControlPlane - KubeadmControlPlane/tce-mngmt-control-plane  True                     15m           
│ └─Machine/tce-mngmt-control-plane-hw9c5                     True                     15m           
└─Workers                                                                                            
  └─MachineDeployment/tce-mngmt-md-0                                                                 
    └─Machine/tce-mngmt-md-0-7965fdb59c-4glrl                 True                     15m           

Providers:

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

Management Clusterのアクセス権を設定

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

設定した Management Cluster の権限で kubectl からアクセス出来る事を確認

$ kubectl config use-context tce-mngmt-admin@tce-mngmt
Switched to context "tce-mngmt-admin@tce-mngmt".
$ kubectl get nodes
NAME                              STATUS   ROLES                  AGE   VERSION
tce-mngmt-control-plane-hw9c5     Ready    control-plane,master   20m   v1.21.2+vmware.1-360497810732255795
tce-mngmt-md-0-7965fdb59c-4glrl   Ready    <none>                 19m   v1.21.2+vmware.1-360497810732255795

最後に

今回は、 Managed Cluster を作成する所まで完了しました。
久しぶりに VMware 製品と戯れる事が出来ました。
次は、この作成した環境で Workload Cluster を作成し、アプリのデプロイやスケールアウトなどを試していく予定です。

明日(12/20)の 富士通クラウドテクノロジーズ Advent Calendar 2021 は、 @thuydgニフクラmBaaSの新しいSDKとなるKotlin SDKについて です。お楽しみに!

参考