Contents

Creating a VM in Proxmox


Prerequisites

  • A running Proxmox node or cluster — see Getting Started with Proxmox
  • An ISO uploaded to Proxmox storage (Datacenter → Storage → ISO Images → Upload)

Creating the VM

In the Proxmox web UI, click Create VM in the top right corner.

General

FieldValue
NameA descriptive hostname (e.g. k8s-ctrl-03, nas)
VM IDLeave as auto-assigned or pick a number in your scheme
Start at bootEnable for production VMs

OS

Select the uploaded ISO. Set the guest OS type to Linux for Debian-based VMs.

System

FieldValue
Machineq35
BIOSOVMF (UEFI)
EFI StorageSelect a storage pool — a small EFI disk will be created automatically
Qemu AgentEnable

q35 is the modern machine type with full PCIe support. OVMF (UEFI) is preferred over SeaBIOS for modern operating systems. The QEMU guest agent enables graceful shutdown, IP address reporting, and file system freeze during snapshots.

Disks

FieldValue
Bus/DeviceVirtIO Block
StorageSelect your storage pool
SizeAppropriate for the role (see the sizing table below)
DiscardEnable if the storage pool is on SSD or ZFS

VirtIO is the paravirtualised driver — it has significantly lower overhead than emulated SATA or IDE.

CPU

FieldValue
CoresAt least 2 for any workload running kubeadm or systemd services
TypeSee below

Memory

Enable Ballooning only if you want Proxmox to dynamically reclaim unused memory. For workloads with predictable memory needs (databases, Kubernetes nodes), set a fixed value and leave ballooning off.

Network

FieldValue
BridgeThe bridge connected to your lab network
ModelVirtIO (paravirt)

CPU Type — the Migration Trade-Off

CPU type is the most consequential setting for clusters where VMs may need to live-migrate between nodes.

TypePerformanceMigration compatibility
hostBest — exposes all host CPU flagsNone — breaks migration to any different CPU model
x86-64-v2-AESGood — baseline with AES-NIMigrates between any node that supports the baseline
kvm64BasicWidest compatibility, older instruction set

host causes problems on mixed-CPU clusters. This homelab runs AMD Ryzen (5600G) and Intel N100 nodes — these CPUs have different instruction sets and different flags. A VM created with host on the 5600G exposes AMD-specific instructions; trying to live-migrate it to an N100 node will fail immediately because the target CPU cannot provide those instructions.

For any VM that may need to migrate — Kubernetes nodes, general-purpose VMs — use x86-64-v2-AES. It gives you AES-NI and a modern baseline without tying the VM to a specific CPU family.

VMs with PCI passthrough (such as the NAS with a passed-through SATA controller) cannot migrate regardless of CPU type. For those, host is acceptable since migration is already off the table.


VM Sizing Reference

RoleCPUsRAMDisk
Kubernetes control plane22 GB20 GB
Kubernetes worker24 GB40 GB
General service / LXC equivalent1–2512 MB–1 GB8–16 GB
VyOS router1–2512 MB–1 GB4–8 GB

After Creation

Start the VM and complete the OS installation from the ISO. Once the OS is running, install the QEMU guest agent inside the VM so Proxmox can interact with it properly:

1
2
apt update && apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent

After this, Proxmox will display the VM’s IP address on the Summary tab and handle graceful shutdowns via the UI.


What’s Next

Where you go from here depends on the VM’s role: