Windows カスタム マシン イメージ

このトピックでは、Windows ワーカー ノード上で Windows ベースのワークロードを実行するワークロード クラスタを作成および管理するために Tanzu Kubernetes Grid (TKG) が使用できる、Windows カスタム マシン イメージを作成する方法について説明します。

レガシー Windows コンポーネント(.NET Framework など)に基づいてアプリケーションをビルドし、vSphere に Windows コンテナを展開する場合は、次の手順に従って Windows カスタム マシン イメージをビルドします。次のセクションに分かれています。

VMware は、プロキシが設定された環境またはエアギャップされた環境での Windows ワーカー ノードを持つ TKG ワークロード クラスタをサポートしていません。

Windows イメージの前提条件

カスタム マシン イメージをビルドするには、以下が必要です。

  • vSphere 6.7 Update 3 以降。
  • Linux ワークステーション。

    Kubernetes Image Builder で使用されるオープンソースの packer ユーティリティの問題により、MacOS マシンで Windows マシン イメージをビルドできません。

  • Docker デスクトップ。インストールするには、「Docker 製品のダウンロード ページ」を参照してください。CLI から Docker をインストールするには、snap の代わりに apt を使用します。
  • Tanzu CLI。インストールするには、「スタンドアローン管理クラスタで使用する Tanzu CLI およびその他のツールのインストール」の「Tanzu CLI および kubectl のダウンロードと展開」を参照してください。
  • TKG v2.2 スタンドアローン管理クラスタ。
  • 最近(2021 年 4 月以降)の Windows Server 2019 ISO イメージ。Microsoft Developer Network (MSDN) または Volume Licensing (VL) アカウントからダウンロードします。評価メディアの使用はサポートも推奨もされていません。
  • 最新の VMware Tools Windows ISO イメージ。VMware Tools からダウンロードします。
  • カスタム Windows仮想マシン テンプレートに対応できる vCenter Server 上のデータストア。起動サイズが 10 GB(シン プロビジョニング)を超える場合があります。

Windows イメージのビルド

  1. 次の手順に従って、Ubuntu または Photon OVA イメージを vCenter Server にインポートし、カスタム イメージのテンプレートとして使用します。

    1. https://customerconnect.vmware.com にアクセスし、VMware Customer Connect の認証情報を使用してログインします。
    2. Tanzu Kubernetes Grid のダウンロード ページに移動します。
    3. VMware Tanzu Kubernetes Grid の行で、[ダウンロードに移動] をクリックします。
    4. [バージョンの選択 (Select Version)] ドロップダウンで、[2.2.0] を選択します。
    5. [製品のダウンロード (Product Downloads)] で、Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.2.0 というラベルの付いたセクションまでスクロールして、Ubuntu 2004 Kubernetes v1.25.7 OVA または Photon v3 Kubernetes v1.25.7 OVA を見つけ、[今すぐダウンロード (Download Now)] をクリックします。
    6. vCenter Server にログインします。
    7. ホストまたはクラスタを右クリックし、[OVF テンプレートの展開]… をクリックしてイメージをインポートします。
    8. インポートしたイメージを右クリックし、[テンプレート] にカーソルを合わせ、[テンプレートに変換] をクリックします。
    9. テンプレートの準備ができていることを確認するには、ホストまたはクラスタを選択し、[仮想マシン] タブ、[仮想マシン テンプレート] の順に選択して、テンプレートが一覧表示されていることを確認します。
  2. 次の手順に従って、Windows Server 2019 ISO および VMware Tools Windows ISO イメージをデータストアにインポートします。

    1. vCenter Server にログインします。
    2. データストアに移動し、[ファイル] タブをクリックします。
    3. iso フォルダを開くか、フォルダが存在しない場合は [新規フォルダ] をクリックして作成します。
    4. 両方の ISO ファイルを iso フォルダにアップロードします。
  3. 次の構成を使用して、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.25.7_vmware.2-tkg.1
           imagePullPolicy: Always
           ports:
             - containerPort: 3000
    
  4. 次のコマンドを実行して、Kubernetes CLI を管理クラスタに接続します。

    kubectl config use-context MY-MGMT-CLUSTER-admin@MY-MGMT-CLUSTER
    

    ここで、MY-MGMT-CLUSTER は管理クラスタの名前です。

  5. builder.yaml 構成ファイルを適用します。

    kubectl apply -f ./builder.yaml
    

    これにより、マシンがイメージのビルド プロセス中に必要なファイルを HTTP の場所から取得できるコンテナが展開されます。出力は次のようになります。

    namespace/imagebuilder created
    service/imagebuilder-wrs created
    deployment.apps/image-builder-resource-kit created
    
  6. コンテナが実行されていることを確認するには、次のコマンドを実行します。

    kubectl get pods -n imagebuilder
    

    出力は次のようになります。

    NAME                                          READY   STATUS    RESTARTS   AGE
    image-builder-resource-kit-756ccdc4ff-rcxpq   1/1     Running   0          4m16s
    
  7. 管理クラスタの制御プレーン IP アドレスを取得します。

    1. クラスタのノードを wide 出力とともにリストします。

      kubectl get nodes -o wide
      
    2. 出力から、ROLEcontrol-plane としてリストされているノードの INTERNAL-IP 値を記録します。

  8. 次の構成を使用して、空のフォルダに 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.25.7",
      "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.25.7+vmware.2",
      "kubernetes_series": "v1.25.7",
      "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_version": ""
    }
    

    ここで、

    • 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 値です。
  9. 制御プレーンの nodePort エンドポイントで Windows リソース バンドルをクエリし、既存のファイル パスを検証します。

    curl http://CONTROLPLANE-IP:30008

  10. 次の手順に従って、Windows 設定を含む XML ファイルを追加します。

    1. VMware {code} Sample Exchangeautounattend.xml に移動します。
    2. [ダウンロード] を選択します。
    3. Windows Server 2019 評価版を使用している場合は、<ProductKey>...</ProductKey> を削除します。
    4. ファイル autounattend.xml に名前を付けます。
    5. そのファイルを、windows.json ファイルと同じフォルダに保存します。
  11. 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.3 build-node-ova-vsphere-windows-2019
    

    エラーが表示されたり、ビルドがハングしたりする場合は、ワークステーションの Packer ログを参照して、windows.json 構成ファイルの問題をトラブルシューティングします。また、上記のコマンド ラインに -e PACKER_LOG=1 を追加して、コンソールでより詳細なログを受信することもできます。

  12. Windows イメージが使用できる状態になっていることを確認するには、vCenter Server でホストまたはクラスタを選択し、[仮想マシン] タブ、[仮想マシン テンプレート] の順に選択して、Windows イメージが一覧表示されていることを確認します。

ワークロード クラスタに Windows イメージを使用する

この手順では、Windows ワークロード クラスタの構成ファイルを作成し、構成ファイルで Windows イメージを参照してから、Tanzu CLI を使用してワークロード クラスタを作成します。

  1. スタンドアローン管理クラスタを使用する vSphere の構成ファイル」の手順に従って、管理クラスタ構成ファイルをコピーして新しい名前で保存します。

  2. 新しい構成ファイルで、以下を追加または変更します。

    IS_WINDOWS_WORKLOAD_CLUSTER: "true"
    
  3. ワークロード クラスタの作成」の説明に従って、ワークロード クラスタを展開します。

check-circle-line exclamation-circle-line close-line
Scroll to top icon