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

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

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

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

Windows イメージの前提条件

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

  • vSphere 7 以降。
  • Linux ワークステーション。

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

  • Docker デスクトップ。インストールするには、「Docker 製品のダウンロード ページ」を参照してください。CLI から Docker をインストールするには、snap の代わりに apt を使用します。
  • Tanzu CLI。インストールするには、「スタンドアローン管理クラスタで使用する Tanzu CLI と Kubernetes CLI のインストール」の「Tanzu CLI のインストール」を参照してください。
  • TKG v2.3 スタンドアローン管理クラスタ。
  • 最近(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. VMware Customer Connect にアクセスし、VMware Customer Connect の認証情報を使用してログインします。
    2. Tanzu Kubernetes Grid v2.3.1 製品ダウンロード」を参照します。
    3. Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.3 というラベルの付いたセクションまでスクロールして、Ubuntu 2004 Kubernetes v1.26.8 OVA または Photon v3 Kubernetes v1.26.8 OVA を見つけ、[今すぐダウンロード (Download Now)] をクリックします。
    4. vCenter Server にログインします。
    5. ホストまたはクラスタを右クリックし、[OVF テンプレートの展開]… をクリックしてイメージをインポートします。
    6. インポートしたイメージを右クリックし、[テンプレート] にカーソルを合わせ、[テンプレートに変換] をクリックします。
    7. テンプレートの準備ができていることを確認するには、ホストまたはクラスタを選択し、[仮想マシン] タブ、[仮想マシン テンプレート] の順に選択して、テンプレートが一覧表示されていることを確認します。
  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.26.8_vmware.2-tkg.1
           imagePullPolicy: Always
           ports:
             - containerPort: 3000
    

    windows-resource-bundle コンテナ イメージには、Image Builder が Windows OVA をビルドするために必要な Kubernetes Windows バイナリがあります。

  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",
      "additional_executables": "true",
      "additional_prepull_images": "mcr.microsoft.com/windows/servercore:ltsc2019",
      "build_version": "windows-2019-kube-v1.26.8",
      "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.26.8+vmware.2",
      "kubernetes_series": "v1.26.8",
      "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 値です。
  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.14_vmware.1 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