手当たり次第に書くんだ

飽きっぽいのは本能

VMware TKGm Bootstrap

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
②管理クラスター
③ワークロードクラスター

VMware TKGm Bootstrap

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る