Tanzu Community Editionがリリースされたのだが、まだ誰もvSphereに展開した記録を書いていなそうなので、書いてみた。
というか、今時の記事って、結構端折って書いてあるので、知らないと途中で遭難というのが結構多いような。。。自分も人のことは言えないけど(汗)
全体の流れ
インストール用の環境を用意。
気にしなければ、今使っている端末でOK。
インストール様の端末からマネージメントクラスタをvCenter配下に立てる
vSphereは、メモリがふんだんにあれば、1ESX/Local DataStore/1NICで、ポートグループ環境で立てられる。つまりNUCで全然余裕
マネージメントクラスタからワークロードクラスタを立てる
ワークロードクラスタが俗に言うKubernetesクラスタ
インストール用の環境の環境要件
自分は、LinuxのVMで構築した。もちろんXwindowなどは入っていない。
Ubuntu Server 20.04.3のプレーン環境で作成
2CPU
6 GB RAM (Windowsの場合は+2GB)
16GB HDD(ギリギリ)
NIC1つ。
Dockerとhomebrewとkubectlが事前に必要
Xwindowは要らない。ブラウザでアクセスするので。
以下あとで整形するのでまだみにくい。。
以下が具体的な作業の流れ
インストール用の環境での作業
UbuntuのDocker (apt/Snap)は制限事項が多いのでmirantisのDockerを利用
“`
sudo -i
#Dockerのインストール
apt -y upgrade
apt -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
apt-key fingerprint 0EBFCD88
add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
apt -y install docker-ce-cli docker-ce
groupadd docker
usermod -g docker <一般ユーザアカウント>
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
#Kubectlコマンドのインストール
apt update
apt -y install apt-transport-https gnupg2 curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
apt update
KUBECTLVER=1.21.5-00
apt -y install -qy kubectl=${KUBECTLVER}
apt-mark hold kubectl
kubectl completion bash >/etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubectl
echo ‘export KUBE_EDITOR=vi’ >>~/.bashrc
#Homebrewで必要となる追加パッケージのインストール
apt -y install build-essential
#NTPサーバの設定
apt -y install ntp
sed -i -e “s/0.ubuntu.pool.ntp.org/192.168.8.1/g” /etc/ntp.conf
sed -i -e “s/pool 1.ubuntu/#pool 1.ubuntu/g” /etc/ntp.conf
sed -i -e “s/pool 2.ubuntu/#pool 2.ubuntu/g” /etc/ntp.conf
sed -i -e “s/pool 3.ubuntu/#pool 3.ubuntu/g” /etc/ntp.conf
sed -i -e “s/pool ntp.ubuntu.com/pool ntp.nict.jp iburst/g” /etc/ntp.conf
systemctl restart ntp
ntpq -p
apt clean
exit
“`
一旦ログアウト
一般ユーザでログイン
rootだと動かない
“`
#Dockerが一般ユーザで動くことを確認
docker ps
#Homebrewのインストール
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
echo ‘eval “$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)”‘ >> ~/.profile
eval “$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)”
brew doctor
brew install gcc
#Tanzu CLIのインストール
brew tap vmware-tanzu/tanzu
brew install tanzu-community-edition
/home/linuxbrew/.linuxbrew/Cellar/tanzu-community-edition/v0.9.1/libexec/configure-tce.sh
tanzu completion bash > tanzu
sudo mv tanzu /etc/bash_completion.d/
#証明書鍵(パスフレーズ無し)の作成
ssh-keygen -f ~/.ssh/id_rsa -t rsa -N “” -C “hogehoge@gmail.com”
cat ~/.ssh/id_rsa.pub
#Management clusterを作成 (192.168.16.223は自IP)
tanzu management-cluster create -b 192.168.16.230:8080 -u –browser=none
“`
Serving kickstart UI at http://192.168.16.230:8080が表示されたら、ブラウザで http://192.168.16.223:8080を開く
vSphereを選択した場合
https://tanzucommunityedition.io/docs/latest/vsphere-intro/
リソース
仮想マシンのリソースはvCenter抜きで32GBくらい必要
よって、ESXの台数はともかく合計64GBくらいは欲しい
ESXを複数台にしてしまった場合は、共有ストレージが必要となる。
64GBメモリを積んだNUCなら1台で構築可能
vSphereバージョン
vSphere 6.7以上らしいが、7.0U3の方がいいかも。
Cluster
クラスタであればよい。DRSやHAは要らないと思われる。
ネットワーク
ポートグループ1つで構わない。(分散仮想スイッチである必要はない。)
接続するポートグループにDHCPが必要 IPアドレスは、マネージメントクラスタで1つ、ワークロードクラスタ1つにつき1つ。DHCPのスコープ外のものが必要
VMフォルダ
tceというフォルダをつくる
その他作業
NTPが必要
photon-3-kube-v1.21.2+vmware.1-tkg.2-12816990095845873721.ovaをインポートしておく
VMware vSphereを選択
vCenterの情報を入力して、SSHの公開キーを貼り付ける
DevelopmentかProductionのいずれかを選択。違いは、controllerノードが1つできるのがDevelopment、3つできるのがProduction。
テストならDevelopmentで十分
マネージメントクラスタの名前を入れる。このマネージメントクラスタは、k8sを作るためのクラスタ。Kindクラスタで例えるならKINDコマンドに相当する部分。
使う?k8sは、このウィザードが完了したあとにコマンドラインで行う。
NSX Advanced Loadbalancerを使わないのでkube-vipを選択。これを選択すると俗に言うLoad Balancerは、metallbなど自分で立てる必要がある。
ノードのCPU、メモリサイズを指定する。ここはあまりケチらないほうがいいかも。たくさんデプロイするとリソースが足りなくなる。
まぁ、足りない場合は、Workerノードを増設すればいいのだが。
CONTROL PLANE ENDPOINTは、マネージメントクラスタのコンテナのエンドポイントIP、DHCPのスコープ外である必要がある。IPアドレスは、そのあと指定するポートグループに依存する。
NSX Advanced Load Balancerはつかはないので入力せずに、Next
Metadata は今回使わないのでそのままNext
デプロイするフォルダ、クラスタ、ESX、データストアを指定する。
複数ESXを使う必要がある場合は、共有データストアが必要になるのは言うまでもない。
接続するネットワークを指定。このネットワークが外部との通信をするネットワークになる。
このネットワークにはDHCPサーバでIPアドレスが振られることが前提
Clusterネットワークは、内部ネットワークなので、そのまま触らない。
外部認証も今回は使わないのでそのまま
インポートしたTanzuのイメージを指定
ここも利用しないのでスキップ
これでデプロイ開始
デプロイにはしばしかかる。記憶がないけど15分もかからなかったような。
以下がコンソールに表示されるメッセージ。
デプロイが終わるとコンソールにプロンプトが返ってくる。もうブラウザ画面は使わないので閉じていい。
“`
web socket connection established
sending pending 0 logs to UI
Identity Provider not configured. Some authentication features won’t work.
Validating configuration…
Using infrastructure provider vsphere:v0.7.10
Generating cluster configuration…
web socket connection established
sending pending 0 logs to UI
Setting up bootstrapper…
Bootstrapper created. Kubeconfig: /home/tmase/.kube-tkg/tmp/config_lrMwAJQ6
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-vsphere” Version=”v0.7.10″ TargetNamespace=”capv-system”
Start creating management cluster…
Saving management cluster kubeconfig into /home/tmase/.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-vsphere” Version=”v0.7.10″ TargetNamespace=”capv-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…
Context set for management cluster tkg-management as ‘tkg-management-admin@tkg-management’.
Management cluster created!
You can now create your first workload cluster by running the following:
tanzu cluster create [name] -f [file]
“`
ワークロードクラスタの構成
このワークロードクラスタが、俗に言う使うコンテナクラスタとなる。マネージメントクラスタの設定ファイルをコピーして使う
“`
cd ~/.config/tanzu/tkg/clusterconfigs
cp *.yaml workload1.yaml
vi workload1.yaml
“`
https://tanzucommunityedition.io/docs/latest/workload-clusters/
少なくとも以下を変更する。ワークロードクラスタ名と、エンドポイントIP、あとワーカーの数を指定する。
CLUSTER_NAME: tkg-workload1
VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.12.11
以下を追加する
WORKER_MACHINE_COUNT: “3”
ワーカークラスターの作成開始
ワーカクラスタは、コマンドラインで何回でも削除、作成ができるので便利
“`
tanzu cluster create –file workload1.yaml
“`
以下が作成時のメッセージ
“`
Validating configuration…
Warning: Pinniped configuration not found. Skipping pinniped configuration in workload cluster. Please refer to the documentation to check if you can configure pinniped on workload cluster manually
Creating workload cluster ‘tkg-workload1’…
Waiting for cluster to be initialized…
Waiting for cluster nodes to be available…
Waiting for addons installation…
Waiting for packages to be up and running…
Workload cluster ‘tkg-workload1’ created
“`
完成するとこんな感じになる。
以下でワーカークラスタの情報を追加する。
“`
cd
tanzu cluster get tkg-workload1
tanzu cluster kubeconfig get tkg-workload1 –admin
“`
以下でアクセスが可能となる。
“`
kubectl config use-context tkg-workload1-admin@tkg-workload1
“`
もうこれで、普通のKubernetesと同じ。
あとは、適当に立てるのだが、差し当たって、loadbalancerとかはないので、metallbとかを展開する。(一般的な方法で立てられるので割愛)
ダッシュボードは、kubernetes純正のダッシュボードでもいいが、octanを立てると簡単にダッシュボードが表示できる。
https://github.com/vmware-tanzu/octant
kindやvelero、 helmのプラグインもある。入れてみた。
vSpheeに展開するとvSphere CSIプラグインが使えてFCDが見えるのが面白い。