Skip to content

Create kubevirtbmc packs 0.4.1, 0.5.1, 0.6.0 - #292

Open
nctiggy wants to merge 3 commits into
mainfrom
add-kubevirtbmc-packs
Open

Create kubevirtbmc packs 0.4.1, 0.5.1, 0.6.0#292
nctiggy wants to merge 3 commits into
mainfrom
add-kubevirtbmc-packs

Conversation

@nctiggy

@nctiggy nctiggy commented Aug 6, 2026

Copy link
Copy Markdown

Purpose

Adds packs for KubeVirtBMC, which provides out-of-band management for KubeVirt virtual machines via IPMI and Redfish. It exposes each VM through the same interfaces you would use against a physical server's BMC — power on/off/reset, set boot device, attach virtual media — so bare-metal provisioning tooling that has no knowledge of Kubernetes (Tinkerbell, Harvester Seeder, MAAS, Ironic) can drive VMs directly.

This pairs naturally with the Virtual Machine Orchestrator pack: VMO runs the VMs, KubeVirtBMC makes them look like physical hosts to a provisioning system.

Three versions, the latest patch of each of the last three minor lines of the upstream chart at https://charts.kubevirtbmc.io:

Pack Chart App Images
kubevirtbmc-0.4.1 0.4.1 v0.7.1 starbops/virtbmc-controller, starbops/virtbmc
kubevirtbmc-0.5.1 0.5.1 v0.8.1 starbops/virtbmc-controller, starbops/virtbmc
kubevirtbmc-0.6.0 0.6.0 v0.9.0 kubevirtbmc/virtbmc-controller, kubevirtbmc/virtbmc

Packaging notes

Two images per pack. The chart only references the controller, but the controller creates one virtbmc agent pod per VirtualMachineBMC at runtime. The agent image is listed in pack.content.images so airgap mirroring picks it up.

Image org changed at chart 0.6.0starbops/* through 0.5.1, kubevirtbmc/* from 0.6.0. Handled per pack and called out in the READMEs for anyone mirroring across that boundary.

Namespace is pinned to kubevirtbmc-system. The controller hardcodes that namespace internally, so installing elsewhere leaves it unable to manage its own resources.

Required dependency on virtual-machine-orchestrator >= 4.8.3. KubeVirtBMC's controller watches kubevirt.io VirtualMachine and VirtualMachineInstance resources. Without those CRDs the manager fails cache sync after a two-minute timeout and exits 1, so the pod crashloops. The constraint makes Palette reject such a profile up front rather than deploying into a crashloop.

4.8.3 is the floor because it is the first VMO release shipping KubeVirt >= 1.6.0, which is what KubeVirtBMC requires:

VMO KubeVirt
4.10.1 v1.8.4
4.9.1 v1.7.0
4.8.3 v1.6.3 — first that qualifies
4.8.2 v1.5.2
4.7.5 v1.5.2

VMO 4.8.3 through 4.9.9 are present in the public registry, so the constraint is satisfiable outside the Spectro-internal registries.

No cert-manager dependency, though the chart hard-requires it — it unconditionally creates a cert-manager Issuer/Certificate and the webhooks rely on cert-manager.io/inject-ca-from for CA injection. Palette installs and manages cert-manager on its clusters, so a pack dependency would force a redundant layer. It stays documented in the READMEs since it still applies outside Palette.

Scenarios validated

Pack 0.6.0 was pushed to an OCI pack registry, added to a cluster profile, and applied to a Palette-managed k3s v1.34.9 cluster.

Confirmed on-cluster:

  • Helm release reports kubevirtbmc-0.6.0 / v0.9.0 — pack values flow through intact
  • Namespace kubevirtbmc-system created
  • CRD virtualmachinebmcs.bmc.kubevirt.io registered, carrying the 0.6.0 schema (spec.ipmi and status.bootOverride both present)
  • Controller image resolves to kubevirtbmc/virtbmc-controller:v0.9.0, confirming the org rename is handled
  • Both cert-manager Certificates and the Issuer reach READY=True
  • Mutating and validating webhook configurations registered
  • ServiceAccount, RBAC, metrics Service and webhook Service created
  • Leader election acquired

That cluster deliberately had no KubeVirt, and the controller crashlooped exactly as expected:

ERROR controller-runtime.source.Kind  if kind is a CRD, it should be installed before calling Start
  {"kind": "VirtualMachine.kubevirt.io",
   "error": "no matches for kind \"VirtualMachine\" in version \"kubevirt.io/v1\""}

That result is what motivated the required VMO dependency. Not yet validated: a run with VMO present, which is the case where the controller should stay healthy. Happy to add that result before merge if reviewers want it.

Repo validators (validate-packs.sh, validate-values.sh) pass for all three packs, including crane resolution of all six images. Each pack's values also render byte-identical to the upstream chart defaults.

Notes for reviewers

The IPMI simulator became opt-in in chart 0.6.0 (spec.ipmi.enabled: true); before that it was always on. Anyone upgrading across that boundary silently loses UDP 623 while Redfish keeps working. Documented in the Upgrade section of the 0.6.0 README.

Helm does not upgrade CRDs shipped in a chart's crds/ directory, and VirtualMachineBMC gained fields across these releases, so the READMEs include the manual kubectl apply for the CRD when upgrading an existing install.

nctiggy and others added 3 commits August 6, 2026 10:28
KubeVirtBMC provides out-of-band management for KubeVirt virtual machines
via IPMI and Redfish, letting bare-metal provisioning tooling (Tinkerbell,
Harvester Seeder, MAAS, Ironic) drive VM power state and boot device.

Packs the upstream chart from https://charts.kubevirtbmc.io for the latest
patch of the last three minor lines:

  0.4.1 -> app v0.7.1
  0.5.1 -> app v0.8.1
  0.6.0 -> app v0.9.0

Notes:

- Each pack lists two images in pack.content.images. The chart only
  references the controller, but the controller creates one virtbmc agent
  pod per VirtualMachineBMC at runtime, so the agent image is included for
  airgap mirroring.
- The image org changed at chart 0.6.0: starbops/* up to 0.5.1,
  kubevirtbmc/* from 0.6.0 onward.
- Namespace is pinned to kubevirtbmc-system because the controller
  hardcodes that namespace internally.
- cert-manager is a hard prerequisite; the chart unconditionally creates a
  cert-manager Issuer/Certificate and the webhooks rely on CA injection.
  KubeVirt must also be present before install. Both are documented in the
  pack READMEs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
KubeVirtBMC's controller watches kubevirt.io VirtualMachine and
VirtualMachineInstance resources. Without those CRDs the manager fails cache
sync after a two-minute timeout and exits 1, so the controller crashloops --
confirmed on a Palette k3s cluster where every other resource (CRD, webhooks,
cert-manager Issuer/Certificates, RBAC, Services) reconciled cleanly.

Declare Virtual Machine Orchestrator as a required dependency so Palette
blocks a profile that omits it, rather than letting it deploy into a
crashloop.

minVersion is 4.8.3 because that is the first VMO release shipping KubeVirt
>= 1.6.0 (v1.6.3); 4.8.2 and earlier ship v1.5.2, below what KubeVirtBMC
needs. Verified against the pack API:

  VMO 4.10.1 -> KubeVirt v1.8.4
  VMO 4.9.1  -> v1.7.0
  VMO 4.8.3  -> v1.6.3
  VMO 4.8.2  -> v1.5.2
  VMO 4.7.5  -> v1.5.2

VMO 4.8.3 through 4.9.9 are present in the public registry, so the constraint
is satisfiable outside the Spectro-internal registries.

No cert-manager dependency entry: Palette installs and manages cert-manager
on its clusters (spectro-cert-manager images, no Helm release), so requiring
the pack would force a redundant layer. It stays documented as a prerequisite
in the READMEs since it still applies outside Palette.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Palette clusters deploy cert-manager by default, so reword that prerequisite
around Palette-managed rather than user-installed, keeping the outside-Palette
case documented.

Drop the note about removing the VMO dependency for upstream KubeVirt --
customers deploy KubeVirt through VMO, so the escape hatch is noise.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant