Overview
TheVirtualMachine class provides comprehensive support for managing virtual machines in OpenShift Virtualization (based on KubeVirt). You can create, start, stop, restart VMs, and interact with their instances.
Prerequisites
Before working with virtual machines, ensure:- OpenShift Virtualization (KubeVirt) is installed on your cluster
- You have proper permissions to create VirtualMachine resources
- Required container disk images are available
Creating a Virtual Machine
Basic VM Creation
Create a simple virtual machine with minimal configuration:VM with Custom Resources
Create a VM with specific CPU and memory:The
body parameter contains the VM specification. It must include the spec.template structure that defines the VM’s hardware and configuration.Run Strategies
Virtual machines support different run strategies:VM Lifecycle Operations
Start a Virtual Machine
Start a VM and wait for it to be running:Stop a Virtual Machine
Gracefully stop a running VM:Restart a Virtual Machine
Restart a running VM:Working with VirtualMachineInstance
Access the VMI
When a VM is running, it creates a VirtualMachineInstance (VMI):Get VMI Details
Waiting for VM Status
Wait for Ready Status
Wait for a VM to reach a specific ready state:Custom Wait Logic
VM Network Configuration
Get Network Interfaces
Retrieve configured network interfaces:VM with Multiple Networks
VM Status and States
TheVirtualMachine.Status class provides common VM states:
VirtualMachine.Status.MIGRATINGVirtualMachine.Status.PAUSEDVirtualMachine.Status.PROVISIONINGVirtualMachine.Status.STARTINGVirtualMachine.Status.STOPPEDVirtualMachine.Status.STOPPINGVirtualMachine.Status.WAITING_FOR_VOLUME_BINDINGVirtualMachine.Status.ERROR_UNSCHEDULABLEVirtualMachine.Status.DATAVOLUME_ERROR
Complete Example
Here’s a complete workflow for creating and managing a VM:Troubleshooting
VM Not Starting
Image Pull Issues
VM Stuck in Starting State
Best Practices
- Use Appropriate Run Strategies: Choose the right run strategy for your use case
- Set Proper Timeouts: VM operations can be slow; set generous timeouts
- Wait for VMI: Always wait for VMI to be running before accessing it
- Resource Limits: Define appropriate CPU and memory limits
- Handle Errors: Wrap VM operations in try-except blocks
- Check Status: Monitor VM status during operations
- Clean Up: Always clean up test VMs to free resources