<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Virtualization on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/virtualization/</link><description>Recent content in Virtualization on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/virtualization/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenStack</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/openstack/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/openstack/</guid><description>&lt;p&gt;OpenStack is an open-source IaaS platform — it turns a pool of bare-metal servers into a self-service cloud: virtual machines, block storage, networking, and object storage, all driven by API.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.openstack.org/" target="_blank" rel="noopener"
 &gt;https://www.openstack.org/&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="scale-and-fit"&gt;Scale and fit
&lt;/h2&gt;&lt;p&gt;There is a rough spectrum of virtualization tools, and picking the wrong tier is a common mistake:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proxmox / VMware / Hyper-V&lt;/strong&gt; — the right choice when you want to run virtual machines. SMB, homelab, or a small ops team managing infrastructure directly. Reasonable setup cost, manageable operational overhead, one or a few admins in control. Think of it as a VMware replacement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenStack&lt;/strong&gt; — the right choice when you are &lt;em&gt;building a cloud&lt;/em&gt;, not just running VMs. Multi-tenant infrastructure where teams self-service their own compute, networking, and storage via API. The operational complexity is real and significant; it pays off when the cloud-like abstraction is the actual product, or when the scale justifies the overhead.&lt;/p&gt;
&lt;p&gt;The rule of thumb: if the question is &amp;ldquo;how do I replace VMware?&amp;rdquo;, the answer is Proxmox. If the question is &amp;ldquo;how do I build a private cloud platform?&amp;rdquo;, the answer might be OpenStack.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="core-components"&gt;Core Components
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Service&lt;/th&gt;
 &lt;th&gt;Code Name&lt;/th&gt;
 &lt;th&gt;What it does&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Compute&lt;/td&gt;
 &lt;td&gt;Nova&lt;/td&gt;
 &lt;td&gt;Schedules and manages VM lifecycle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Networking&lt;/td&gt;
 &lt;td&gt;Neutron&lt;/td&gt;
 &lt;td&gt;Virtual networks, routers, floating IPs, security groups&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Block Storage&lt;/td&gt;
 &lt;td&gt;Cinder&lt;/td&gt;
 &lt;td&gt;Persistent volumes attached to VMs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Image Service&lt;/td&gt;
 &lt;td&gt;Glance&lt;/td&gt;
 &lt;td&gt;Stores and serves OS images&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Identity&lt;/td&gt;
 &lt;td&gt;Keystone&lt;/td&gt;
 &lt;td&gt;Auth, service catalog, RBAC&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dashboard&lt;/td&gt;
 &lt;td&gt;Horizon&lt;/td&gt;
 &lt;td&gt;Web UI (optional)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Object Storage&lt;/td&gt;
 &lt;td&gt;Swift&lt;/td&gt;
 &lt;td&gt;S3-like object storage (optional)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Bare Metal&lt;/td&gt;
 &lt;td&gt;Ironic&lt;/td&gt;
 &lt;td&gt;Provisions physical machines instead of VMs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;You do not need all of them. A minimal useful deployment is Nova + Neutron + Cinder + Glance + Keystone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="openstack-on-kubernetes"&gt;OpenStack on Kubernetes
&lt;/h2&gt;&lt;p&gt;OpenStack services are just applications — and they can run as Kubernetes workloads. Two projects make this practical:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://github.com/openstack/openstack-helm" target="_blank" rel="noopener"
 &gt;OpenStack-Helm&lt;/a&gt;&lt;/strong&gt; — official Helm charts for deploying OpenStack services on an existing Kubernetes cluster. Each service (Nova, Neutron, Cinder, etc.) becomes a Helm release. Upgrades follow standard rolling deployment patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://github.com/vexxhost/atmosphere" target="_blank" rel="noopener"
 &gt;Atmosphere&lt;/a&gt;&lt;/strong&gt; (by VEXXHOST) — a higher-level operator built on top of OpenStack-Helm. Adds Ansible automation, health checks, and a more opinionated deployment model. Targets production use.&lt;/p&gt;
&lt;p&gt;The practical implication: you can run a Talos cluster and deploy OpenStack on top of it — OpenStack as a tenant of Kubernetes rather than a separate platform. This inverts the usual relationship (where Kubernetes runs on top of OpenStack) and is an interesting architectural option for homelab and small private cloud deployments.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.fairbanks.nl/" target="_blank" rel="noopener"
 &gt;Fairbanks&lt;/a&gt; (Dutch hosting company specialising in sovereign private clouds) does exactly this in production. Their talk &lt;a class="link" href="https://www.youtube.com/watch?v=zU8mT2f2Hxc" target="_blank" rel="noopener"
 &gt;OpenStack on Talos Linux&lt;/a&gt; is the clearest real-world example of the pattern.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="deployment-options"&gt;Deployment Options
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Kolla-Ansible&lt;/strong&gt;&lt;br&gt;
&lt;a class="link" href="https://docs.openstack.org/kolla-ansible/latest/" target="_blank" rel="noopener"
 &gt;https://docs.openstack.org/kolla-ansible/latest/&lt;/a&gt;&lt;br&gt;
Containerised OpenStack deployed via Ansible. Production-grade, well-maintained. The practical choice for homelab and small-scale production deployments. Each service runs in its own container.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DevStack&lt;/strong&gt;&lt;br&gt;
&lt;a class="link" href="https://docs.openstack.org/devstack/latest/" target="_blank" rel="noopener"
 &gt;https://docs.openstack.org/devstack/latest/&lt;/a&gt;&lt;br&gt;
All-in-one development install. Not for production or anything you want to survive a reboot. Good for learning the API surface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Canonical OpenStack (Juju / Sunbeam)&lt;/strong&gt;&lt;br&gt;
&lt;a class="link" href="https://ubuntu.com/openstack" target="_blank" rel="noopener"
 &gt;https://ubuntu.com/openstack&lt;/a&gt;&lt;br&gt;
Ubuntu-opinionated deployment. Sunbeam is a newer minimal footprint option. Good if you&amp;rsquo;re already in the Ubuntu/Juju ecosystem.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concepts-worth-understanding"&gt;Concepts Worth Understanding
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Flavors&lt;/strong&gt; — VM sizing templates (vCPU, RAM, disk). You define these; instances pick from them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security Groups&lt;/strong&gt; — stateful firewall rules applied per-port. Default-deny inbound.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Floating IPs&lt;/strong&gt; — externally routable IPs that can be associated/disassociated from instances dynamically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Availability Zones&lt;/strong&gt; — logical groupings of compute nodes. Useful for fault isolation even at small scale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hypervisors&lt;/strong&gt; — Nova supports KVM (default), QEMU, VMware, and others. KVM on Linux is the standard.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="relevance-to-the-lab"&gt;Relevance to the Lab
&lt;/h2&gt;&lt;p&gt;The &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/llm-training/" &gt;LLM training experiment&lt;/a&gt; plans to use OpenStack as the IaaS layer over the &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/systems/" &gt;blade nodes&lt;/a&gt; in ASGARD — Nova for compute scheduling, Neutron for cluster networking, Cinder for shared model/dataset storage backed by Ceph.&lt;/p&gt;</description></item><item><title>Proxmox Cluster in the homelab</title><link>https://backend-engineering-strategy-tools.github.io/site/homelab/proxmox-cluster/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/homelab/proxmox-cluster/</guid><description>&lt;p&gt;Getting a three-node &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/proxmox/" &gt;Proxmox VE&lt;/a&gt; cluster running in the homelab.&lt;/p&gt;
&lt;p&gt;The goal is a shared virtualization platform for running VMs and LXC containers across the rack. Also, a good excuse to kick the tires on Proxmox itself so, naturally, let&amp;rsquo;s needlessly complicate things with some self-imposed constraints:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;run it clustered&lt;/li&gt;
&lt;li&gt;don&amp;rsquo;t use any hardware already earmarked for other projects&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="hardware"&gt;Hardware
&lt;/h2&gt;&lt;p&gt;I am going try and use three IBM rack servers from the &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/systems/" &gt;inventory&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Asset ID&lt;/th&gt;
 &lt;th&gt;Hostname&lt;/th&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;Form Factor&lt;/th&gt;
 &lt;th&gt;RAM&lt;/th&gt;
 &lt;th&gt;CPU&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-001&lt;/td&gt;
 &lt;td&gt;FREJA&lt;/td&gt;
 &lt;td&gt;IBM System x3550 M1 (7978)&lt;/td&gt;
 &lt;td&gt;1U&lt;/td&gt;
 &lt;td&gt;24GB&lt;/td&gt;
 &lt;td&gt;single&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-002&lt;/td&gt;
 &lt;td&gt;TYR&lt;/td&gt;
 &lt;td&gt;IBM System x3650 M1 (7979)&lt;/td&gt;
 &lt;td&gt;2U&lt;/td&gt;
 &lt;td&gt;64GB&lt;/td&gt;
 &lt;td&gt;dual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-003&lt;/td&gt;
 &lt;td&gt;TOR&lt;/td&gt;
 &lt;td&gt;IBM System x3650 M1 (7979)&lt;/td&gt;
 &lt;td&gt;2U&lt;/td&gt;
 &lt;td&gt;64GB&lt;/td&gt;
 &lt;td&gt;dual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Three nodes satisfies Corosync quorum without needing a &lt;code&gt;qdevice&lt;/code&gt; — losing one node still leaves a majority.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;&lt;em&gt;In progress.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="cluster-formation"&gt;Cluster formation
&lt;/h2&gt;&lt;p&gt;&lt;em&gt;In progress.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Proxmox VE</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/proxmox/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/proxmox/</guid><description>&lt;p&gt;Proxmox VE (Virtual Environment) is an open-source Type 1 hypervisor built on Debian. It runs KVM for full virtual machines and LXC for lightweight containers, managed through a web UI or API. The subscription model is optional — the community edition is fully functional without a paid license; the subscription gives access to the enterprise update repository and support.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="comparison"&gt;Comparison
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Platform&lt;/th&gt;
 &lt;th&gt;License&lt;/th&gt;
 &lt;th&gt;VMs (KVM)&lt;/th&gt;
 &lt;th&gt;Containers&lt;/th&gt;
 &lt;th&gt;Clustering&lt;/th&gt;
 &lt;th&gt;Web UI&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Proxmox VE&lt;/td&gt;
 &lt;td&gt;Open-source (optional sub)&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Yes (LXC)&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;VMware ESXi&lt;/td&gt;
 &lt;td&gt;Commercial&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Yes (vCenter)&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Standalone KVM&lt;/td&gt;
 &lt;td&gt;Open-source&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Manual&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;oVirt&lt;/td&gt;
 &lt;td&gt;Open-source&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Proxmox is the practical choice when you want VMware-style management without the licensing cost, or when you want to run both VMs and containers on the same node.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="core-concepts"&gt;Core concepts
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Node&lt;/strong&gt; — a physical host running Proxmox VE. Managed independently or as part of a cluster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cluster&lt;/strong&gt; — multiple nodes joined together. Share a unified management view and allow live migration of VMs between nodes. Uses &lt;a class="link" href="https://corosync.github.io/corosync/" target="_blank" rel="noopener"
 &gt;Corosync&lt;/a&gt; for distributed consensus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quorum&lt;/strong&gt; — clusters require a majority of nodes to be reachable to avoid split-brain. Minimum useful cluster size is 3 nodes (loss of one node still leaves a majority). Two-node clusters need a quorum device (&lt;code&gt;qdevice&lt;/code&gt;) to function safely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VM&lt;/strong&gt; — full virtual machine backed by QEMU/KVM. Hardware-level isolation. Arbitrary OS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Container (CT)&lt;/strong&gt; — LXC container. Shares the host kernel; lower overhead than a VM. Linux-only. Useful for services where you want process-level isolation without a full OS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Storage pool&lt;/strong&gt; — where disks and images live. Supported backends: local directory, LVM, LVM-thin, ZFS, NFS, CIFS, and Ceph (via &lt;code&gt;rbd&lt;/code&gt;). ZFS and Ceph are the most capable options for a cluster — ZFS for local redundancy, Ceph for shared storage across nodes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="related"&gt;Related
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/pve-docs/" target="_blank" rel="noopener"
 &gt;Proxmox VE documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://forum.proxmox.com/" target="_blank" rel="noopener"
 &gt;Proxmox community forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://corosync.github.io/corosync/" target="_blank" rel="noopener"
 &gt;Corosync documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt; — distributed storage backend for Proxmox clusters&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/openstack/" &gt;OpenStack&lt;/a&gt; — the next tier up the scale spectrum&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/proxmox-cluster/" &gt;Proxmox cluster in the homelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>KubeVirt</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/kubevirt/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/kubevirt/</guid><description>&lt;p&gt;See &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/virtualization/" &gt;Virtualization — KVM and KubeVirt&lt;/a&gt; for full coverage of both KVM and KubeVirt.&lt;/p&gt;</description></item><item><title>Virtualization — KVM and KubeVirt</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/virtualization/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/virtualization/</guid><description>&lt;p&gt;KVM is the Linux kernel&amp;rsquo;s native hypervisor. KubeVirt extends Kubernetes to run virtual machines using KVM under the hood. They are the same virtualization layer at different levels of abstraction — KVM on bare metal, KubeVirt in a Kubernetes cluster.&lt;/p&gt;
&lt;h2 id="kvm"&gt;KVM
&lt;/h2&gt;&lt;p&gt;Kernel-based Virtual Machine. KVM turns the Linux kernel into a hypervisor using hardware virtualization extensions (Intel VT-x, AMD-V). Virtual machines run as regular Linux processes backed by QEMU for device emulation. Managed via &lt;code&gt;libvirt&lt;/code&gt; and its CLI tools (&lt;code&gt;virsh&lt;/code&gt;, &lt;code&gt;virt-install&lt;/code&gt;) or the &lt;code&gt;virt-manager&lt;/code&gt; GUI.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create a VM from an ISO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virt-install &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --name ubuntu-vm &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --ram &lt;span style="color:#ae81ff"&gt;4096&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --vcpus &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --disk path&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/var/lib/libvirt/images/ubuntu.qcow2,size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;40&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cdrom /tmp/ubuntu.iso &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --os-variant ubuntu22.04
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# List running VMs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virsh list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Start/stop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virsh start ubuntu-vm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virsh shutdown ubuntu-vm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Connect to console&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virsh console ubuntu-vm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;KVM gives near-native performance for CPU-bound workloads. Network and disk I/O use virtio drivers for efficient paravirtualised I/O. Live migration moves a running VM between hosts without downtime if shared storage is available.&lt;/p&gt;
&lt;h2 id="kubevirt"&gt;KubeVirt
&lt;/h2&gt;&lt;p&gt;KubeVirt adds &lt;code&gt;VirtualMachine&lt;/code&gt; and &lt;code&gt;VirtualMachineInstance&lt;/code&gt; CRDs to Kubernetes. VMs are defined as Kubernetes resources, scheduled by the Kubernetes scheduler, and managed alongside containers. Under the hood, each VM runs as a pod containing a QEMU-KVM process.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;kubevirt.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;VirtualMachine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ubuntu-vm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;running&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;template&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;domain&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;devices&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;disks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rootdisk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;disk&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;bus&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;virtio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;resources&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;requests&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;memory&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4Gi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cpu&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rootdisk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;containerDisk&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;kubevirt/fedora-cloud-container-disk-demo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;virtctl&lt;/code&gt; CLI complements &lt;code&gt;kubectl&lt;/code&gt; for VM-specific operations:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virtctl start ubuntu-vm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virtctl stop ubuntu-vm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virtctl console ubuntu-vm &lt;span style="color:#75715e"&gt;# serial console&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virtctl ssh ubuntu-vm &lt;span style="color:#75715e"&gt;# SSH via the Kubernetes API&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;virtctl migrate ubuntu-vm &lt;span style="color:#75715e"&gt;# live migrate to another node&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cdi--containerized-data-importer"&gt;CDI — Containerized Data Importer
&lt;/h2&gt;&lt;p&gt;KubeVirt is typically paired with CDI, which imports VM disk images from URLs, container registries, or PVCs into &lt;code&gt;DataVolume&lt;/code&gt; resources that VMs can boot from. CDI handles the data flow; the VM definition just references the DataVolume.&lt;/p&gt;
&lt;h2 id="why-vms-in-kubernetes"&gt;Why VMs in Kubernetes
&lt;/h2&gt;&lt;p&gt;Some workloads can&amp;rsquo;t be containerised — legacy applications expecting a full OS, Windows workloads, software with kernel module requirements. KubeVirt lets those workloads live in the same cluster as containers, managed with the same tooling, subject to the same scheduling and networking policies.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.linux-kvm.org/page/Documents" target="_blank" rel="noopener"
 &gt;KVM documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://kubevirt.io/user-guide/" target="_blank" rel="noopener"
 &gt;KubeVirt documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/kubevirt/containerized-data-importer" target="_blank" rel="noopener"
 &gt;CDI documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>