レガシー Windows コンポーネント(.NET Framework など)に基づいてアプリケーションをビルドし、vSphere に Windows コンテナを展開する場合は、次の手順に従って Windows カスタム マシン イメージをビルドします。次のセクションに分かれています。
注Tanzu Kubernetes Grid v1.6 で実行されている Windows ワークロード クラスタは、v2.1 にアップグレードできません。回避策については、TKG v2.1 のリリース ノートを参照してください。
カスタム マシン イメージをビルドするには、以下が必要です。
snap
の代わりに apt
を使用します。kubectl
のダウンロードと展開」を参照してください。次の手順に従って、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.24.10_vmware.1-tkg.2
imagePullPolicy: Always
ports:
- containerPort: 3000
次のコマンドを実行して、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,http://CONTROLPLANE-IP:30008/files/kubernetes/kube-proxy.exe",
"additional_executables": "true",
"additional_prepull_images": "mcr.microsoft.com/windows/servercore:ltsc2019",
"build_version": "windows-2019-kube-v1.24.10",
"cloudbase_init_url": "http://CONTROLPLANE-IP:30008/files/cloudbase_init/CloudbaseInitSetup_1_1_4_x64.msi",
"cluster": "VSPHERE-CLUSTER-NAME",
"containerd_sha256_windows": "d29f5276584e869a5933db668fd6f17b7417c48ac04dd1c2a2c7f412f948f89c",
"containerd_url": "http://CONTROLPLANE-IP:30008/files/containerd/cri-containerd-v1.6.6+vmware.3.windows-amd64.tar",
"containerd_version": "v1.6.6",
"convert_to_template": "true",
"create_snapshot": "false",
"datacenter": "DATACENTER-NAME",
"datastore": "DATASTORE-NAME",
"disable_hypervisor": "false",
"disk_size": "40960",
"goss_inspect_mode": "true",
"goss_url": "http://CONTROLPLANE-IP:30008/files/goss/goss-alpha-windows-amd64.exe",
"insecure_connection": "true",
"kubernetes_base_url": "http://CONTROLPLANE-IP:30008/files/kubernetes/",
"kubernetes_semver": "v1.24.10+vmware.1",
"kubernetes_series": "v1.24.10",
"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": "http://CONTROLPLANE-IP:30008/files/wins/wins.exe",
"wins_version": "v0.4.11"
}
ここで、
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.13_vmware.2 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"
「ワークロード クラスタの作成」の説明に従って、ワークロード クラスタを展開します。