Create kubevirtbmc packs 0.4.1, 0.5.1, 0.6.0 - #292
Open
nctiggy wants to merge 3 commits into
Open
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
kubevirtbmc-0.4.1starbops/virtbmc-controller,starbops/virtbmckubevirtbmc-0.5.1starbops/virtbmc-controller,starbops/virtbmckubevirtbmc-0.6.0kubevirtbmc/virtbmc-controller,kubevirtbmc/virtbmcPackaging notes
Two images per pack. The chart only references the controller, but the controller creates one
virtbmcagent pod perVirtualMachineBMCat runtime. The agent image is listed inpack.content.imagesso airgap mirroring picks it up.Image org changed at chart 0.6.0 —
starbops/*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 watcheskubevirt.ioVirtualMachineandVirtualMachineInstanceresources. 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 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/Certificateand the webhooks rely oncert-manager.io/inject-ca-fromfor 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:
kubevirtbmc-0.6.0 / v0.9.0— pack values flow through intactkubevirtbmc-systemcreatedvirtualmachinebmcs.bmc.kubevirt.ioregistered, carrying the 0.6.0 schema (spec.ipmiandstatus.bootOverrideboth present)kubevirtbmc/virtbmc-controller:v0.9.0, confirming the org rename is handledCertificates and theIssuerreachREADY=TrueThat cluster deliberately had no KubeVirt, and the controller crashlooped exactly as expected:
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, includingcraneresolution 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, andVirtualMachineBMCgained fields across these releases, so the READMEs include the manualkubectl applyfor the CRD when upgrading an existing install.