**KubeVirt** is a [[Kubernetes]] add-on that allows virtual machines to be run alongside containers inside a Kubernetes cluster — managed through the same Kubernetes API. It bridges the gap between legacy VM-based workloads and container-native infrastructure, letting operators consolidate both onto a single platform. --- ### First Principle: VMs and containers shouldn't require two separate orchestration platforms. Many cloud tenants still need VMs — for Windows workloads, legacy applications, or security isolation requirements. KubeVirt lets operators offer VM-as-a-Service from the same [[Kubernetes]] control plane they're already using for containers, rather than running a separate [[OpenStack]] cluster. --- ### Key Considerations - **CRD-Based API**: KubeVirt introduces `VirtualMachine` and `VirtualMachineInstance` custom resources. Creating a VM looks like `kubectl apply` — all existing Kubernetes tooling (RBAC, namespaces, [[ArgoCD]]) works for VM management. - **Under the Hood**: KubeVirt runs VMs using [[KVM]]/[[libvirt]] and QEMU inside a privileged Pod. The kubevirt-handler on each node manages the lifecycle. - **Live Migration**: Supports VM live migration between nodes using standard Kubernetes scheduling constraints. - **Networking**: VMs can be attached to pod networks via [[Cilium]], or to secondary networks using Multus CNI — allowing VMs to connect to existing VLANs or SR-IOV networks. - **OpenShift Virtualisation**: Red Hat's OpenShift Virtualisation (part of [[OKD]]) is built directly on KubeVirt — used in production by telcos replacing VMware. --- ### How It Fits ``` [[Kubernetes]] control plane → KubeVirt (VM CRDs + virt-handler) → [[KVM]] / [[libvirt]] / QEMU (hypervisor execution) → [[Cilium]] / Multus (VM networking) ``` [[Kubernetes]] | [[KVM]] | [[libvirt]] | [[OKD]] | [[OpenStack]] | [[Open Source Hyperscaler MoC]]