bootstrapはTKGクラスタを構成に必要となる。アプライアンスとしては用意されていない為、必要なソフトウェアを個別にダウンロードして作る必要がある。必要な条件を満たせればOSはWindows、MAC、Linuxを問わないが、ここではCentOS8をベースOSとした。VMでも物理でも何でもいい。
TKGはインターネットに直接接続できない環境=プロキシ環境では、とたんに面倒になる。本稿ではプロキシ環境での手順について記述する。
ハードウェアとOSインストール
結構リソースを食うので、CPU:4Core、メモリ:8GBはあったほうがいい。ストレージ容量は後述のプロキシ環境の場合、Dockerのプライベートレジストリを作成して、必要な全コンテナイメージをローカルに持つ必要がある為、多分100GBで十分だと思う。後は普通にインストールすればいい。
OSはGUIありの環境でインストールする。マネジメントクラスタを構築する際、ブラウザベースで各設定値を入れる必要があるためだが、これはコマンドだけでも問題ない。つまり一旦ブラウザベースで生成されるコンフィグファイルをひな型とすれば、GUIは必須ではない。コマンドではそのコンフィグを引数で食わせるだけのため。
SELinux無効化
firewalld無効化
ネットワーク設定
OSのプロキシ参照設定
[root@bootstrap ~]# vim /etc/profile.d/proxy.sh
proxy_url="proxy.si1230.com:3128"
HTTP_PROXY=$proxy_url
HTTPS_PROXY=$proxy_url
FTP_PROXY=$proxy_url
http_proxy=$proxy_url
https_proxy=$proxy_url
ftp_proxy=$proxy_url
no_proxy=*.si1230.com,192.168.0.0/16
export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy no_proxy
OSアップデート
EPELリポジトリインストール
xrdpインストール
Docker
bootstrapにはDockerが必須。
Dockerインストール
こちらを参考にインストールする。
Dockerのプロキシ設定
profileのプロキシ設定は関係しないようだ。
こちらを参考にする。
Dockerレジストリ構築
こちらを参考に構築する。
Tanzu
ソフトウェアの入手
ダウンロード先:
https://customerconnect.vmware.com/en/downloads/details?downloadGroup=TKG-131&productId=988&rPId=73652
下記をダウンロード:
VMware Tanzu CLI for Linux(tanzu-cli-bundle-v1.3.1-linux-amd64.tar)
kubectl cluster cli v1.21.2 for Linux(kubectl-linux-v1.20.5-vmware.1.gz)
設定
Tanzu用ディレクトリ
どこでもよいが/tanzuとした。
[root@bootstrap ~]# mkdir /tanzu
tanzu-cli-bundle-v1.3.1-linux-amd64.tar
tanzu-cli-bundle-v1.3.1-linux-amd64.tarを/tanzuに配置、展開、インストールする。
[root@bootstrap ~]# cd /tanzu [root@bootstrap ~]# tar -xvf tanzu-cli-bundle-v1.3.1-linux-amd64.tar [root@bootstrap ~]# cd /tanzu/cli [root@bootstrap ~]# install core/v1.3.1/tanzu-core-linux_amd64 /usr/local/bin/tanzu [root@bootstrap ~]# tanzu version
Tanzu CLIプラグインのインストール
問題なければlistオプションで一覧が表示される。
[root@bootstrap ~]# tanzu plugin clean [root@bootstrap ~]# cd /tanzu [root@bootstrap ~]# tanzu plugin install --local cli all [root@bootstrap ~]# tanzu plugin list
kubectl-linux-v1.20.5-vmware.1.gz
[root@bootstrap ~]# cd /tanzu [root@bootstrap ~]# gzip -d kubectl-linux-v1.20.5-vmware.1.gz [root@bootstrap ~]# install kubectl-linux-v1.20.5-vmware.1 /usr/local/bin/kubectl
Carvel Toolsのインストール
yttのインストール
[root@bootstrap ~]# cd /tanzu/cli [root@bootstrap ~]# gunzip ytt-linux-amd64-v0.31.0+vmware.1.gz [root@bootstrap ~]# chmod ugo+x ytt-linux-amd64-v0.31.0+vmware.1 [root@bootstrap ~]# mv ./ytt-linux-amd64-v0.31.0+vmware.1 /usr/local/bin/ytt
kappのインストール
[root@bootstrap ~]# cd /tanzu/cli [root@bootstrap ~]# gunzip kapp-linux-amd64-v0.36.0+vmware.1.gz [root@bootstrap ~]# chmod ugo+x kapp-linux-amd64-v0.36.0+vmware.1 [root@bootstrap ~]# mv ./kapp-linux-amd64-v0.36.0+vmware.1 /usr/local/bin/kapp
kbldのインストール
[root@bootstrap ~]# cd /tanzu/cli [root@bootstrap ~]# gunzip kbld-linux-amd64-v0.28.0+vmware.1.gz [root@bootstrap ~]# chmod ugo+x kbld-linux-amd64-v0.28.0+vmware.1 [root@bootstrap ~]# mv ./kbld-linux-amd64-v0.28.0+vmware.1 /usr/local/bin/kbld
imgpkgのインストール
[root@bootstrap ~]# cd /tanzu/cli [root@bootstrap ~]# gunzip imgpkg-linux-amd64-v0.5.0+vmware.1.gz [root@bootstrap ~]# chmod ugo+x imgpkg-linux-amd64-v0.5.0+vmware.1 [root@bootstrap ~]# mv ./imgpkg-linux-amd64-v0.5.0+vmware.1 /usr/local/bin/imgpkg
SSHキーペアを作成
[root@bootstrap ~]# ssh-keygen -t rsa -b 4096 -C "root@si1230.com"
Management Cluster(プロキシ環境の場合は失敗するのでデプロイ直前まで)
まずイメージが更新されていてGUIのリストに出てこないので環境変数を設定しておく。
https://kb.vmware.com/s/article/83781
1.20.5+vmware.1を求められるが1.20.5+vmware.2しかないのでアップデートする必要あり
[root@bootstrap ~]# rm -rf /root/.tanzu/tkg/bom [root@bootstrap ~]# export TKG_BOM_CUSTOM_IMAGE_TAG="v1.3.1-patch1"
実行してデプロイの直前で止める。この時点で/root/.tkg/bom内にBOMファイルができている。
[root@bootstrap ~]# tanzu management-cluster create --ui
yqとjqのインストール
https://docs.vmware.com/en/VMware-Telco-Cloud-Automation/1.9.5/com.vmware.tca.userguide/GUID-F7671C24-8C77-4A2E-83FA-FE07C89CB6F6.html
[root@bootstrap ~]# wget https://github.com/mikefarah/yq/releases/download/v4.9.1/yq_linux_amd64 -O /usr/local/bin/yq [root@bootstrap ~]# wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 -O /usr/local/bin/jq [root@bootstrap ~]# chmod 755 /usr/local/bin/yq [root@bootstrap ~]# chmod 755 /usr/local/bin/jq
publish-images
publish-imagesスクリプトの生成スクリプト
[root@bootstrap ~]# vim /root/gen-publish-images.sh
#!/usr/bin/env bash
# Copyright 2020 The TKG Contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -euo pipefail
TANZU_BOM_DIR=${HOME}/.tanzu/tkg/bom
LEGACY_BOM_DIR=${HOME}/.tkg/bom
INSTALL_INSTRUCTIONS='See https://github.com/mikefarah/yq#install for installation instructions'
echodual() {
echo "$@" 1>&2
echo "#" "$@"
}
if [ -z "$TKG_CUSTOM_IMAGE_REPOSITORY" ]; then
echo "TKG_CUSTOM_IMAGE_REPOSITORY variable is not defined" >&2
exit 1
fi
if [[ -d "$TANZU_BOM_DIR" ]]; then
BOM_DIR="${TANZU_BOM_DIR}"
elif [[ -d "$LEGACY_BOM_DIR" ]]; then
BOM_DIR="${LEGACY_BOM_DIR}"
else
echo "Tanzu Kubernetes Grid directories not found. Run CLI once to initialise." >&2
exit 2
fi
if ! [ -x "$(command -v imgpkg)" ]; then
echo 'Error: imgpkg is not installed.' >&2
exit 3
fi
if ! [ -x "$(command -v yq)" ]; then
echo 'Error: yq is not installed.' >&2
echo "${INSTALL_INSTRUCTIONS}" >&2
exit 3
fi
echo "set -euo pipefail"
echodual "Note that yq must be version above or equal to version 4.9.2 and below version 5."
actualImageRepository=""
# Iterate through BoM file to create the complete Image name
# and then pull, retag and push image to custom registry.
for TKG_BOM_FILE in "$BOM_DIR"/*.yaml; do
echodual "Processing BOM file ${TKG_BOM_FILE}"
# Get actual image repository from BoM file
actualImageRepository=$(yq e '.imageConfig.imageRepository' "$TKG_BOM_FILE")
yq e '.. | select(has("images"))|.images[] | .imagePath + ":" + .tag ' "$TKG_BOM_FILE" |
while read -r image; do
actualImage=${actualImageRepository}/${image}
customImage=$TKG_CUSTOM_IMAGE_REPOSITORY/${image}
echo "docker pull $actualImage"
echo "docker tag $actualImage $customImage"
echo "docker push $customImage"
echo ""
done
echodual "Finished processing BOM file ${TKG_BOM_FILE}"
echo ""
done
# Iterate through TKr BoM file to create the complete Image name
# and then pull, retag and push image to custom registry.
list=$(imgpkg tag list -i ${actualImageRepository}/tkr-bom)
for imageTag in ${list}; do
if [[ ${imageTag} == v* ]]; then
TKR_BOM_FILE="tkr-bom-${imageTag//_/+}.yaml"
echodual "Processing TKR BOM file ${TKR_BOM_FILE}"
actualTKRImage=${actualImageRepository}/tkr-bom:${imageTag}
customTKRImage=${TKG_CUSTOM_IMAGE_REPOSITORY}/tkr-bom:${imageTag}
echo ""
echo "docker pull $actualTKRImage"
echo "docker tag $actualTKRImage $customTKRImage"
echo "docker push $customTKRImage"
imgpkg pull --image ${actualImageRepository}/tkr-bom:${imageTag} --output "tmp" > /dev/null 2>&1
yq e '.. | select(has("images"))|.images[] | .imagePath + ":" + .tag ' "tmp/$TKR_BOM_FILE" |
while read -r image; do
actualImage=${actualImageRepository}/${image}
customImage=$TKG_CUSTOM_IMAGE_REPOSITORY/${image}
echo "docker pull $actualImage"
echo "docker tag $actualImage $customImage"
echo "docker push $customImage"
echo ""
done
rm -rf tmp
echodual "Finished processing TKR BOM file ${TKR_BOM_FILE}"
echo ""
fi
done
list=$(imgpkg tag list -i ${actualImageRepository}/tkr-compatibility)
for imageTag in ${list}; do
if [[ ${imageTag} == v* ]]; then
echodual "Processing TKR compatibility image"
actualImage=${actualImageRepository}/tkr-compatibility:${imageTag}
customImage=$TKG_CUSTOM_IMAGE_REPOSITORY/tkr-compatibility:${imageTag}
echo ""
echo "docker pull $actualImageRepository/tkr-compatibility:$imageTag"
echo "docker tag $actualImage $customImage"
echo "docker push $customImage"
echo ""
echodual "Finished processing TKR compatibility image"
fi
done
publish-imagesスクリプトの実行権限
[root@bootstrap ~]# chmod +x /root/gen-publish-images.sh
環境変数
Dockerのプライベートレジストリを設定。ちなみに別ホストのプライベートレジストリでもいい。
[root@bootstrap ~]# export TKG_CUSTOM_IMAGE_REPOSITORY="localhost:5000"
スクリプト生成
[root@bootstrap ~]# /root/gen-publish-images.sh > publish-images.sh
スクリプトの実行権限
[root@bootstrap ~]# chmod +x /root/publish-images.sh
プライベートレジストリにログイン
[root@bootstrap ~]# docker login ${TKG_CUSTOM_IMAGE_REPOSITORY}
スクリプト実行
[root@bootstrap ~]# /root/publish-images.sh
https://blogchobichobi.blogspot.com/2021/05/posts-38.html
https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.3/vmware-tanzu-kubernetes-grid-13/GUID-install-cli.html
最初にbootstrapを作る必要がある。
bootstrapは管理クラスターとワークロードクラスターをデプロイするために必要。VMでも物理でも何でもいい。
①bootstrap
②管理クラスター
③ワークロードクラスター