×

You can simplify virtual machine (VM) creation by using instance types, whether you use the OpenShift Container Platform web console or the CLI to create VMs.

About instance types

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 OpenShift 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.

OpenShift Virtualization provides two CRDs for configuring instance types:

  • A namespaced object: VirtualMachineInstancetype

  • A cluster-wide object: VirtualMachineClusterInstancetype

These objects use the same VirtualMachineInstancetypeSpec.

Required attributes

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, OpenShift 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:

Example YAML file with required fields
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:

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:

$ virtctl create instancetype --cpu 2 --memory 256Mi | oc apply -f -

Optional attributes

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.

Pre-defined instance types

OpenShift 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.

Table 1. common-instancetypes series comparison
Use case Series Characteristics vCPU to memory ratio Example resource

Universal

U

  • Burstable CPU performance

1:4

u1.medium
  • 1 vCPUs

  • 4 Gi memory

Overcommitted

O

  • Overcommitted memory

  • Burstable CPU performance

1:4

o1.small
  • 1 vCPU

  • 2Gi memory

Compute-exclusive

CX

  • Hugepages

  • Dedicated CPU

  • Isolated emulator threads

  • vNUMA

1:2

cx1.2xlarge
  • 8 vCPUs

  • 16Gi memory

NVIDIA GPU

GN

  • For VMs that use GPUs provided by the NVIDIA GPU Operator

  • Has predefined GPUs

  • Burstable CPU performance

1:4

gn1.8xlarge
  • 32 vCPUs

  • 128Gi memory

Memory-intensive

M

  • Hugepages

  • Burstable CPU performance

1:8

m1.large
  • 2 vCPUs

  • 16Gi memory

Network-intensive

N

  • Hugepages

  • Dedicated CPU

  • Isolated emulator threads

  • Requires nodes capable of running DPDK workloads

1:2

n1.medium
  • 4 vCPUs

  • 4Gi memory

Creating manifests by using the virtctl tool

You can use the virtctl CLI utility to simplify creating manifests for VMs, VM instance types, and VM preferences. For more information, see VM manifest creation commands.

If you have a VirtualMachine manifest, you can create a VM from the command line.

Creating a VM from an instance type by using the web console

You can create a virtual machine (VM) from an instance type by using the OpenShift Container Platform web console. You can also use the web console to create a VM by copying an existing snapshot or to clone a VM.

Procedure
  1. In the web console, navigate to VirtualizationCatalog and click the InstanceTypes tab.

  2. Select either of the following options:

    • Select a bootable volume.

      The bootable volume table lists only those volumes in the openshift-virtualization-os-images namespace that have the instancetype.kubevirt.io/default-preference label.

      • 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 use an existing persistent volume claim (PVC), volume snapshot, or data source. Then click Save.

  3. Click an instance type tile and select the resource size appropriate for your workload.

  4. 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.

  5. Select one of the following options:

    • Use existing: Select a secret from the secrets list.

    • Add new:

      1. Browse to the public SSH key file or paste the file in the key field.

      2. Enter the secret name.

      3. Optional: Select Automatically apply this key to any new VirtualMachine you create in this project.

      4. Click Save.

  6. 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.

  7. Click Create VirtualMachine.

After the VM is created, you can monitor the status on the VirtualMachine details page.