vm.gowatana.jp

NEOにほんごVMware(仮)

はじめての Tanzu Community Edition。(kube-vip 編)Part-02

VMware から Tanzu Community Edition(TCE)が提供開始されたので、自宅ラボの vSphere 環境に、Kubernetes クラスタを作成してみます。

 

前回(準備編)はこちら。

 

手順については、下記のあたりが参考になります。

 

今回の内容です。

 

それでは、下記のような環境を構築していきます。(前回の再掲)

f:id:gowatana:20211014231456p:plain

 

1. Bootstrap 環境の構築

Bootstrap マシンで、Docker、kubectl、Tanzu CLI などの準備をします。
※この時点では、vSphere の準備は実施ずみの想定です。(前回の投稿 参照)

f:id:gowatana:20211015235349p:plain

 

1-1. OS 環境の準備

今回の Bootstrap マシンは、Photon OS 4.0 を利用します。

OVA ファイルは、下記からダウンロードしたものをデプロイしています。

  • 「Photon OS 4.0 Rev1 Binaries」→「OVA with virtual hardware v13 (UEFI Secure Boot)」あのあたりを利用します。
  • ファイル名は photon-ova_uefi-4.0-ca7c9e9330.ova です。

 

OVA ファイルをデプロイしたら、vCPU を 2、メモリを 8GB(要件は 6GB)に設定変更して起動しています。

root@lab-tceboot-01 [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=1526e30ba

 

RPM パッケージを更新して、OS を再起動しておきます。

root@lab-tceboot-01 [ ~ ]# tdnf update -y
root@lab-tceboot-01 [ ~ ]# reboot

 

tar 、diffutils をインストールしておきます。diffutils は TCE としては不要ですが、今回の手順でのファイル比較で使用したいのでインストールしておきます。

root@lab-tceboot-01 [ ~ ]# tdnf install -y tar diffutils  

 

あとで Web UI に外部からアクセスするので、今回は iptables を停止してしまいます。(本来ならポート解放・・・)

root@lab-tceboot-01 [ ~ ]# systemctl stop iptables
root@lab-tceboot-01 [ ~ ]# systemctl disable iptables

 

1-2. Docker Engine の準備

Photon OS は OVA をデプロイしたものなので、デフォルトで Docker がインストールされています。

root@lab-tceboot-01 [ ~ ]# rpm -q docker
docker-19.03.15-5.ph4.x86_64
root@lab-tceboot-01 [ ~ ]# docker -v
Docker version 19.03.15, build 99e3ed8

 

Docker を起動しておきます。

root@lab-tceboot-01 [ ~ ]# systemctl start docker
root@lab-tceboot-01 [ ~ ]# systemctl enable docker

 

1-3. OS ユーザの準備

OS ユーザ(今回は demo-01)を作成して、docker グループに追加しておきます。

root@lab-tceboot-01 [ ~ ]# useradd -m demo-01
root@lab-tceboot-01 [ ~ ]# usermod -aG docker demo-01
root@lab-tceboot-01 [ ~ ]# passwd demo-01

 

su で、作成したユーザに切り替えます。

root@lab-tceboot-01 [ ~ ]# su - demo-01
demo-01 [ ~ ]$ id
uid=1000(demo-01) gid=100(users) groups=100(users),999(docker)

 

作成したユーザで、Docker が利用可能であることを確認しておきます。

demo-01 [ ~ ]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

ssh-keygen で、SSH 鍵ペアのファイルを作成しておきます。

demo-01 [ ~ ]$ ssh-keygen -P '' -f ~/.ssh/id_rsa
demo-01 [ ~ ]$ ls .ssh/
id_rsa  id_rsa.pub

 

CLI を配置するディレクトリ($HOME/bin)を作成して、PATH 環境変数に追加設定しておきます。

demo-01 [ ~ ]$ mkdir $HOME/bin
demo-01 [ ~ ]$ echo 'PATH=$HOME/bin:$PATH' >> $HOME/.bash_profile
demo-01 [ ~ ]$ source $HOME/.bash_profile

 

次のログイン時に、tanzu CLI と kubectl の Bash 補完機能を有効化します。

demo-01 [ ~ ]$ echo 'source <(tanzu completion bash)' >> $HOME/.bash_profile
demo-01 [ ~ ]$ echo 'source <(kubectl completion bash)' >> $HOME/.bash_profile

 

1-4. kubectl のインストール

GitHub から、kubectl をダウンロード、インストールしておきます。kubectl は今回作成する予定の kubernetes バージョン(TCE の OVA の Kubernetes バージョン)にあわせてみました。

demo-01 [ ~ ]$ curl -sL -o $HOME/bin/kubectl https://dl.k8s.io/release/v1.21.2/bin/linux/amd64/kubectl
demo-01 [ ~ ]$ chmod +x $HOME/bin/kubectl
demo-01 [ ~ ]$ kubectl version --short --client
Client Version: v1.21.2

 

1-5. Tanzu Community Edition のインストール

TCE も、GitHub からダウンロードします。

demo-01 [ ~ ]$ curl -sLO https://github.com/vmware-tanzu/community-edition/releases/download/v0.9.1/tce-linux-amd64-v0.9.1.tar.gz

 

ファイルを展開します。

demo-01 [ ~ ]$ tar zxvf tce-linux-amd64-v0.9.1.tar.gz
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

 

インストール スクリプトを実行します。

demo-01 [ ~ ]$ cd tce-linux-amd64-v0.9.1/
demo-01 [ ~/tce-linux-amd64-v0.9.1 ]$ ./install.sh

 

tanzu CLI が実行可能になったことを確認します。

demo-01 [ ~/tce-linux-amd64-v0.9.1 ]$ cd
demo-01 [ ~ ]$ which tanzu
/home/demo-01/bin/tanzu
demo-01 [ ~ ]$ tanzu version
version: v0.2.1
buildDate: 2021-09-29
sha: ceaa474

 

2. Management Cluster の作成

Bootstrap マシンで、tanzu CLI を実行して Management Cluster を作成します。

f:id:gowatana:20211015235756p:plain

 

2-1. Web UI の起動 ~ 設定入力(YAML ファイルの作成)

今回は、TCE(TKG)の Web UI で Management Cluster の設定ファイル(YAML ファイル)を作成しておき、クラスタ作成は Web UI ではなく CLI から実施してみます。

※今後何度か実施する場合には CLI の方が便利なため・・・

 

Bootstrap マシンで、tanzu management-cluster create を実行して、Web UI を起動します。今回は Bootstrap マシンの外にある Web ブラウザからアクセスするため、「--bind」オプションを指定しています。

demo-01 [ ~ ]$ tanzu management-cluster create --ui --bind=0.0.0.0:8080 --browser=none

 

Web ブラウザから、Bootstrap マシンの 8080 番ポートにアクセスします。

f:id:gowatana:20211015084416p:plain


vCenter への接続情報を入力して、「CONNECT」をクリックします。

f:id:gowatana:20211015084524p:plain

 

「Verify SSL Thumprint」の確認は、「CONTINUE」で進めます。

f:id:gowatana:20211015084633p:plain

 

vCenter インベントリのデータセンタを選択し、事前作成しておいた SSH 公開鍵を入力して「NEXT」をクリックします。ここで入力する SSH 公開鍵は、さきほど ssh-keygen で作成した $HOME/.ssh/id_rsa.pub ファイルの内容です。

f:id:gowatana:20211015084742p:plain

 

Management Cluster の設定値を入力して、「NEXT」で進めます。

  • INSTANCE TYPE: Management Cluster の Control Plane VM のスペックを指定(今回は small)
  • MANAGEMENT CLUSER NAME: Kubernetes クラスタの名前(tcemgmt)
  • CONTROL PLANE ENDPOINT PROVIDER: NSX ALB か kube-vip を選択(kube-vip)
  • WORKER NODE INSTANCE TYPE: Management Cluster のWorker Node VM のスペック(small)
  • CONTROL PLANE ENDPOINT: kubectl などから Management Cluster に接続するアドレスを入力。kube-vip を選択した場合は、Kubernetes ノードの DHCP ネットワークで、DHCP 範囲外の IP アドレスを指定する。(192.168.11.211)

f:id:gowatana:20211015084903p:plain

 

今回は NSX ALB の設定はスキップして「NEXT」をクリックします。

f:id:gowatana:20211015085044p:plain

 

Metadata のパラメータ入力もスキップして「NEXT」をクリックします。

f:id:gowatana:20211015085158p:plain

 

kubernetes  ノードの VM をデプロイする場所(下記)を選択して、「NEXT」をクリックします。

  • VM FOLDER: Management Cluster の VM を作成するフォルダ。
  • CLUSTER, HOSTS, AND RESOURCE POOLS: 今回はリソース プールを選択。
  • DATASTORE

f:id:gowatana:20211015085244p:plain

 

ネットワークの設定を入力します。NETWORK NAME で、DHCP ネットワークのポートグループを選択して、「NEXT」をクリックします。

f:id:gowatana:20211015085411p:plain

 

Identity Management は、今回は無効にしておきます。

f:id:gowatana:20211015085604p:plain

 

OS イメージを選択して、「NEXT」を選択します。前回デプロイした TCE の OVA ファイルをVM テンプレートに変換しておくと、選択可能になっているはずです。 

f:id:gowatana:20211015085701p:plain

 

Tanzu Mission Control の設定もスキップして、「NEXT」をクリックします。

f:id:gowatana:20211015231118p:plain

 

「REVIEW CONFIGURATION」をクリックし、設定確認画面に進みます。

f:id:gowatana:20211015231225p:plain

 

「DEPLOY MANAGEMENT CLUSTER」をクリックすると、クラスタ作成が開始されます。しかし、今回は CLI からクラスタを作成してみます。

画面の下方にある「CLI Command Equivalent」には、「DEPLOY MANAGEMENT CLUSTER」をクリックした場合と同様のクラスタ作成をする tanzu CLI コマンドラインが表示されています。

f:id:gowatana:20211015231403p:plain

 

これまでの UI 入力で生成された YAML ファイルは、今回は 8omj7epmp9.yaml でした。

まだ tanzu CLI でのクラスタ作成は実行せず、ファイルを編集します。

tanzu management-cluster create --file /home/demo-01/.config/tanzu/tkg/clusterconfigs/8omj7epmp9.yaml -v 6

 

今回は CLI で後続作業を実施するので、Web UI を起動した「tanzu management-cluster create --ui ~」コマンドは、Ctrl + C などで停止しておきます。

 

2-2. YAML ファイルの編集

Management Cluster の YAML ファイルを、わかりやすくクラスタ名にあわせてコピーしておきます。

demo-01 [ ~ ]$ cp .config/tanzu/tkg/clusterconfigs/8omj7epmp9.yaml .config/tanzu/tkg/clusterconfigs/tcemgmt.yml

 

vSphere 7 の環境で、スーパーバイザー クラスタを利用しない TKG クラスタを作成するか確認するメッセージをスキップする設定(DEPLOY_TKG_ON_VSPHERE7: true)を追記しておきます。

ただし、この設定がない場合でも、下記のような応答にこたえることで、Management Cluster は作成できます。

Do you want to configure vSphere with Tanzu? [y/N]:
Would you like to deploy a non-integrated Tanzu Kubernetes Grid management cluster on vSphere 7.0? [y/N]:

 

YAML ファイルの末尾に、DEPLOY_TKG_ON_VSPHERE7 を追記します。

demo-01 [ ~ ]$ echo 'DEPLOY_TKG_ON_VSPHERE7: true' >> .config/tanzu/tkg/clusterconfigs/tcemgmt.yml

 

2-3. Management Cluster の作成

それでは、tanzu CLI で、Management Cluster を作成します。

demo-01 [ ~ ]$ tanzu management-cluster create --file /home/demo-01/.config/tanzu/tkg/clusterconfigs/tcemgmt.yml -v 6

 

すこし待つと、Docker コンテナとして Bootstrap Cluster が作成されます。

f:id:gowatana:20211015230838p:plain

 

しばらく待つと、処理が完了します。

f:id:gowatana:20211015232941p:plain

 

そして、Management Cluster が作成されます。

Management Cluster は、「tanzu management-cluster get」コマンドで確認できます。

f:id:gowatana:20211015233115p:plain

 

kubectl でも、Management Cluster が操作できます。

f:id:gowatana:20211015233418p:plain

 

vSphere Client でも、Kubernetes ノードの VM が作成されたことが確認できます。

f:id:gowatana:20211015233543p:plain

 

Management Cluster が作成されると、Bootstrap Cluster は自動的に削除されます。

demo-01 [ ~ ]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
demo-01 [ ~ ]$

 

3. Workload Cluster の作成

Bootstrap マシンで、tanzu CLI を実行して Workload Cluster を作成します。Workload Cluster は Management Cluster を利用して作成されるので、Bootstrap Cluster は作成されません。

f:id:gowatana:20211015235816p:plain

 

3-1. YAML ファイルの作成

Management Cluster の YAML ファイルから、Workload Cluster の設定を記載したファイルを作成します。

demo-01 [ ~ ]$ cp .config/tanzu/tkg/clusterconfigs/tcemgmt.yml .config/tanzu/tkg/clusterconfigs/wlc-01.yml
demo-01 [ ~ ]$ vi .config/tanzu/tkg/clusterconfigs/wlc-01.yml

 

今回は、3か所だけ設定変更しています。

  • CLUSTER_NAME: Kubernetes クラスタの名前。(今回は wlc-01)
  • VSPHERE_CONTROL_PLANE_ENDPOINT: kubectl などから Workload Cluster に接続するアドレスを入力。kube-vip を選択した場合は、Kubernetes ノードの DHCP ネットワークで、DHCP 範囲外の IP アドレスを指定する。(192.168.11.212)
  • VSPHERE_FOLDER:  VM フォルダ。(わかりやすくするため、Management Cluster の VM とはフォルダを分けた)
demo-01 [ ~ ]$ diff .config/tanzu/tkg/clusterconfigs/tcemgmt.yml .config/tanzu/tkg/clusterconfigs/wlc-01.yml
15c15
< CLUSTER_NAME: tcemgmt
---
> CLUSTER_NAME: wlc-01
48c48
< VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.11.211
---
> VSPHERE_CONTROL_PLANE_ENDPOINT: 192.168.11.212
53c53
< VSPHERE_FOLDER: /infra-dc-01/vm/03-Lab/lab-k8s/k8s_lab-tkg-01_demo-01/vm_tcemgmt
---
> VSPHERE_FOLDER: /infra-dc-01/vm/03-Lab/lab-k8s/k8s_lab-tkg-01_demo-01/vm_wlc-01

 

3-2. Workload Cluster の作成

tanzu CLI で、Workload Cluster を作成します。

Management Cluster とは異なり、「tanzu cluster create」コマンドを実行します。

demo-01 [ ~ ]$ tanzu cluster create -f .config/tanzu/tkg/clusterconfigs/wlc-01.yml

 

少し待つと、Workload Cluster が作成されます。

f:id:gowatana:20211015233856p:plain

 

Workload Cluster は、「tanzu cluster list」コマンドで確認できます。

demo-01 [ ~ ]$ tanzu cluster list
  NAME    NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   PLAN
  wlc-01  default    running  1/1           1/1      v1.21.2+vmware.1    dev

 

Kubernetes クラスタに接続するための kubeconfig は、「tanzu cluster kubeconfig get ~」コマンドで取得できます。デフォルトでは、Workload Cluster のコンテキストが $HOME/.kube/config に保存されます。

demo-01 [ ~ ]$ tanzu cluster kubeconfig get wlc-01 --admin
Credentials of cluster 'wlc-01' have been saved
You can now access the cluster by running 'kubectl config use-context wlc-01-admin@wlc-01'

 

kubeconfig の保存先は、「--export-file」オプションで変更することもできます。

取得した kubeconfig で、Workload Cluster が利用できます。

f:id:gowatana:20211015234255p:plain

 

これで Pod 起動などができるようになりました。ただし、今回は NSX ALB(ロードバランサ)を用意していないので、このままでは LoadBalancer サービスは利用できません。

 

vSphere Client で、Workload Cluster の Kubernetes ノードが VM として作成されたことがわかります。

f:id:gowatana:20211016002814p:plain

 

参考: デフォルトで起動されている Pod の様子

kubctl を利用して、Management Cluster と Workload Cluster で起動された Pod を見ておきます。

まず、kubectl から Kubernetes クラスタに接続するための kubeconfig ファイルは、それぞれ下記のようになっているようです。

  • Management Cluster の kubeconfig は、自動的に $HOME/.kube/config に保存される。
  • Workload Cluster の kubeconfig は、「tanzu cluster kubeconfig get」を実行すると $HOME/.kube/config に保存される。「--export-file」で保存するファイルを変更可能。

一方で、tanzu CLI での Management Cluster へのアクセスでは、$HOME/.kube-tkg/config を見ているようです。そのため、kubectl でコンテキストを切り替えても tanzu CLI には影響しないようです。ちなみに、Management Cluster を複数作成した場合は、接続先を「tanzu login」コマンドで切り替えられます。

f:id:gowatana:20211015234912p:plain

 

Management Cluster での Pod 起動の様子です。

f:id:gowatana:20211015234609p:plain

 

Workload Cluster での Pod 起動の様子です。

f:id:gowatana:20211015234657p:plain

 

以上、TCE で Kubernetes クラスタを作成してみる話でした。