このトピックでは、Windows ワーカー ノード上で Windows ベースのワークロードを実行するワークロード クラスタを作成および管理するために Tanzu Kubernetes Grid (TKG) が使用できる、Windows カスタム マシン イメージを作成する方法について説明します。
レガシー Windows コンポーネント(.NET Framework など)に基づいてアプリケーションをビルドし、vSphere に Windows コンテナを展開する場合は、次の手順に従って Windows カスタム マシン イメージをビルドします。次のセクションに分かれています。
注VMware は、プロキシが設定された環境またはエアギャップされた環境での Windows ワーカー ノードを持つ TKG ワークロード クラスタをサポートしていません。
カスタム マシン イメージをビルドするには、以下が必要です。
Linux ワークステーション。
注Kubernetes Image Builder で使用されるオープンソースの
packer
ユーティリティの問題により、MacOS マシンで Windows マシン イメージをビルドできません。
snap
の代わりに apt
を使用します。次の手順に従って、Ubuntu または Photon OVA イメージを vCenter Server にインポートし、カスタム イメージのテンプレートとして使用します。
次の手順に従って、Windows Server 2019 ISO および VMware Tools Windows ISO イメージをデータストアにインポートします。
iso
フォルダを開くか、フォルダが存在しない場合は [新規フォルダ] をクリックして作成します。iso
フォルダにアップロードします。次の構成を使用して、builder.yaml
という名前の YAML ファイルを作成します。
apiVersion: v1
kind: Namespace
metadata:
name: imagebuilder
---
apiVersion: v1
kind: Service
metadata:
name: imagebuilder-wrs
namespace: imagebuilder
spec:
selector:
app: image-builder-resource-kit
type: NodePort
ports:
- port: 3000
targetPort: 3000
nodePort: 30008
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: image-builder-resource-kit
namespace: imagebuilder
spec:
selector:
matchLabels:
app: image-builder-resource-kit
template:
metadata:
labels:
app: image-builder-resource-kit
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: windows-imagebuilder-resourcekit
image: projects.registry.vmware.com/tkg/windows-resource-bundle:v1.27.5_vmware.2-tkg.1
imagePullPolicy: Always
ports:
- containerPort: 3000
windows-resource-bundle
コンテナ イメージには、Image Builder が Windows OVA をビルドするために必要な Kubernetes Windows バイナリがあります。
次のコマンドを実行して、Kubernetes CLI を管理クラスタに接続します。
kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
ここで、MY-MGMT-CLUSTER
は管理クラスタの名前です。
builder.yaml
構成ファイルを適用します。
kubectl apply -f ./builder.yaml
これにより、マシンがイメージのビルド プロセス中に必要なファイルを HTTP の場所から取得できるコンテナが展開されます。出力は次のようになります。
namespace/imagebuilder created
service/imagebuilder-wrs created
deployment.apps/image-builder-resource-kit created
コンテナが実行されていることを確認するには、次のコマンドを実行します。
kubectl get pods -n imagebuilder
出力は次のようになります。
NAME READY STATUS RESTARTS AGE
image-builder-resource-kit-756ccdc4ff-rcxpq 1/1 Running 0 4m16s
管理クラスタの制御プレーン IP アドレスを取得します。
クラスタのノードを wide
出力とともにリストします。
kubectl get nodes -o wide
出力から、ROLE
が control-plane
としてリストされているノードの INTERNAL-IP
値を記録します。
次の構成を使用して、空のフォルダに windows.json
という名前の JSON ファイルを作成します。
{
"additional_executables_destination_path": "C:\\ProgramData\\Temp",
"additional_executables_list": "http://CONTROLPLANE-IP:30008/files/antrea-windows/antrea-windows-advanced.zip",
"additional_executables": "true",
"additional_prepull_images": "mcr.microsoft.com/windows/servercore:ltsc2019",
"build_version": "windows-2019-kube-v1.27.5",
"cloudbase_init_url": "http://CONTROLPLANE-IP:30008/files/cloudbase_init/CloudbaseInitSetup_1_1_4_x64.msi",
"cluster": "VSPHERE-CLUSTER-NAME",
"containerd_sha256_windows": "2e0332aa57ebcb6c839a8ec807780d662973a15754573630bea249760cdccf2a",
"containerd_url": "http://CONTROLPLANE-IP:30008/files/containerd/cri-containerd-v1.6.18+vmware.1.windows-amd64.tar",
"containerd_version": "v1.6.18",
"convert_to_template": "true",
"create_snapshot": "false",
"datacenter": "DATACENTER-NAME",
"datastore": "DATASTORE-NAME",
"disable_hypervisor": "false",
"disk_size": "40960",
"goss_inspect_mode": "true",
"insecure_connection": "true",
"kubernetes_base_url": "http://CONTROLPLANE-IP:30008/files/kubernetes/",
"kubernetes_semver": "v1.27.5+vmware.2",
"kubernetes_series": "v1.27.5",
"linked_clone": "false",
"load_additional_components": "true",
"netbios_host_name_compatibility": "false",
"network": "NETWORK",
"nssm_url": "http://CONTROLPLANE-IP:30008/files/nssm/nssm.exe",
"os_iso_path": "OS-ISO-PATH",
"password": "VCENTER-PASSWORD",
"pause_image": "mcr.microsoft.com/oss/kubernetes/pause:3.6",
"prepull": "false",
"resource_pool": "",
"runtime": "containerd",
"template": "",
"unattend_timezone": "WINDOWS-TIMEZONE",
"username": "VCENTER-USERNAME",
"vcenter_server": "VCENTER-IP",
"vmtools_iso_path": "VMTOOLS-ISO-PATH",
"windows_updates_categories": "CriticalUpdates SecurityUpdates UpdateRollups",
"windows_updates_kbs": "",
"wins_url": ""
}
ここで、
WINDOWS-TIMEZONE
は、環境の Windows タイムゾーンです。たとえば、GMT Standard Time
です。VSPHERE-CLUSTER-NAME
は、vSphere クラスタの名前です。たとえば、VSAN-Cluster
です。VCENTER-PASSWORD
は vCenter Server のパスワードです。VCENTER-USERNAME
は vCenter Server のユーザー名です。DATASTORE-NAME
は、vCenter Server に表示されるデータストアの名前です。たとえば、vsanDatastore
などです。DATACENTER-NAME
は、vCenter Server に表示されるデータセンターの名前です。たとえば、VSAN-DC
などです。VMTOOLS-ISO-PATH
は、次のような構造を持つ VMware Tools ISO ファイルへのパスです。[DATASTORE-NAME] iso/VMware-tools-windows-11.2.5-17337674.iso
。NETWORK
は、vCenter Server の [メニュー] > [ネットワーク] > [ネットワーク] に表示されるネットワークまたはポート グループの名前です。たとえば、VM Network
です。OS-ISO-PATH
は、次のような構造を持つ Windows Server 2019 ISO ファイルへのパスです。[DATASTORE-NAME] iso/en-us_windows_server_2019_updated_aug_2022_x64_dvd_a6431a28.iso
。VCENTER-IP
は、vCenter Server の IP アドレスまたは FQDN です。CONTROLPLANE-IP
は、上記で取得した管理クラスタの IP アドレスです。CONTAINERD-URL
および CONTAINERD-SHA
は、上記で取得した containerd.path
および containerd.sha256
値です。制御プレーンの nodePort
エンドポイントで Windows リソース バンドルをクエリし、既存のファイル パスを検証します。
curl http://CONTROLPLANE-IP:30008
次の手順に従って、Windows 設定を含む XML ファイルを追加します。
autounattend.xml
に移動します。<ProductKey>...</ProductKey>
を削除します。autounattend.xml
に名前を付けます。windows.json
ファイルと同じフォルダに保存します。windows.json
および autounattend.xml
ファイルを含むフォルダから、次のコマンドを実行してカスタム イメージをビルドします。
docker run -it --rm --mount type=bind,source=$(pwd)/windows.json,target=/windows.json --mount type=bind,source=$(pwd)/autounattend.xml,target=/home/imagebuilder/packer/ova/windows/windows-2019/autounattend.xml -e PACKER_VAR_FILES="/windows.json" -e IB_OVFTOOL=1 -e IB_OVFTOOL_ARGS='--skipManifestCheck' -e PACKER_FLAGS='-force -on-error=ask' -t projects.registry.vmware.com/tkg/image-builder:v0.1.14_vmware.1 build-node-ova-vsphere-windows-2019
エラーが表示されたり、ビルドがハングしたりする場合は、ワークステーションの Packer ログを参照して、windows.json
構成ファイルの問題をトラブルシューティングします。また、上記のコマンド ラインに -e PACKER_LOG=1
を追加して、コンソールでより詳細なログを受信することもできます。
Windows イメージが使用できる状態になっていることを確認するには、vCenter Server でホストまたはクラスタを選択し、[仮想マシン] タブ、[仮想マシン テンプレート] の順に選択して、Windows イメージが一覧表示されていることを確認します。
この手順では、Windows ワークロード クラスタの構成ファイルを作成し、構成ファイルで Windows イメージを参照してから、Tanzu CLI を使用してワークロード クラスタを作成します。
「スタンドアローン管理クラスタを使用する vSphere の構成ファイル」の手順に従って、管理クラスタ構成ファイルをコピーして新しい名前で保存します。
新しい構成ファイルで、以下を追加または変更します。
IS_WINDOWS_WORKLOAD_CLUSTER: "true"
「ワークロード クラスタの作成」の説明に従って、ワークロード クラスタを展開します。