Posted on September 2, 2026 by Anish Bista (CNCF Kubestronaut) and Zespre Chang (Creator of KubeVirtBMC) In the previous post , we introduced KubeVirtBMC and showed how it provides virtual BMC endpoints for KubeVirt VMs. We tested it with raw IPMI and Redfish commands. That was fun, but the real power of KubeVirtBMC shines when you pair it with actual bare-metal provisioning tools. In this post, we’ll walk through a complete end-to-end demo: using Metal3 to manage and provision KubeVirt VMs through KubeVirtBMC , just as if they were physical servers. You’ll be able to follow along and replicate every step.

Metal3 (Metal Kubed) is a CNCF Incubating project that brings bare-metal host management into the Kubernetes ecosystem. Under the hood, it uses OpenStack Ironic to handle the heavy lifting, inspecting hardware, setting boot devices, and writing OS images to disks. The core abstraction is the BareMetalHost custom resource. You declare what you want (BMC address, credentials, desired image), and Metal3 takes care of the rest. The typical BareMetalHost lifecycle goes like this: Metal3 expects to talk to a BMC via IPMI or Redfish. Physical servers have these built in.

KubeVirt VMs don’t—unless you give them one with KubeVirtBMC. Everything runs in a single Kubernetes cluster. Metal3 manages BareMetalHost resources that point to the virtual BMC endpoints created by KubeVirtBMC. When Metal3 tells Ironic to power on a host or attach a boot image, Ironic sends Redfish requests to the BMC pod. The BMC pod translates these into Kubernetes API calls to control the KubeVirt VM. Metal3 doesn’t know (or care) that it’s talking to a VM. If you don’t have a cluster ready, refer to the previous post for instructions on setting one up with KubeVirt CI, or simply using Harvester .

Both KubeVirtBMC and Metal3 components require cert-manager for webhook certificates. We’ll create a VM that simulates a bare-metal server. It needs a disk, a network interface, and it should start in a powered-off state so that Metal3 can manage its lifecycle from scratch. Create the VirtualMachine with runStrategy: Halted so it stays powered off: Now create the VirtualMachineBMC and its credential Secret: The BMC service is accessible at metal3-demo-vm-virtbmc. local within the cluster. Metal3 consists of two main components: the Bare Metal Operator (BMO) and Ironic.