Advanced Virtual Machine configurations can be provided to enable advanced configuration specifications, these can be used to define real-time latency sensitivy and other properties.
The VirtualMachineClass spec can include a VirtualMachineConfigSpec
. Virtual Machine configuration will be overlaid on this config spec on first-boot. This allows users to specify additional VM configurations like LatencySensitivity, nestedHW, etc.
The field header and _typeName correspond to the columns name and type, from the VirtualMachineConfigSpec
data object. These can be referenced here.
The Config spec from VMClass is applied only on firstboot. Changes to this base configuration will not be acknowledged after first deployment. Only, changes to the following sections of VMClass config spec will be acknowledged given the VM is powered off and switched on again with the updated yaml:
Extra config keys
ChangeBlockTracking
DeviceGroups
Network Interface device changes
PCI device changes
To effectively update a VMClass configspec, it is recommended to delete the previous VMClass and associated VMs and create a new one with the desired config spec.
If network interfaces are specified in the VMClass ConfigSpec, then they are preferred over the ones specified under spec.networkInterfaces in the VM yaml. If the class configspec has no network interfaces or the configspec is absent, spec.networkInterfaces are taken by default.
If PCI devices are specified in the VMClass ConfigSpec, then they are preferred over PCI devices specified in the list VMClass.Spec.HW.Devices. If the class config spec has no PCI devices or class config spec is absent, then PCI devices from VMClass.Spec.HW.Devices are taken by default. CPU and memory settings from VMClass.Spec.HW take precedence over any CPU or memory configuration specified in VMClass configspec.
You can change CPU and Memory settings by:
Powering off the VM (set spec.PowerState to poweredOff and commit to repo)
Updating the yaml file
Powering on the VM (set spec.PowerState to poweredOn and commit to repo)
PCI devices can be provided by specifying the vendorId and deviceId in VMClass and toggle on passthrough for the required device, toggling the passthrough is only available via the host UI at this point in time.
Example for latencySensitivity:
configSpec: _typeName: VirtualMachineConfigSpec latencySensitivity: // name of field in VirtualMachineConfigSpec data object _typeName: LatencySensitivity // type of data object level: normal // data object parameters
An example of the VMClass manifest can be seen below:
apiVersion: vmoperator.vmware.com/v1alpha1 kind: VirtualMachineClass metadata: name: small spec: configSpec: _typeName: VirtualMachineConfigSpec latencySensitivity: _typeName: LatencySensitivity level: normal flags: _typeName: VirtualMachineFlagInfo vbsEnabled: true virtualMmuUsage: "on" vvtdEnabled: true nestedHVEnabled: true bootOptions: _typeName: VirtualMachineBootOptions efiSecureBootEnabled: true # required vm hardware version for secure boot >= vmx-13 policies: resources: requests: memory: 4Gi # The memory reservation must equal to the VM memory claim for latency sensitivity. hardware: cpus: 2 memory: 4Gi
These Examples can alse be found in the ECSExamples Repository.