Immagini delle macchine personalizzate di Windows

In questo argomento viene descritto come creare un'immagine della macchina personalizzata di Windows che Tanzu Kubernetes Grid (TKG) può utilizzare per creare e gestire cluster del carico di lavoro che eseguono carichi di lavoro basati su Windows nei nodi di lavoro di Windows.

Se si sta creando un'applicazione basata su componenti legacy di Windows (come.NET Framework) e si desidera distribuire container Windows in vSphere, eseguire questa procedura per creare un'immagine della macchina personalizzata di Windows. È suddivisa nelle sezioni seguenti:

Nota

VMware non supporta i cluster del carico di lavoro TKG con nodi di lavoro di Windows in ambienti con proxy o air gap.

Prerequisiti dell'immagine di Windows

Per creare un'immagine di macchina personalizzata, è necessario quanto segue:

  • vSphere 6.7 Update 3 o versioni successive.
  • Una workstation Linux.

    Nota

    A causa di un problema relativo all'utilità packer open source utilizzata da Kubernetes Image Builder, non è possibile creare un'immagine di macchina Windows in una macchina MacOS.

  • Docker Desktop. Per installarlo, vedere la pagina di download del prodotto Docker. Utilizzare apt anziché snap per installare Docker da una CLI.
  • La CLI di Tanzu. Per eseguire l'installazione, vedere Download e decompressione della CLI di Tanzu e kubectl in Installazione della CLI di Tanzu e altri strumenti per l'utilizzo con cluster di gestione autonomi.
  • Un cluster di gestione autonomo TKG v2.2.
  • Un'immagine ISO recente (successiva ad aprile 2021) di Windows Server 2019. Eseguire il download tramite l'account Microsoft Developer Network (MSDN) o Volume Licensing (VL). L'uso di un supporto di valutazione non è supportato, né consigliato.
  • L'immagine ISO di Windows più recente per VMware Tools. Eseguire il download da VMware Tools.
  • Un datastore in vCenter che possa ospitare il modello di macchina virtuale Windows personalizzato, che può avere dimensioni iniziali superiori a 10 GB (con thin provisioning).

Creazione di un'immagine di Windows

  1. Importare l'immagine OVA di Ubuntu o Photon in vCenter per utilizzarla come modello per l'immagine personalizzata eseguendo i passaggi seguenti:

    1. Passare a https://customerconnect.vmware.com e accedere con le credenziali di VMware Customer Connect.
    2. Passare alla pagina dei download di Tanzu Kubernetes Grid.
    3. Nella riga VMware Tanzu Kubernetes Grid fare clic su Vai ai download (Go to Downloads).
    4. Nel menu a discesa Seleziona versione (Select Version) selezionare 2.2.0.
    5. In Download prodotti (Product Downloads), scorrere fino alla sezione denominata Kubernetes OVAs for VMware Tanzu Kubernetes Grid 2.2.0, individuare Ubuntu 2004 Kubernetes v1.25.7 OVA o Photon v3 Kubernetes v1.25.7 OVA e fare clic su Scarica ora (Download Now).
    6. Accedere a vCenter.
    7. Fare clic con il pulsante destro del mouse sull'host o sul cluster e scegliere Distribuisci modello OVF… per importare l'immagine.
    8. Fare clic con il pulsante destro del mouse sull'immagine importata, passare il puntatore del mouse su Modello e fare clic su Converti in modello.
    9. Per assicurarsi che il modello sia pronto per l'utilizzo, selezionare l'host o il cluster, selezionare la scheda Macchine virtuali, quindi selezionare Modelli macchina virtuale per visualizzare il modello nell'elenco.
  2. Importare l'immagine ISO di Windows Server 2019 e le immagini ISO di Windows per VMware Tools nel datastore eseguendo questi passaggi:

    1. Accedere a vCenter.
    2. Passare al datastore e fare clic sulla scheda File.
    3. Aprire la cartella iso oppure crearne una se non esiste facendo clic su Nuova cartella.
    4. Caricare entrambi i file ISO nella cartella iso.
  3. Creare un file YAML denominato builder.yaml con la configurazione seguente:

    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. Connettere la CLI di Kubernetes al cluster di gestione eseguendo:

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

    In cui MY-MGMT-CLUSTER è il nome del cluster di gestione.

  5. Applicare il file di configurazione builder.yaml.

    kubectl apply -f ./builder.yaml
    

    Viene distribuito un container che consente alla macchina di recuperare i file di cui ha bisogno da una posizione HTTP durante il processo di creazione dell'immagine. L'output è simile a:

    namespace/imagebuilder created
    service/imagebuilder-wrs created
    deployment.apps/image-builder-resource-kit created
    
  6. Per assicurarsi che il container sia in esecuzione, eseguire:

    kubectl get pods -n imagebuilder
    

    L'output è simile a:

    NAME                                          READY   STATUS    RESTARTS   AGE
    image-builder-resource-kit-756ccdc4ff-rcxpq   1/1     Running   0          4m16s
    
  7. Recuperare l'indirizzo IP di un piano di controllo per il cluster di gestione:

    1. Elencare i nodi del cluster con l'output di wide:

      kubectl get nodes -o wide
      
    2. Nell'output, prendere nota del valore INTERNAL-IP del nodo con ROLE elencato come control-plane.

  8. Creare un file JSON in una cartella vuota denominata windows.json con la configurazione seguente:

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

    In cui:

    • WINDOWS-TIMEZONE è il fuso orario di Windows per l'ambiente in uso. Ad esempio, GMT Standard Time.
    • VSPHERE-CLUSTER-NAME è il nome del cluster vSphere. Ad esempio, VSAN-Cluster.
    • VCENTER-PASSWORD è la password di vCenter.
    • VCENTER-USERNAME è il nome utente di vCenter.
    • DATASTORE-NAME è il nome del datastore che viene visualizzato in vCenter. Ad esempio vsanDatastore.
    • DATACENTER-NAME è il nome del data center che viene visualizzato in vCenter. Ad esempio VSAN-DC.
    • VMTOOLS-ISO-PATH è il percorso del file ISO di VMware Tools strutturato come segue: [DATASTORE-NAME] iso/VMware-tools-windows-11.2.5-17337674.iso.
    • NETWORK è il nome di una rete o di un gruppo di porte che viene visualizzato in Menu > Servizi di rete > Reti di vCenter. Ad esempio, VM Network.
    • OS-ISO-PATH è il percorso del file ISO di Windows Server 2019 strutturato come segue: [DATASTORE-NAME] iso/en-us_windows_server_2019_updated_aug_2022_x64_dvd_a6431a28.iso.
    • VCENTER-IP è l'indirizzo IP o il nome di dominio completo di vCenter Server.
    • CONTROLPLANE-IP è l'indirizzo IP del cluster di gestione recuperato in precedenza.
    • CONTAINERD-URL e CONTAINERD-SHA sono i valori containerd.path e containerd.sha256 recuperati in precedenza.
  9. Eseguire una query nel bundle di risorse di Windows nell'endpoint nodePort del piano di controllo e verificare il percorso del file esistente:

    curl http://CONTROLPLANE-IP:30008

  10. Aggiungere il file XML che contiene le impostazioni di Windows eseguendo i passaggi seguenti:

    1. Passare al file autounattend.xml in VMware {code} Sample Exchange.
    2. Selezionare Download.
    3. Se si utilizza la versione di valutazione di Windows Server 2019, rimuovere <ProductKey>...</ProductKey>.
    4. Denominare il file autounattend.xml.
    5. Salvare il file nella stessa cartella del file windows.json.
  11. Dalla cartella contenente i file windows.json e autounattend.xml creare l'immagine personalizzata eseguendo:

    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
    

    Se viene visualizzato un messaggio di errore o la creazione si blocca, fare riferimento ai registri di Packer nella workstation per risolvere i problemi nel file di configurazione windows.json. È inoltre possibile aggiungere -e PACKER_LOG=1 nella riga di comando precedente per ricevere una registrazione più dettagliata nella propria console.

  12. Per assicurarsi che l'immagine di Windows sia pronta per l'utilizzo, selezionare l'host o il cluster in vCenter, selezionare la scheda Macchine virtuali, quindi selezionare Modelli macchina virtuale per visualizzare l'immagine di Windows nell'elenco.

Utilizzo di un'immagine Windows per un cluster del carico di lavoro

Questa procedura consente di creare un file di configurazione per il cluster del carico di lavoro di Windows, fare riferimento all'immagine di Windows nel file di configurazione e quindi utilizzare la CLI di Tanzu per creare il cluster del carico di lavoro.

  1. Copiare il file di configurazione del cluster di gestione e salvarlo con un nuovo nome eseguendo la procedura descritta in File di configurazione per vSphere con cluster di gestione autonomo.

  2. Nel nuovo file di configurazione, aggiungere o modificare quanto segue:

    IS_WINDOWS_WORKLOAD_CLUSTER: "true"
    
  3. Distribuire un cluster del carico di lavoro come descritto in Creazione di cluster del carico di lavoro.

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