Proxmox Series – Part 3: Creating a Virtual Machine in Proxmox VE

Table of Contents:

Tags:

Welcome to the third installment of our Proxmox series! In the previous articles, we introduced Proxmox Virtual Environment (PVE) and walked you through the installation and basic configuration. Now that your Proxmox VE environment is up and running, we will show you how to get started with creating Virtual Machines. 

Virtual Machines vs. Containers

Before we jump into the technical details, let’s briefly recap why you might choose VMs or containers in Proxmox VE: 

Virtual Machines (VMs): Ideal for running full operating systems with complete isolation. VMs are perfect for scenarios where you need to run different operating systems (e.g., Windows, Linux) or require strong isolation between workloads. 

Containers (LXC): Lightweight and efficient, containers share the host system’s kernel but provide isolated user spaces. They are perfect for running multiple instances of Linux-based applications with minimal overhead. 

Proxmox VE supports both technologies, allowing you to choose the best tool for the job. 

Feature  Virtual Machines (VMs)  Containers (LXC) 
Isolation  Full OS/hardware isolation  Process/user-space isolation 
Overhead  Higher (runs full OS)  Minimal (shares host kernel) 
Use Cases  Multi-OS support (Windows/Linux), strict security  Lightweight Linux apps, high-density deployments 
Performance  Slightly slower (virtualized hardware)  Near-native speed 

Uploading an ISO Image 

The first step when creating a VM in any hypervisor is to make sure we have the ability to install an OS on the VM. Proxmox allows you to upload ISO files directly to its storage via the web interface or command line. Both methods offer flexibility, depending on user preference and system requirements. 

Via the Proxmox Web Interface: 

To upload an ISO through the web interface, choose a storage pool that has been configured for ISO files, such as „local“ or a dedicated ISO storage. To begin, click local from the side panel on the left-hand side of your screen. 

Once inside the storage pool, select the tab ISO Images. Now choose an ISO file from your local machine or enter a direct download URL and upload it to your proxmox instance. 

Via the Command Line (CLI): 

For those who prefer using the command line, ISOs can be downloaded directly onto the Proxmox server using tools like wget or curl. This method requires SSH access to the server or the use of the integrated Shell in the Web-UI.  

By running the following command, the ISO file will be downloaded and saved in the appropriate storage directory: 

wget -P /var/lib/vz/template/iso/ https://example.com/path/to/image.iso 

Tip: In a clustered environment, avoid storing ISOs locally (e.g., /var/lib/vz) as they won’t be accessible if a node fails. Instead, use network-backed storage solutions like NFS, CephFS, or iSCSI to ensure seamless access across all nodes. 

Creating Virtual Machines in Proxmox VE 

To create a VM, select the Proxmox node where the VM will run and click „Create VM“ in the top-right corner to launch the VM setup wizard. 

This will bring up the following pop-up window. 

General Settings 

Proxmox automatically assigns a VM ID, but in clustered environments, manual customization is recommended.  Give your VM a name and then click Next. 

Tip: Define a VM ID range in the Datacenter settings to avoid conflicts during backups or in multi-cluster setups.  

OS Settings: 

Now choose your ISO image. In this example, we’ll use Debian 12. Once you have chosen your operating system, click Next. 

Important: If Proxmox fails to auto-detect the guest OS type (e.g., for niche Linux distributions), manually set it to avoid performance issues. Misconfigured OS types can cause problems with tools like Veeam during backups. 

System Settings: 

For most VMs, the default system settings will suffice. So click next. 

Disk Settings: 

Select a storage type based on your use case and chose how much storage you need: 

  • Ceph or GlusterFS: Ideal for highly available block storage environments. 
  • LVM-Thin: Perfect for local thin-provisioned storage (saves space on unused capacity). 
  • LVM (Thick): Recommended for SAN-based systems (iSCSI or Fibre Channel) to guarantee allocated capacity. 
  • qcow2: A flexible choice for file-based storage (local or over NFS). 

Once you have selected the hard disk space that you need, click the Next button. 

CPU Settings: 

Adjust your Sockets and Cores based on workload. A lightweight web server may need 1 socket and 2 cores, while database VMs require more resources. 

I would also recommend changing the CPU-Type to “Host” for single-node setups to maximize performance. In clusters, select the oldest CPU type among nodes to ensure smooth live migrations. 

Memory Settings:  

On the Memory tab, select how much RAM you wish to allocate to your VM but avoid over-provisioning to prevent performance degradation. 

Network Settings: 

For our first installation we also leave the Network tab with its default configuration. 

Note however that you could set a VLAN Tag here to segment your Network 

Confirm and Create:  

Review your settings and click „Finish“ to create the VM. Your VM will now be created with the parameters you have chosen. 

Install the Operating System 

The actual installation of the OS will differ depending on the OS you choose. However, to begin, choose your VM from the „Server View“ panel on the left-hand side of your screen. Start the VM by clicking the Start button at the top of the screen. 

Once the VM has started, click the Console button at the top of the screen and select the noVNC console. 

After this, follow your operating system’s installation instructions. 

Conclusion: 
Having read this guide, you should be able to create a VM from scratch using nothing but Proxmox VE and an ISO image. In the next Blog Post, we will guide you through installing your first Linux Container (LXC) on Proxmox VE. 

Autor

Pius Werner

Consultant

Pius Werner ist Consultant bei der Söldner Consult GmbH für Virtualisierung und IT-Sicherheit.