LoginSignup
2
1

More than 1 year has passed since last update.

VMware Cloud Director 10.3 テナントに TKGm Cluster をデプロイしてみる

Posted at

VMware Tanzu のマルチテナンシ

VMware Cloud Director は VMware 仮想リソース基盤のマルチテナントオーケストレーターです。
10 年の歴史があって、主に仮想リソース(Computing, NW,Storage)のテナント分割と制御の機能を提供します。

Tanzu Kubernetes Grid は VMware が提供する K8S Cluster Runtime ですが、ややこしいのは Tanzu 関連の Runtime は基盤によって、いくつかのバリエーションがあります。

1. vSphere with Tanzu supervisor cluster+
vSphere 独自の仕組みを利用して、ESXi を Worker Node として使い、ESXi 上 Pod を立てる仕組み

2. Tanzu Cluster Grid Service
Supervisor Cluster 上に Tanzu Kubernetes Cluster (guest cluster)を立てる仕組み

3. Tanzu Cluster Grid Multicloud
vSphere だけではなく、AWS / Azure などの環境にも展開できる K8s Cluster

マルチクラウドの観点で考える場合、上記3つの仕組みを比較すると、下記のようにまとめます。

image.png

VCD は 10.0 から Tanzu Kubernetes Grid Service をサポートし始めたが、Ingress/Managementネットワーク分離等に関して課題があります。なので、VCD 10.3 から Container Service Extension (3.1.1+) の仕組みを利用し、TKGm をデプロイできるようになりました。

image.png

Container Service Extension の概要

Container Service Extension (CSE) は VCD のテナントに K8s cluster をデプロイできるようにする Extension です。
TKGm 以外 upstream k8s および TKGI (元 Pivotal PKS)もサポートします。

image.png

デプロイ時に使う K8S Mater/Worker テンプレートは CSE から VCD の Shared Catalog にアップロードします。
CSE Server は AMQP/MQTT 経由で VCD に K8S cluster デプロイ/Resize/Upgrade の指示を出します。
デプロイ後、Tenant User は VCD Tenant Portal から Kubeconfig をダウンロードできます。
Tenant Admin は VCD Tenant Portal (GUI) もしくは cse-cli で K8S Cluster のライフサイクル管理を行います。

image.png

ラボのアーキ

image.png

使用するソフトウェアのバージョン:
VCD : 10.3.2
TKG : 1.4
CSE : 3.1.2
NSX-ALB : 21.1.3
vSphere : 7.0U2
NSX-T : 3.1.3

RabbitMQ のインストール

参照資料

VMware docs
① RabbitMQ インストール:
https://docs.vmware.com/jp/VMware-Cloud-Director/10.3/VMware-Cloud-Director-Install-Configure-Upgrade-Guide/GUID-8E4DD1BC-E038-499B-B1FD-02A05E1689AF.html

※ VCD 10.3.x がサポートできる RabbitMQ バージョンは 3.8.x のみ

② AMQP ブローカの構成:
https://docs.vmware.com/jp/VMware-Cloud-Director/10.3/VMware-Cloud-Director-Service-Provider-Admin-Portal-Guide/GUID-7569B8ED-19B2-44C5-9448-22FC921AB363.html

RabbitMQ Download:
https://www.rabbitmq.com/download.html

使用するサーバ:CentOS 8
インストール方法:https://www.rabbitmq.com/install-rpm.html

インストール

# Signing Key を Import する
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey

# yum repo を追加、内容は下記のファイルを参照
vi /etc/yum.repos.d/rabbitmq.repo

# yum update
yum update -y
yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_server'

# dependency install
yum install socat logrotate –y

# install rabbitmq 3.8.21
yum install rabbitmq-server-3.8.27-1.el8 –y

#rabbitmq 起動
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

#Firewall 起動されている場合、ルールを追加
firewall-cmd --add-port=5672/tcp --permanent
firewall-cmd --reload

/etc/yum.repos.d/rabbitmq.repo の中身

##
## Zero dependency Erlang
##

[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

##
## RabbitMQ server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_server-source]
name=rabbitmq_server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

RabbitMQ ユーザ作成

Default User “guest” は Localhost からしか接続できないため、VCD 用ユーザを作成する
RabbitMQ Docs : https://www.rabbitmq.com/access-control.html

# ユーザ作成
rabbitmqctl add_user “vcd_user“
# パスワードをターミナルに入力

# ユーザに権限を付与
rabbitmqctl set_permissions -p "/" "vcd_user" ".*" ".*" ".*"

# ユーザを確認
rabbitmqctl list_users
rabbitmqctl list_user_permissions vcd_user

VCD GUI から AMQP ブローカを構成する

image.png
image.png
image.png

CSE Server のインストール

CSE Org の事前準備

TKG テンプレート OVA を保管する Catalog のために、CSE Org が必要です。
通常 CSE Server はこちらの CSE Server にデプロイすることが多いです。
要件によって、CSE Server を VCD NW の外部にデプロイすることもできます。(VCD Manager と通信する必要があります)
ラボでは、CSE Org に CSE Server を構成します。
image.png
以下のステップで Org を構成します。

① CSE Org /OVDC 作成
② Edge GW 作成
③ Routed NW 作成
④ Edge GW SNAT/DNAT 作成
⑤ NSX T0 SNAT/DNAT 作成
⑥ Edge GW FW 穴あけ(Default は All Deny)
⑦ T0 GW FW 穴あけ(Default は All Accept)

CSE Org に Shared Catalog を作成する

VCD Tenant GUI > Libraries > Catalogs > NEW
image.png

image.png

Provider 側で Tenant に Calalog Share の権限を付与する必要がある。こちらの Docs を参照してください。

CSE Server のセットアップ

CSE は多種類なOS(Ubuntu、Photon)をサポートする。
CSE Git Docs : https://vmware.github.io/container-service-extension/cse3_1/INSTALLATION.html
ラボでは Ubuntu 20.04.3 を構築して、CSE をインストールし、CSE clientとして使う。

まずは CSE Server vAPP を作成します。
image.png
image.png
先作成した Routed NW に接続します。
image.png

CSE Server にログインして、セットアップします。

# User は root 以外を使う想定、例として“Administrator”を使う

$ python3 –version
# CSE 3.1 は python 3.7.3 以上のバージョンが必要

$ sudo apt install python3-pip
$ pip3 --version

#cseインストールに必用なパッケージをインストール
$ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget

# cse server install
$ pip3 install container-service-extension
$ echo 'export PATH=$PATH:/home/administrator/.local/bin' >> /home/administrator/.bashrc
$ source /home/administrator/.bashrc
$ cse version

#vcd-cli install
$ pip3 install vcd-cli

#VCD login
$ vcd login {VCD FQDN} system admin -iw

#cse extension を vcd-cli profile に追加
$ vi /home/administrator/.vcd-cli/profiles.yaml
#ファイルの最後に下記を追加
extensions:
- container_service_extension.client.cse

#vcd cse 確認
$ vcd cse version

# CSE Service Account を作成する
# Self Signed Cerfitication を使っている場合、-s が必要
$ cse create-service-role vcd.nfvlab.test -s
Username for System Administrator: admin
Password for admin:
Connecting to vCD: vcd.nfvlab.test
Connected to vCD as system administrator: admin
Creating CSE Service Role...
Successfully created CSE Service Role

# VCD server に接続用の user を作成する
$ vcd login {VCD FQDN} system admin –iw
$ vcd user create --enabled cse VMware1! "CSE Service Role"

# cse server の config file のサンプルを作成
$ cse sample > ~/config.yaml
$ vi ~/config.yaml
# config.yaml の中身は次ページを参照

下記は使用した config.yaml :

config.yaml
# Only one of the amqp or mqtt sections should be present.

#amqp:
#  exchange: cse-ext
#  host: amqp.vmware.com
#  password: guest
#  port: 5672
#  prefix: vcd
#  routing_key: cse
#  username: guest
#  vhost: /

mqtt:
  verify_ssl: false
# Self Signed Cerfitication を使っている場合、false にしてください

vcd:
  host: vcd.nfvlab.test
  log: true
  password: VMware1!
  port: 443
  username: cse
# 先作った cse user を使う
  verify: false
# Self Signed Cerfitication を使っている場合、false にしてください

vcs:
- name: vCenter
  password: VMware1!
  username: Administrator@vsphere.local
  verify: false
# Self Signed Cerfitication を使っている場合、false にしてください

service:
  enforce_authorization: false
  legacy_mode: false
  log_wire: false
  no_vc_communication_mode: false
  processors: 15
  telemetry:
    enable: true

broker:
  catalog: Catalog
# TKG Template を保存する Sharedカタログ、CSE Org 内で作成する
  ip_allocation_mode: pool
  network: CSE-RoutedNW
  org: CSE_Org
# CSE の Org と NW(template をダウンロードするために外部と接続する必要がある)
  remote_template_cookbook_url: https://raw.githubusercontent.com/vmware/container-service-extension-templates/master/template_v2.yaml
  storage_profile: 'vSAN Default Storage Policy'
  vdc: CSE-OVDC
# CSE Org の VDC

# [Optional] Extra options section
#extra_options:
#  tkgm_http_proxy: [http proxy url with port]
#  tkgm_https_proxy: [https proxy url with port]
#  tkgm_no_proxy: [comma separated list of IP addresses]

続いて、config をチェックして、VCD に登録(インストール)します。

# config.yaml をチェックする
$cse check ~/config.yaml -s

Required Python version: >= 3.7.3
Installed Python version: 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0]
Validating config file 'config.yaml'
…
Config file 'config.yaml' is valid

# CSE インストールする
$ cse install -c config.yaml -s

Required Python version: >= 3.7.3
Installed Python version: 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0]
Validating config file 'config.yaml'
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.
Connected to vCloud Director (vcd.nfvlab.test:443)
Connected to vCenter Server 'vCenter' as 'Administrator@vsphere.local' (vc-mgmt.nfvlab.test)
Config file 'config.yaml' is valid
Installing CSE on vCloud Director using config file 'config.yaml'
…
Installed CSE successfully.

TKG テンプレートをダウンロードし、Catalog にアップロード

TKGm OVA ファイルを VMware Customer Connect Website からダウンロードします。

# TKG OVA ファイルを CSE client から VCD にインポートする
$ cse template import -F ubuntu-2004-kube-v1.21.2+vmware.1-tkg.1-7832907791984498322.ova -s -c config.yaml
# 上記コマンド実行すると、OVAファイルが CSE-Org の Catalog に登録される

CSE 3.1.1 & 3.1.2 は ubuntu ベースの TKGm OVA のみをサポートします。PhotonOS ベースの OVA は使用できません。

運用中新たに OVA を import した後、設定を反映させるために、cse service を再起動する必要があります。

CSE serer を起動してみる

# CSE Server のテストのために run してみる
$ cse run –s

Required Python version: >= 3.7.3
Installed Python version: 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0]
CSE version: 3.1.2
Validating config file 'config.yaml'
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.
Connected to vCloud Director (vcd.nfvlab.test:443)
Connected to vCenter Server 'vCenter' as 'Administrator@vsphere.local' (vc-mgmt.nfvlab.test)
Config file 'config.yaml' is valid
Using RDE version: 2.0.0
Successfully loaded defined entity schema urn:vcloud:type:cse:nativeCluster:2.0.0 to global context
Loading k8s template definition from catalog
Loading TKGm template definition from catalog
Found TKGm template ubuntu-2004-kube-v1.21.2+vmware.1-tkg.1-7832907791984498322.
Loading kubernetes runtime placement policies.
Template rules are not supported by CSE for vCD api version 35.0 or above. Skipping template rule processing.
Validating CSE installation according to config file
MQTT extension and API filters found
Found catalog 'Catalog'
CSE installation is valid
Started thread 'MessageConsumer' (139665260545792)
Started thread 'ConsumerWatchdog' (139665252153088)
Container Service Extension for vCloud Director
Server running using config file: config.yaml
Log files: /home/administrator/.cse-logs/cse-server-info.log, /home/administrator/.cse-logs/cse-server-debug.log
waiting for requests (ctrl+c to close)
^C
Ctrl+C detected, exiting

上記のように、エラーが出なければ CSE Server は問題なく起動できるので、一旦 Ctrl+C で止める

CSE service の常駐化設定

CSE が自動起動できるように Service として登録
こちら CSE 公式 Github にある cse.shcse.service のテンプレートをカスタマイズします。

# work path に起動スクリプトの cse.sh を作成する 
$ vi /home/administrator/cse.sh

#!/usr/bin/env bash

### recommended to use a virtual environment
# CSE_VENV_PATH=/root/cse-venv
# source $CSE_VENV_PATH/bin/activate

### CSE config file should be encrypted for security (using `cse encrypt` command)
### Encryption password should be stored in the environment variable `CSE_CONFIG_PASSWORD`
### Environment variable can be declared 2 ways:
### (1) Plaintext in this script
# export CSE_CONFIG_PASSWORD=mypassword
### (2) Create a file to store the environment variable. The file should contain the line: `CSE_CONFIG_PASSWORD=mypassword`
### Add `EnvironmentFile=/path/to/file` under `[Service]` in `cse.service`
### Note: If `EnvironmentFile=/path/to/file` exists under `[Service]` in `cse.service` but the file does not exist, CSE will fail to start

### Edit this with your CSE config file path
### Work path を指定する
CSE_CONFIG_PATH=/home/administrator/config.yaml
### To use a plaintext CSE config file, add `-s` to the `cse run` command
### cse コマンド起動
/home/administrator/.local/bin/cse run -c $CSE_CONFIG_PATH –s

# cse.sh に実行権限を付与
$ chmod +x /home/administrator/cse.sh 

# cse.service を登録、Root として実行する必要がある
$ sudo su
$ vi /etc/systemd/system/cse.service

[Unit]
Description=Container Service Extension for VMware vCloud Director
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/home/administrator/cse.sh
User=administrator
WorkingDirectory=/home/administrator
Type=simple
Restart=always

[Install]
WantedBy=default.target

# cse.service を起動
$ systemctl start cse.service
$ systemctl status cse.service
$ systemctl enable cse.service

Tenant へ TKGm をデプロイする

Tenant NW の準備

TKGm をデプロイする際に、デプロイされた K8s Master ノードが外部と通信する必要があるので、下記の NW 設定がデプロイ前に準備する必要がある

  1. Routed NW
    1. 1. Routed NW に Static IP Pool と DNS の設定が必要
  2. Edge GW SNAT rule
  3. External NW
    1. 1. External NW は Internet に通信できることが前提
  4. Edge GW / T0 の FW rule

image.png

External NW への SNAT は TKG Cluster デプロイする前に設定する必要がある ※ External NW は外部と通信できることを事前に確保する必要がある。(Routed or NAT)

image.png

Tenant に Container UI Plugin の有効化

VCD provider GUI > More > Customize Portal
image.png
image.png

権限バンドルの編集

VCD provider GUI > Administration > Tenant Access Control > Rights Bundles
image.png

CSE RBAC docs を参照し、下記の権限を追加して、Save します。

LIBRARIES > Catalog > View > View Shared Catalogs from Other Organizations
ACCESS CONTROL > User > Manage > Manage user's own API token
NETWORKING > Gateway > View > View Gateway
NETWORKING > Gateway Services > View > NAT View Only
NETWORKING > Gateway Services > Manage > NAT Configure
NETWORKING > Gateway Services > View > Load Balancer View Only
NETWORKING > Gateway Services > Manage > Load Balancer Configure
COMPUTE > Organization VDC > Manage > Create a Shared Disk

追加後、Public します。

image.png
image.png

権限を Role に付与

Tenant ごとに、Tenant Portal で Kube Admin の Role を作るのもできますが、検証環境で便利のために、Organization Administrator に権限を付与します。

VCD Provider GUI > Administration > Global Roles
image.png
image.png

Tenant へ TKGm のデプロイ

上記権限バンドルを持つユーザでデプロイ作業を実施してください

VCD Tenant GUI > More > Kubernetes Container Cluster > NEW
image.png
image.png
デプロイ時に、client の SSH Public Key を設定したら、Client から Password なしで(user:root)K8s Master Node にアクセスできます。トラブルシューティング時に非常に有用です。

デプロイされた Mater Node の Root ユーザのデフォルト Password は VCD Tenant Portal GUI > Datacenter > Virtual Machine > Details > Guest OS Customization > Edit > Specify Password 欄で確認できます。

image.png

TKGm のデプロイを続きます。
image.png
image.png

CSE 3.1.1 まで、Master Node は1ノードのみサポートします。 CSE 3.1.2 からは Master Cluster をサポートできるようになったが、やり方は模索中

image.png
image.png

IP pool は必須っぽい、DHCP も試してみたが、デプロイはエラーになる

image.png
image.png
デプロイ成功後、Portal から Kubeconfig をダウンロードすれば、アクセスできます。
注意点として、Kubeconfig に記載される API Server のアドレスは External NW の IP になるので、こちらのラボみたいに、External NW が外部に公開してない場合、手動で Public IP に書き換える必要があります。

付録:よく使う CSE コマンド集

CSE Service Host 関連コマンド

#1. Install CSE package
$ pip3 install container-service-extension

#2. Generate a skeleton configuration and provide site specific settings.
$ cse sample > config.yaml
   Edit the config.yaml file

#Config を暗号化しない場合、-s が必要
#3. Validate configuration.
$ cse check -c config.yaml -s

#4. Install the extension.
$ cse install -c config.yaml -s

#5. import template
$ cse template import -F ubuntu-2004-kube-xxx.ova -s -c config.yaml

#6. list imported tkg template
$ cse template list -s -d tkg

#7. Start cse server
$ cse run -s

CSE 関連 VCD コマンド

#0. install vcd-cli
$ pip3 install vcd-cli

#1.login as system administrator
$ vcd login vcloud.corp.local system administrator -wi

#2. list extensions
$ vcd system extension list

#3. get details of CSE extension
$ vcd system extension info cse

Tenant Admin Host Setup

#0. Install vcd-cli
$ pip3 install vcd-cli

#1. Install CSE package
$ pip3 install container-service-extension

#2.login as Tenant administrator
$ vcd login vcloud.corp.local Tenant administrator -wi

#3. Edit ~/. vcd cli/ profiles.yaml
active: default
extensions:
- container_service_extension.client.cse
profiles:

Tenant Admin TKGm Cluster Lifecycle Management

# 新規k8s cluster の作成
$ vcd cse cluster create

# k8s cluster の一覧
$ vcd cse cluster list

# 対象 k8s cluster の情報
$ vcd cse cluster info -o TENANT_NAME CLUSTER_NAME

# 対象 k8s cluster の kubeconfig
$ vcd cse cluster config -o TENANT_NAME CLUSTER_NAME

# 対象 k8s cluster の upgrade-plan を確認
$ vcd cse cluster upgrade-plan -o TENANT_NAME CLUSTER_NAME

# 対象 k8s cluster の upgrade
$ vcd cse cluster upgrade -o TENANT_NAME CLUSTER_NAME

# 対象 k8s cluster の 削除
$ vcd cse cluster delete -o TENANT_NAME CLUSTER_NAME

さらに詳細なコマンド等は CSE Git ページを参照してください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1