この手順では、AWS、Azure、または vSphere でプランベースのクラスタ(レガシー)を作成するときに使用する Linux カスタム マシン イメージをビルドする方法について説明します。次のセクションに分かれています。Tanzu Kubernetes Grid のクラスタ タイプの詳細については、「Workload クラスタ タイプ」を参照してください。
Linux カスタム マシン イメージをビルドするには、以下が必要です。
aws
コマンドライン インターフェイス (CLI)az
CLIAWS および Azure で、インフラストラクチャ CLI にログインします。プロンプトが表示されたら、リージョンを認証して指定します。
aws configure
を実行します。az login
を実行します。Azure で、構成 JSON ファイル azure-sig.json
を作成し、Azure 固有の情報を入力します。このようなファイルの例は、こちらで確認できます。
vSphere で、認証情報 JSON ファイルを作成し、その値を入力します。
{
"cluster": "",
"convert_to_template": "false",
"create_snapshot": "true",
"datacenter": "",
"datastore": "",
"folder": "",
"insecure_connection": "false",
"linked_clone": "true",
"network": "",
"password": "",
"resource_pool": "",
"template": "",
"username": "",
"vcenter_server": ""
}
ビルド元の Image Builder 構成バージョンを決定します。
TKG Image Builder
を検索し、使用可能なバージョンを一覧表示します。TKG-Image-Builder-for-Kubernetes-v1.25.7-on-TKG-v2.2.0-master.zip
は、Tanzu Kubernetes Grid v2.2 の Kubernetes v1.25.7 イメージをビルドします。次の手順では、Tanzu Kubernetes Grid v2.2 の Kubernetes v1.25.7 イメージをビルドする方法について説明します。
構成コードの zip ファイルをダウンロードし、その内容を展開します。
cd
で TKG-Image-Builder-
ディレクトリに移動し、tkg.json
ファイルが現在のディレクトリに配置されるようにします。
ワークステーションが VMware イメージ レジストリ projects.registry.vmware.com
にアクセスできることを確認します。
projects.registry.vmware.com
から目的のアーティファクト コンテナをダウンロードし、実行します。
docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
tkg.json
を編集して <IP>
および <PORT>
を入力します。
IP
は、Docker コンテナを実行しているマシンの IP アドレスに対応します。PORT
は、Docker ホストの未使用ポートをコンテナのポート 3000 に関連付けます(3001:3000
など)。コンテナは、ポート 3000 を介してアーティファクトを公開します。Photon-3 OVA をビルドする場合は、tkg.json
で "extra_rpms"
を編集して、サポートされている追加のカスタム パッケージを反映します。
"extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
FIPS 対応イメージをビルドするには、tkg.json
の次の行を削除します。
"ansible_user_vars": "install_fips=no"
インターネット制限:HTTP プロキシ サーバ経由でインターネットにアクセスする、インターネットが制限された環境のイメージをビルドするには、tkg.json
ファイルに次の情報を追加します。
{
"http_proxy": "http://proxy.acme.com:80",
"https_proxy": "http://proxy.acme.com:80",
"no_proxy": "localhost, 127.0.0.1, acme.com, 10.0.0.0/8"
}
GPU 対応クラスタ:vSphere 向けに GPU 対応クラスタのイメージをビルドするには、customizations.json
という名前のファイルを作成し、次の内容を追加します。
{
"vmx_version": "17"
}
customizations.json
を前の手順で編集した tkg.json
と同じディレクトリに保存します。
次のパラメータ文字列を収集して、次の手順でコマンドに接続します。これらの多くは、イメージのビルドに使用されるコンテナの /home/imagebuilder
ディレクトリに、現在の作業ディレクトリをコピーする docker run -v
パラメータを指定します。
AUTHENTICATION
:ローカル CLI ディレクトリをコピーします。
~/.aws:/home/imagebuilder/.aws
を使用します~/.azure:/home/imagebuilder/.azure
を使用します/PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json
SOURCES
:リポジトリの tkg.json
ファイルをコピーします。これにより、バージョン管理された OS、Kubernetes、コンテナ ネットワーク インターフェイス (CNI) のダウンロード ソースが一覧表示されます。イメージ:
/PATH/TO/tkg.json:/home/imagebuilder/tkg.json
を使用しますROLES
:Image Builder で必要な Ansible ロールを含むリポジトリの tkg
ディレクトリをコピーします。
/PATH/TO/tkg:/home/imagebuilder/tkg
を使用しますtkg.json
ファイルを編集して、custom_role_names
設定をエスケープ引用符 (\"
) で再フォーマットし、複数のロールを持つリストにします。例: "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
TESTS
:イメージのターゲット インフラストラクチャ、OS、および Kubernetes バージョン用に設計された goss
テスト ディレクトリをコピーします。
goss
ディレクトリにあるファイルのファイル名を使用します(amazon-ubuntu-1.25.7+vmware.1-goss-spec.yaml
など)。CUSTOMIZATIONS
:カスタマイズ ファイルを JSON 形式でコピーします。Image Builder ドキュメントの「カスタマイズ」を参照してください。変更を加える前に、ベスト プラクティスと推奨事項について VMware Customer Reliability Engineering (CRE) にお問い合わせください。PACKER_VAR_FILES
:Packer の変数を含む上記の JSON ファイルのスペース区切りリスト。AZURE-CREDS
:Image Builder ドキュメントに記載されている Azure 認証情報ファイルのパス。COMMAND
:カスタム イメージ OS に基づいて、次のいずれかのコマンドを使用します。vSphere および Azure イメージの場合、コマンドは build-node-ova-
および build-azure-sig-
で始まります。
build-ami-ubuntu-2004
:Ubuntu v20.04build-ami-ubuntu-1804
:Ubuntu v18.04build-ami-amazon-2
:Amazon Linux 2build-node-ova-vsphere-ubuntu-2004
:GPU 対応クラスタ上記の文字列を使用して、VMware レジストリ projects.registry.vmware.com
からプルされた Docker コンテナで Image Builder を実行します。
docker run -it --rm \
-v AUTHENTICATION \
-v SOURCES \
-v ROLES \
-v /PATH/TO/goss/TESTS.yaml:/home/imagebuilder/goss/goss.yaml \
-v /PATH/TO/CUSTOMIZATIONS.json:/home/imagebuilder/CUSTOMIZATIONS.json \
--env PACKER_VAR_FILES="tkg.json CUSTOMIZATIONS.json" \
--env-file AZURE-CREDS \
--env IB_OVFTOOL=1 \
projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
COMMAND
注Azure 用のイメージをビルドしていない場合は、
env-file
を省略します。このコマンドは完了までに数分かかる場合があります。
たとえば、Ubuntu v20.04 と Kubernetes v1.25.7 を使用して AWS で実行するカスタム イメージを作成するには、tkg.json
を含むディレクトリから実行します。
docker run -it --rm \
-v ~/.aws:/home/imagebuilder/.aws \
-v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
-v $(pwd)/tkg:/home/imagebuilder/tkg \
-v $(pwd)/goss/amazon-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
-v /PATH/TO/CUSTOMIZATIONS.json /home/imagebuilder/aws.json \
--env PACKER_VAR_FILES="tkg.json aws.json" \
--env IB_OVFTOOL=1 \
projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
build-ami-ubuntu-2004
vSphere の 場合は、上記で作成したカスタム コンテナ イメージを使用する必要があります。また、後の手順でカスタム TKr で渡した文字列と一致するバージョン文字列を設定する必要があります。VMware によって公開された OVA には v1.25.7+vmware.1-tkg.1
のようなバージョン文字列が含まれますが、-tkg.1
を組織にとって意味のある文字列で置換することを推奨します。このバージョン文字列を設定するには、次のように metadata.json
ファイルで定義します。
{
"VERSION": "v1.25.7+vmware.1-myorg.0"
}
OVA をビルドするときに、.ova
ファイルはワークステーションのローカル ファイルシステムに保存されます。これらの OVA を保存するフォルダは、コンテナ内の /home/imagebuilder/output
にマウントする必要があります。次に、コンテナ イメージを使用して OVA を作成します。
docker run -it --rm \
-v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
-v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
-v $(pwd)/tkg:/home/imagebuilder/tkg \
-v $(pwd)/goss/vsphere-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
-v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
-v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
--env PACKER_VAR_FILES="tkg.json vsphere.json" \
--env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
--env IB_OVFTOOL=1 \
projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
build-node-ova-vsphere-ubuntu-2004
GPU 対応クラスタの場合は、コマンドを実行して OVA を作成するときに、上記の手順で作成した customizations.json
ファイルを含める必要があります。
docker run -it --rm \
-v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
-v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
-v $(pwd)/tkg:/home/imagebuilder/tkg \
-v $(pwd)/goss/vsphere-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
-v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
-v $(pwd)/customizations.json:/home/imagebuilder/customizations.json \
-v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
--env PACKER_VAR_FILES="tkg.json vsphere.json customizations.json" \
--env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
--env IB_OVFTOOL=1 \
projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
build-node-ova-vsphere-ubuntu-2004
RHEL:RHEL OVA をビルドするには、macOS ではなく Linux マシンを使用する必要があります。これは、macOS の Docker が --network host
オプションをサポートしていないためです。
また、上記の docker run
コマンドに次のコマンドを追加して、Red Hat にライセンスされた OS を登録し、アップデートにサインアップする必要があります。
-v $(pwd)/isos/rhel-8.4-x86_64-dvd.iso:/rhel-8.4-x86_64-dvd.iso \
--network host \
--env RHSM_USER=USER --env RHSM_PASS=PASS
ここで、
RHSM_USER
と RHSM_PASS
は、Red Hat Subscription Manager アカウントのユーザー名とパスワードです。$(pwd)/isos/rhel-8.4-x86-64-dvd.iso
にあるローカル RHEL ISO パスを追加ボリュームとしてマッピングします。Linux イメージを将来の Kubernetes バージョンのデフォルトにするには、それに基づいて TKr を作成します。それ以外の場合は、「ワークロード クラスタに Linux イメージを使用する」に進みます。
次の図は、vSphere でカスタム Linux イメージの TKr を作成する方法の概要を示しています。
TKr を作成するには:
~/.config/tanzu/tkg/bom/
ディレクトリから、カスタム イメージの Kubernetes バージョンに対応する TKr BoM を開きます。たとえば、Kubernetes v1.25.7 の場合は、tkr-bom-v1.25.7+vmware.1-tkg.1.yaml
のようなファイル名になります。
ディレクトリに必要な TKr BoM ファイルがない場合は、「デフォルト以外の Kubernetes バージョンを使用してクラスタを展開する」の説明に従って、目的の Kubernetes バージョンのクラスタを展開して、このファイルを取り込むことができます。
BoM ファイルで、インフラストラクチャのイメージ定義ブロックを見つけます。vSphere の場合は ova
、AWS の場合は ami
、Azure の場合は azure
です。各イメージ定義ブロックには、osinfo.name
、osinfo.version
、および osinfo.arch
が含まれます。
osinfo.name
は OS 名です。たとえば、ubuntu
などです。サポートされている OS のリストを表示するには、「ターゲットのオペレーティング システム」を参照してください。osinfo.version
は OS バージョンです。たとえば、20.04
などです。サポートされているバージョンのリストを表示するには、「ターゲットのオペレーティング システム」を参照してください。osinfo.arch
は OS アーキテクチャです。サポートされる値は amd64
です。新しい OS イメージへの参照を追加するには、ターゲット インフラストラクチャに応じて、ova
、ami
、または azure
の下にイメージ定義ブロックを追加します。イメージ定義ブロックには、前述のように、osinfo.name
、osinfo.version
、および osinfo.arch
が含まれている必要があります。さらに、イメージ定義ブロックを追加する場合は、次のようにします。
vSphere:
name:
は、OS バージョンを含む OVA の一意の名前です(my-ova-ubuntu-2004
など)。version:
には、OVA を作成したときに metadata.json
で割り当てられた一意の VERSION
を使用します(v1.25.7+vmware.1-myorg.0
など)。注
version
は、metadata.json
内の同じVERSION
と完全に一致する必要があります。
id
値形式に従います。ただし、末尾には一意の 16 進数の文字列を使用します(ami-693a5e2348b25e428
など)。BoM ファイルでリージョンの下にイメージが定義されている場合は、カスタム イメージ定義ブロックがそのリージョンの最初にリストされている必要があります。各リージョン内で、クラスタの作成プロセスによって、リストされた最初の適切なイメージが選択されます。
release.version
値で、サフィックスを追加してカスタム バージョンを設定します。プリフィックスを追加してバージョンをカスタマイズしないでください。たとえば、v1.25.7+vmware.1-tkg.1
を v1.25.7+vmware.1-tkg.1-mycustomtkr
に変更します。
前の手順で release.version
に指定したのと同じカスタム サフィックスを使用して BoM ファイルを保存します。
ファイル名にプラス記号 (+
) が含まれている場合は、+
を 3 つのダッシュ (---
) に置き換えます。
たとえば、BOM ファイルを tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
として保存します。
ファイルのコンテンツをバイナリ文字列に base64
エンコードします。次に例を示します。
cat tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
ConfigMap YAML ファイルを作成します。たとえば、configmap-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
という名前を付けて、次のような値を指定します。
apiVersion: v1
kind: ConfigMap
metadata:
name: CUSTOM-TKG-BOM
labels:
tanzuKubernetesRelease: CUSTOM-TKR
binaryData:
bomContent: "BOM-BINARY-CONTENT"
ここで、
CUSTOM-TKG-BOM
は ConfigMap
の名前です。BOM ファイルで指定した TKr release.version
値を含め、+ 記号を 3 つのダッシュ (—) で置き換える必要があります。たとえば、v1.25.7---vmware.1-tkg.1-mycustomtkr
を設定します。CUSTOM-TKR
は TKr の名前で、CUSTOM-TKG-BOM
に指定した値と一致する必要があります。たとえば、v1.25.7---vmware.1-tkg.1-mycustomtkr
などです。BOM-BINARY-CONTENT
は、前の手順で生成したカスタマイズされた BoM ファイルの base64
エンコードされたコンテンツです。例:
apiVersion: v1
kind: ConfigMap
metadata:
name: v1.25.7---vmware.1-tkg.1-mycustomtkr
labels:
tanzuKubernetesRelease: v1.25.7---vmware.1-tkg.1-mycustomtkr
binaryData:
bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
ConfigMap
ファイルを保存し、kubectl
コンテキストを TKr を追加する管理クラスタに設定し、次のようにファイルをクラスタに適用します。
kubectl -n tkr-system apply -f configmap-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
TKr コントローラは、TanzuKubernetesRelease
を作成して、新しい ConfigMap
オブジェクトを調整します。デフォルトの調整時間は 600 秒です。この遅延を回避するには、TKr コントローラ ポッドを削除します。これにより、ポッドがすぐにリストアされ、調整されます。
tkr-system
名前空間内のポッドを一覧表示します。
kubectl get pod -n tkr-system
TKr コントローラ ポッドの名前を取得します。たとえば、tkr-controller-manager-f7bbb4bd4-d5lfd
のようになります。
ポッドを削除します。
kubectl delete pod -n tkr-system TKG-CONTROLLER
ここで、TKG-CONTROLLER
は TKr コントローラ ポッドの名前です。
カスタム TKr が追加されたことを確認するには、tanzu kubernetes-release get
または kubectl get tkr
を実行するか、上記で設定した CUSTOM-TKR
値を出力で探します。
カスタム TKr が kubectl
および tanzu
CLI によって一覧表示されたら、それを使用して以下の説明に従って管理クラスタまたはワークロード クラスタを作成できます。
ノードの基本 OS としてカスタム イメージを使用する管理クラスタを作成するには、次の手順を実行します。
クラウド プロバイダにイメージをアップロードします。
インストーラ インターフェイスを実行するときに、「基本 OS イメージを選択する」の説明に従って、[OS イメージ (OS Image)] ペインでカスタム イメージを選択します。
詳細については、「基本 OS イメージの選択を生成する方法」を参照してください。
Linux イメージからワークロード クラスタを作成する手順は、上記の「Linux イメージ用の TKr の作成」で TKr を作成したかどうかによって異なります。
TKr を作成した場合は、tanzu kubernetes-release get
によってリストされた TKr 名を tanzu cluster create
の --tkr
オプションに渡します。
TKr を作成しなかった場合は、次の手順を実行します。
「構成ファイルとオブジェクト仕様」の手順に従って、管理クラスタ構成ファイルをコピーして新しい名前で保存します。
新しい構成ファイルで、以下を追加または変更します。
VSPHERE_TEMPLATE: LINUX-IMAGE
ここで、LINUX-IMAGE
は、「Linux イメージのビルド」で作成した Linux イメージの名前です。
CLUSTER_NAME
とその設定が存在する場合は削除します。
「ワークロード クラスタの作成」の説明に従って、ワークロード クラスタを展開します。