KubeVirtBMC logo KubeVirtBMC

Hardware workflows, no hardware

A BMC for every virtual machine.

KubeVirtBMC gives each KubeVirt VM its own IPMI and Redfish endpoint. Bare-metal provisioning tools power it, boot it and install it as if it were a physical server.

Install with Helm
helm repo add kubevirtbmc https://charts.kubevirtbmc.io/helm upgrade --install kubevirtbmc kubevirtbmc/kubevirtbmc \  --namespace kubevirtbmc-system --create-namespace
Redfish80/TCP
IPMI (opt-in)623/UDP
API groupbmc.kubevirt.io/v1beta1
LicenseApache-2.0

Why

Provisioners speak IPMI and Redfish. Virtual machines don't.

Metal3, Tinkerbell and Seeder manage servers through their baseboard management controller: power state, boot device, virtual media. A KubeVirt VM has no BMC, so these tools cannot see it.

KubeVirtBMC plugs that gap. For every VM you point it at, the operator runs a virtual BMC that answers standard IPMI and Redfish calls and turns them into KubeVirt operations.

Works with Metal3 Tinkerbell Seeder

Features

What a virtual BMC answers

IPMI
ipmitool works as-is Power on, power off, reset and boot device selection over IPMI v1.5 and v2.0, so both -I lan and -I lanplus work. Off by default; turn it on per VM with spec.ipmi.enabled.
Redfish
A Redfish service per VM RESTful server management that follows the DMTF Redfish specification, rooted at /redfish/v1.
Virtual media
Mount an ISO remotely Attach an installer or recovery ISO through Redfish virtual media, backed by KubeVirt hotplug volumes and CDI.
CRD
Kubernetes-native One VirtualMachineBMC resource per VM. The controller reconciles a Deployment that runs the virtual BMC, a Service in front of it, and the ServiceAccount and RoleBinding it needs.
Provisioning
Fits existing pipelines Anything that already speaks IPMI or Redfish can drive a KubeVirt VM, with no plugin or fork.

How it works

From a resource to a reachable BMC

  1. Install the operator

    Deploy the controller with the Helm chart or the single install manifest.

  2. Point it at a VM

    Create a VirtualMachineBMC that references a VirtualMachine and a Secret holding the BMC credentials.

  3. Get an endpoint

    The controller rolls out a Deployment running the virtual BMC, and a Service exposing 80/TCP for Redfish, plus 623/UDP for IPMI when it is enabled.

  4. Provision as usual

    Your provisioner talks to that Service. Power and boot requests become KubeVirt operations on the VM.

virtualmachinebmc.yaml
apiVersion: bmc.kubevirt.io/v1beta1kind: VirtualMachineBMCmetadata:  name: node-01  namespace: defaultspec:  virtualMachineRef:    name: node-01  authSecretRef:    name: bmc-secret
redfish
curl -s -u admin:password \    http://node-01-virtbmc.default.svc/redfish/v1/Systems/1
ipmitool
ipmitool -I lanplus -U admin -P password \    -H node-01-virtbmc.default.svc power status

Get involved

Open source, Apache 2.0 licensed

Open issues and ask questions in the main repository. Pull requests are welcome in any of the project’s repositories.