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:
NotaVMware non supporta i cluster del carico di lavoro TKG con nodi di lavoro di Windows in ambienti con proxy o air gap.
Per creare un'immagine di macchina personalizzata, è necessario quanto segue:
Una workstation Linux.
NotaA 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.
apt
anziché snap
per installare Docker da una CLI.Importare l'immagine OVA di Ubuntu o Photon in vCenter per utilizzarla come modello per l'immagine personalizzata eseguendo i passaggi seguenti:
Importare l'immagine ISO di Windows Server 2019 e le immagini ISO di Windows per VMware Tools nel datastore eseguendo questi passaggi:
iso
oppure crearne una se non esiste facendo clic su Nuova cartella.iso
.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.27.5_vmware.2-tkg.1
imagePullPolicy: Always
ports:
- containerPort: 3000
L'immagine del container windows-resource-bundle
include i file binari Windows Kubernetes necessari che Image Builder usa per creare un OVA Windows.
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.
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
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
Recuperare l'indirizzo IP di un piano di controllo per il cluster di gestione:
Elencare i nodi del cluster con l'output di wide
:
kubectl get nodes -o wide
Nell'output, prendere nota del valore INTERNAL-IP
del nodo con ROLE
elencato come control-plane
.
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",
"additional_executables": "true",
"additional_prepull_images": "mcr.microsoft.com/windows/servercore:ltsc2019",
"build_version": "windows-2019-kube-v1.27.5",
"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.27.5+vmware.2",
"kubernetes_series": "v1.27.5",
"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": ""
}
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.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
Aggiungere il file XML che contiene le impostazioni di Windows eseguendo i passaggi seguenti:
autounattend.xml
in VMware {code} Sample Exchange.<ProductKey>...</ProductKey>
.autounattend.xml
.windows.json
.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.14_vmware.1 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.
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.
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.
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.
Nel nuovo file di configurazione, aggiungere o modificare quanto segue:
IS_WINDOWS_WORKLOAD_CLUSTER: "true"
Distribuire un cluster del carico di lavoro come descritto in Creazione di cluster del carico di lavoro.