apiVersion: instancetype.kubevirt.io/v1beta1
kind: VirtualMachineInstancetype
metadata:
name: example-instancetype
spec:
cpu:
guest: 1 (1)
memory:
guest: 128Mi (2)
You can simplify virtual machine (VM) creation by using instance types, whether you use the OKD web console or the CLI to create VMs.
An instance type is a reusable object where you can define resources and characteristics to apply to new VMs. You can define custom instance types or use the variety that are included when you install OKD Virtualization.
To create a new instance type, you must first create a manifest, either manually or by using the virtctl
CLI tool. You then create the instance type object by applying the manifest to your cluster.
OKD Virtualization provides two CRDs for configuring instance types:
A namespaced object: VirtualMachineInstancetype
A cluster-wide object: VirtualMachineClusterInstancetype
These objects use the same VirtualMachineInstancetypeSpec
.
When you configure an instance type, you must define the cpu
and memory
attributes. Other attributes are optional.
When you create a VM from an instance type, you cannot override any parameters defined in the instance type. Because instance types require defined CPU and memory attributes, OKD Virtualization always rejects additional requests for these resources when creating a VM from an instance type. |
You can manually create an instance type manifest. For example:
apiVersion: instancetype.kubevirt.io/v1beta1
kind: VirtualMachineInstancetype
metadata:
name: example-instancetype
spec:
cpu:
guest: 1 (1)
memory:
guest: 128Mi (2)
1 | Required. Specifies the number of vCPUs to allocate to the guest. |
2 | Required. Specifies an amount of memory to allocate to the guest. |
You can create an instance type manifest by using the virtctl
CLI utility. For example:
virtctl
command with required fields$ virtctl create instancetype --cpu 2 --memory 256Mi
where:
--cpu <value>
Specifies the number of vCPUs to allocate to the guest. Required.
--memory <value>
Specifies an amount of memory to allocate to the guest. Required.
You can immediately create the object from the new manifest by running the following command:
|
In addition to the required cpu
and memory
attributes, you can include the following optional attributes in the VirtualMachineInstancetypeSpec
:
annotations
List annotations to apply to the VM.
gpus
List vGPUs for passthrough.
hostDevices
List host devices for passthrough.
ioThreadsPolicy
Define an IO threads policy for managing dedicated disk access.
launchSecurity
Configure Secure Encrypted Virtualization (SEV).
nodeSelector
Specify node selectors to control the nodes where this VM is scheduled.
schedulerName
Define a custom scheduler to use for this VM instead of the default scheduler.
OKD Virtualization includes a set of pre-defined instance types called common-instancetypes
. Some are specialized for specific workloads and others are workload-agnostic.
These instance type resources are named according to their series, version, and size. The size value follows the .
delimiter and ranges from nano
to 8xlarge
.
Use case | Series | Characteristics | vCPU to memory ratio | Example resource |
---|---|---|---|---|
Universal |
U |
|
1:4 |
|
Overcommitted |
O |
|
1:4 |
|
Compute-exclusive |
CX |
|
1:2 |
|
NVIDIA GPU |
GN |
|
1:4 |
|
Memory-intensive |
M |
|
1:8 |
|
Network-intensive |
N |
|
1:2 |
|
You can specify an instance type, a preference, or both to define a set of workload sizing and runtime characteristics for reuse across multiple VMs.
Specify instance types and preferences by using flags.
You must have an instance type, preference, or both on the cluster.
To specify an instance type when creating a VM, use the --instancetype
flag. To specify a preference, use the --preference
flag. The following example includes both flags:
$ virtctl create vm --instancetype <my_instancetype> --preference <my_preference>
Optional: To specify a namespaced instance type or preference, include the kind
in the value passed to the --instancetype
or --preference
flag command. The namespaced instance type or preference must be in the same namespace you are creating the VM in. The following example includes flags for a namespaced instance type and a namespaced preference:
$ virtctl create vm --instancetype virtualmachineinstancetype/<my_instancetype> --preference virtualmachinepreference/<my_preference>
Inferring instance types, preferences, or both is enabled by default, and the inferFromVolumeFailure
policy of the inferFromVolume
attribute is set to Ignore
. When inferring from the boot volume, errors are ignored, and the VM is created with the instance type and preference left unset.
However, when flags are applied, the inferFromVolumeFailure
policy defaults to Reject
. When inferring from the boot volume, errors result in the rejection of the creation of that VM.
You can use the --infer-instancetype
and --infer-preference
flags to infer which instance type, preference, or both to use to define the workload sizing and runtime characteristics of a VM.
You have installed the virtctl
tool.
To explicitly infer instance types from the volume used to boot the VM, use the --infer-instancetype
flag. To explicitly infer preferences, use the --infer-preference
flag. The following command includes both flags:
$ virtctl create vm --volume-import type:pvc,src:my-ns/my-pvc --infer-instancetype --infer-preference
To infer an instance type or preference from a volume other than the volume used to boot the VM, use the --infer-instancetype-from
and --infer-preference-from
flags to specify any of the virtual machine’s volumes. In the example below, the virtual machine boots from volume-a
but infers the instancetype and preference from volume-b
.
$ virtctl create vm \
--volume-import=type:pvc,src:my-ns/my-pvc-a,name:volume-a \
--volume-import=type:pvc,src:my-ns/my-pvc-b,name:volume-b \
--infer-instancetype-from volume-b \
--infer-preference-from volume-b
Use the following labels on your PVC, data source, or data volume to instruct the inference mechanism which instance type, preference, or both to use when trying to boot from a volume.
A cluster-wide instance type: instancetype.kubevirt.io/default-instancetype
label.
A namespaced instance type: instancetype.kubevirt.io/default-instancetype-kind
label. Defaults to the VirtualMachineClusterInstancetype
label if left empty.
A cluster-wide preference: instancetype.kubevirt.io/default-preference
label.
A namespaced preference: instancetype.kubevirt.io/default-preference-kind
label. Defaults to VirtualMachineClusterPreference
label, if left empty.
You must have an instance type, preference, or both on the cluster.
To apply a label to a data source, use oc label
. The following command applies a label that points to a cluster-wide instance type:
$ oc label DataSource foo instancetype.kubevirt.io/default-instancetype=<my_instancetype>
You can create a virtual machine (VM) from an instance type by using the OKD web console. You can also use the web console to create a VM by copying an existing snapshot or to clone a VM.
You can create a VM from a list of available bootable volumes. You can add Linux- or Windows-based volumes to the list.
In the web console, navigate to Virtualization → Catalog.
The InstanceTypes tab opens by default.
Select either of the following options:
Select a suitable bootable volume from the list. If the list is truncated, click the Show all button to display the entire list.
The bootable volume table lists only those volumes in the |
Optional: Click the star icon to designate a bootable volume as a favorite. Starred bootable volumes appear first in the volume list.
Click Add volume to upload a new volume or to use an existing persistent volume claim (PVC), a volume snapshot, or a containerDisk
volume. Click Save.
Logos of operating systems that are not available in the cluster are shown at the bottom of the list. You can add a volume for the required operating system by clicking the Add volume link.
In addition, there is a link to the Create a Windows boot source quick start. The same link appears in a popover if you hover the pointer over the question mark icon next to the Select volume to boot from line.
Immediately after you install the environment or when the environment is disconnected, the list of volumes to boot from is empty. In that case, three operating system logos are displayed: Windows, Fedora, and Linux. You can add a new volume that meets your requirements by clicking the Add volume button.
Click an instance type tile and select the resource size appropriate for your workload.
Optional: Choose the virtual machine details, including the VM’s name, that apply to the volume you are booting from:
For a Linux-based volume, follow these steps to configure SSH:
If you have not already added a public SSH key to your project, click the edit icon beside Authorized SSH key in the VirtualMachine details section.
Select one of the following options:
Use existing: Select a secret from the secrets list.
Add new: Follow these steps:
Browse to the public SSH key file or paste the file in the key field.
Enter the secret name.
Optional: Select Automatically apply this key to any new VirtualMachine you create in this project.
Click Save.
For a Windows volume, follow either of these set of steps to configure sysprep options:
If you have not already added sysprep options for the Windows volume, follow these steps:
Click the edit icon beside Sysprep in the VirtualMachine details section.
Add the Autoattend.xml answer file.
Add the Unattend.xml answer file.
Click Save.
If you want to use existing sysprep options for the Windows volume, follow these steps:
Click Attach existing sysprep.
Enter the name of the existing sysprep Unattend.xml answer file.
Click Save.
Optional: If you are creating a Windows VM, you can mount a Windows driver disk:
Click the Customize VirtualMachine button.
On the VirtualMachine details page, click Storage.
Select the Mount Windows drivers disk checkbox.
Optional: Click View YAML & CLI to view the YAML file. Click CLI to view the CLI commands. You can also download or copy either the YAML file contents or the CLI commands.
Click Create VirtualMachine.
After the VM is created, you can monitor the status on the VirtualMachine details page.