Benutzerdefinierte Windows-Maschinen-Images

Wenn Sie eine Anwendung auf Basis von Legacy-Windows-Komponenten (beispielsweise .NET Framework) erstellen und Windows-Container auf vSphere bereitstellen möchten, führen Sie dieses Verfahren durch, um ein benutzerdefiniertes Windows-Maschinen-Image zu erstellen. Das Verfahren ist in die folgenden Abschnitte unterteilt:

Hinweis

Auf Tanzu Kubernetes Grid v1.6 ausgeführte Windows-Arbeitslastcluster können nicht auf v2.1 aktualisiert werden. Eine Problemumgehung finden Sie in den Versionshinweisen zu TKG v2.1.

Voraussetzungen für Windows-Images

Zur Erstellung eines benutzerdefinierten Maschinen-Image benötigen Sie Folgendes:

  • vSphere 6.7 Update 3 oder höher.
  • Eine Linux-Workstation.
  • Docker Desktop. Informationen zur Installation finden Sie auf der Produktdownloadseite von Docker. Verwenden Sie apt anstelle von snap, um Docker über eine CLI zu installieren.
  • Die Tanzu CLI. Informationen zur Installation finden Sie unter Herunterladen und Entpacken der Tanzu CLI und kubectl in Installieren der Tanzu CLI und anderer Tools für die Verwendung mit eigenständigen Verwaltungsclustern.
  • Ein eigenständiger TKG v2.1-Verwaltungscluster.
  • Ein aktuelles (vor April 2021) Windows Server 2019-ISO-Image. Laden Sie es über Ihr MSDN- (Microsoft Developer Network) oder VL-Konto (Volume Licensing) herunter. Die Verwendung von Bewertungsmedien wird weder unterstützt noch empfohlen.
  • Das aktuelle Windows-ISO-Image von VMware Tools. Laden Sie es unter VMware Tools herunter.
  • Ein Datenspeicher in Ihrem vCenter, der die benutzerdefinierte Windows-VM-Vorlage mit einer möglichen Anfangsgröße von mehr als 10 GB (Thin Provisioned) aufnehmen kann.

Erstellen eines Windows-Images

  1. Importieren Sie das Ubuntu- oder Photon-OVA-Image in vCenter, um es als Vorlage für Ihr benutzerdefiniertes Image zu verwenden, indem Sie die folgenden Schritte ausführen:

    1. Navigieren Sie zu https://customerconnect.vmware.com und melden Sie sich mit Ihren Anmeldedaten für VMware Customer Connect an.
    2. Navigieren Sie zur Downloadseite von Tanzu Kubernetes Grid.
    3. Klicken Sie in der Zeile VMware Tanzu Kubernetes Grid auf Zu den Downloads (Go to Downloads).
    4. Wählen Sie im Dropdown-Menü Version auswählen (Select Version) die Option 2.1 aus.
    5. Führen Sie unter Produktdownloads (Product Downloads) einen Bildlauf zum Abschnitt mit der Bezeichnung Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.1 durch, suchen Sie nach der Ubuntu 2004 Kubernetes v1.24.10-OVA oder der Photon v3 Kubernetes v1.24.10-OVA und klicken Sie auf Jetzt herunterladen (Download Now).
    6. Melden Sie sich bei vCenter an.
    7. Klicken Sie mit der rechten Maustaste auf Ihren Host oder Cluster und klicken Sie auf OVF-Vorlage bereitstellen (Deploy OVF Template)…, um das Image zu importieren.
    8. Klicken Sie mit der rechten Maustaste auf das importierte Image, bewegen Sie den Mauszeiger über Vorlage (Template) und klicken Sie auf In Vorlage konvertieren (Convert to Template).
    9. Um sicherzustellen, dass die Vorlage verwendet werden kann, wählen Sie zunächst den Host oder Cluster, dann die Registerkarte VMs und anschließend VM-Vorlagen (VM Templates) aus, um die aufgelistete Vorlage anzuzeigen.
  2. Importieren Sie die ISO-Images von Windows Server 2019 und VMware Tools in Ihren Datenspeicher, indem Sie die folgenden Schritte durchführen:

    1. Melden Sie sich bei vCenter an.
    2. Navigieren Sie zum Datenspeicher und klicken Sie auf die Registerkarte Files (Dateien).
    3. Öffnen Sie den Ordner iso oder erstellen Sie ihn gegebenenfalls, indem Sie auf Neuer Ordner (New Folder) klicken.
    4. Laden Sie beide ISO-Dateien in den Ordner iso hoch.
  3. Erstellen Sie eine YAML-Datei namens builder.yaml mit der folgenden Konfiguration:

    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
    
  4. Verbinden Sie die Kubernetes-CLI mit Ihrem Verwaltungscluster, indem Sie Folgendes ausführen:

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

    Dabei gilt: MY-MGMT-CLUSTER ist der Name des Verwaltungsclusters.

  5. Wenden Sie die Konfigurationsdatei builder.yaml an.

    kubectl apply -f ./builder.yaml
    

    Hiermit wird ein Container bereitgestellt, mit dem die Maschine die benötigten Dateien während der Image-Erstellung aus einem HTTP-Speicherort abrufen kann. Die Ausgabe entspricht:

    namespace/imagebuilder created
    service/imagebuilder-wrs created
    deployment.apps/image-builder-resource-kit created
    
  6. Um sicherzustellen, dass der Container ausgeführt wird, führen Sie Folgendes aus:

    kubectl get pods -n imagebuilder
    

    Die Ausgabe entspricht:

    NAME                                          READY   STATUS    RESTARTS   AGE
    image-builder-resource-kit-756ccdc4ff-rcxpq   1/1     Running   0          4m16s
    
  7. Rufen Sie eine IP-Adresse der Steuerungsebene für den Verwaltungscluster ab:

    1. Listen Sie die Knoten des Clusters mit der Ausgabe wide auf:

      kubectl get nodes -o wide
      
    2. Notieren Sie in der Ausgabe den Wert INTERNAL-IP des Knotens mit ROLE, die als control-plane aufgeführt ist.

  8. Erstellen Sie eine JSON-Datei in einem leeren Ordner namens windows.json mit der folgenden Konfiguration:

    {
      "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"
    }
    

    Dabei gilt:

    • WINDOWS-TIMEZONE ist die Windows-Zeitzone für Ihre Umgebung. Beispiel: GMT Standard Time.
    • VSPHERE-CLUSTER-NAME ist der Name des vSphere-Clusters. Beispiel: VSAN-Cluster.
    • VCENTER-PASSWORD ist das vCenter-Kennwort.
    • VCENTER-USERNAME ist der vCenter-Benutzername.
    • DATASTORE-NAME ist der Name des Datenspeichers, der in vCenter angezeigt wird. Beispiel: vsanDatastore.
    • DATACENTER-NAME ist der Name des Datencenters, der in vCenter angezeigt wird. Beispiel: VSAN-DC.
    • VMTOOLS-ISO-PATH ist der Pfad der ISO-Datei von VMware Tools mit folgender Struktur: [DATASTORE-NAME] iso/VMware-tools-windows-11.2.5-17337674.iso.
    • NETWORK ist der Name eines Netzwerks oder einer Portgruppe, der in vCenter unter Menü > Netzwerk > Netzwerke (Menu > Networking > Networks) angezeigt wird. Beispiel: VM Network.
    • OS-ISO-PATH ist der Pfad der ISO-Datei von Windows Server 2019 mit folgender Struktur: [DATASTORE-NAME] iso/en-us_windows_server_2019_updated_aug_2022_x64_dvd_a6431a28.iso.
    • VCENTER-IP ist die IP-Adresse oder der FQDN des vCenter Servers.
    • CONTROLPLANE-IP ist die IP-Adresse des Verwaltungsclusters, die oben abgerufen wurde.
    • CONTAINERD-URL und CONTAINERD-SHA sind die oben abgerufenen Werte für containerd.path und containerd.sha256.
  9. Stellen Sie eine Abfrage an das Windows-Ressourcenpaket auf dem nodePort-Endpoint der Steuerungsebene ab und überprüfen Sie den vorhandenen Dateipfad:

    curl http://CONTROLPLANE-IP:30008

  10. Fügen Sie die XML-Datei mit den Windows-Einstellungen hinzu, indem Sie die folgenden Schritte durchführen:

    1. Navigieren Sie zur Datei autounattend.xml in VMware {code} Sample Exchange.
    2. Wählen Sie Herunterladen (Download) aus.
    3. Wenn Sie die Evaluierungsversion von Windows Server 2019 verwenden, entfernen Sie <ProductKey>...</ProductKey>.
    4. Benennen Sie die Datei autounattend.xml.
    5. Speichern Sie die Datei im selben Ordner wie die Datei windows.json.
  11. Erstellen Sie im Ordner mit den Dateien windows.json und autounattend.xml das benutzerdefinierte Image, indem Sie folgenden Befehl ausführen:

    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
    

    Wenn ein Fehler auftritt oder der Build nicht mehr reagiert, beheben Sie mithilfe der Packer-Protokolle auf Ihrer Workstation Probleme in der Konfigurationsdatei windows.json. Zusätzlich können Sie -e PACKER_LOG=1 zur obigen Befehlszeile hinzufügen, um ausführlichere Protokolle in Ihrer Konsole zu erhalten.

  12. Um sicherzustellen, dass das Windows-Image verwendet werden kann, wählen Sie zunächst Ihren Host oder Cluster in vCenter, dann die Registerkarte VMs und anschließend VM-Vorlagen (VM Templates) aus, um das Windows-Image anzuzeigen.

Verwenden eines Windows-Images für einen Arbeitslastcluster

Mit diesem Verfahren erstellen Sie eine Konfigurationsdatei für Ihren Windows-Arbeitslastcluster, verweisen in der Konfigurationsdatei auf das Windows-Image und verwenden dann die Tanzu CLI zum Erstellen des Arbeitslastclusters.

  1. Kopieren Sie die Konfigurationsdatei des Verwaltungsclusters und speichern Sie sie unter einem neuen Namen, indem Sie das Verfahren unter vSphere mit Konfigurationsdateien für eigenständige Verwaltungscluster durchführen.

  2. Ändern oder fügen Sie in der neuen Konfigurationsdatei Folgendes hinzu:

    IS_WINDOWS_WORKLOAD_CLUSTER: "true"
    
  3. Stellen Sie einen Arbeitslastcluster gemäß der Beschreibung unter Erstellen von Arbeitslastclustern bereit.

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