Create a Windows VM Workload Template¶
For this example, we will create a Windows VM workload template
Note
If you haven't installed the needed plugins please see our VM Getting Started documentation
Step 1: Get the Windows ISO URL¶
You don't need to download the ISO manually — Orion uses KubeVirt's native HTTP downloader to import ISOs directly.
Tip
You can use Windows 10, Windows 11, or any bootable ISO. You can also serve ISOs from your local network over HTTP if you have them available internally. Microsoft imposes a 24 hour limit on the validity of this link. If you get a 404 error during import, you need to request a new link from this page.
1. Gather your ISO image URL
- Navigate to: https://www.microsoft.com/en-us/software-download/windows10ISO
- Select your edition and language
- Right-click on the 64-bit download button and select Copy link address
- Save this URL—you'll use it in the template creation form
Step 2: Create the Workload Template¶
1. Navigate to the Workload template Creation Form
- From the Genesis Workloads table, click Create Workload
- Select the VM schema you installed previously in the getting started section.
2. Configure Windows VM Settings
With your VM schema selected we can begin configuring our template.
Set the following values for a Windows VM:
| Setting | Value | Notes |
|---|---|---|
| Label | Your choice (e.g., "Windows10") | Displayed in the catalog |
| Groups | Select your project group | Add other groups to restrict access |
| secure_boot | true |
Required for Windows |
| efi | true |
Required for Windows |
| virtio_drivers | true |
Required for Windows — loads drivers at boot |
| CPU Request | 4 | Minimum for Windows |
| CPU Limit | 4 (or higher) | Do NOT use "unlimited" |
| Memory Request | 8Gi | Minimum for Windows |
| Memory Limit | 8Gi (or higher) | Do NOT use "unlimited" |
Warning
Important: The "unlimited" checkbox does not work for virtual machines. Always set explicit CPU and memory limits. Also, spaces are NOT allowed in Labels.
3. Add the ISO Mount (HTTP)

- Click + Add to add a new mount
- Set the mount type to HTTP
- Configure:
- Name:
iso (or preference) - iso_url: Paste the Windows ISO URL from Step 1
- storage_size:
8Gi(must be larger than the ISO file—Windows 10 is ~5.7 GB)
- Name:
Warning
The size value format is important. Always use Gi suffix for gigabytes (e.g., 8Gi, 15Gi). Incorrect formatting will cause volume creation to fail.
4. Add the System Disk (Blank)

- Click + Add to add another mount
- Set the mount type to Blank
- Configure:
- Name:
system - storage_size:
50Gi
- Name:
Info
This creates a 50 GB disk where Windows will be installed. Plan this size based on your intended use — you cannot resize it after creation, but you can attach additional drives later if needed.
5. Configure RustDesk Port
As a demonstration, we will use RustDesk as a performant VDI solution. Configure the port exposure:

| Setting | Value |
|---|---|
| Name | rustdesk |
| Type | NodePort |
| vm_port | 21118 |
| service_port | 21118 |
| Protocol | TCP |
Info
When you set a port, it overwrites the defaults — you're not adding to them.
Why NodePort? This dynamically assigns a port and exposes it to the network, enabling Orion to function as a connection broker. You can launch thousands of VMs, and each will receive a unique port assignment accessible via the Connect button.
Other Use Cases for Ports:
- Remote desktop protocols (RGS, Parsec, etc.)
- Game servers (Minecraft, dedicated servers)
- Development servers (database access, web services)
- Any application requiring direct network access
6. Submit the Template
Click Submit to create the workload template. It will now appear in your project's workload catalog.