-
Notifications
You must be signed in to change notification settings - Fork 297
Description
User Story
As an operator, I want a simple, reproducible, and supported way to install and upgrade Bare Metal Operator (BMO) using mechanisms that are commonly used and well-understood in other Kubernetes projects.
Detailed Description
The currently documented installation method for BMO involves cloning the repository and running deploy.sh, which renders manifests and applies them directly (optionally including Ironic).
From an operator perspective, this approach has a few drawbacks:
- Operational ergonomics
-
Requiring a local clone of the repository and execution of a script feels clunky compared to the installation workflows used by many other Kubernetes operators.
-
The documentation does not strongly guide users towards deploying Ironic via IRSO, which can lead to less optimal or inconsistent setups.
- Image versioning / reproducibility
-
The manifests generated by
deploy.shdo not set an explicit image tag, which results in the controller using:latest. -
This can lead to breakage on Pod restart if a newer image is pulled that expects CRDs or behavior not yet present in the cluster.
-
We recently experienced exactly this scenario.
-
Notably, the release artifacts already generated by the project do pin the image tag, so the project clearly already has a concept of versioned, reproducible manifests.
Proposed Improvements
I’d like to suggest a small, incremental improvement, as well as a possible longer-term direction:
- Short-term: pin the image tag in
deploy.sh
As an immediate safety improvement, deploy.sh should set the image tag explicitly (for example via an environment variable or derived from the release version), instead of defaulting to latest.
This would:
-
Prevent accidental upgrades on Pod restart
-
Align
deploy.shbehavior with the already existing release artifacts -
Reduce the risk of CRD / controller version skew
- Medium-term: offer a more conventional installation path
In addition to (not necessarily replacing) deploy.sh, consider one or both of the following:
-
Static, versioned manifests per release, published as release artifacts and documented as the recommended install/upgrade path (similar to cert-manager and other operators).
-
A Helm chart for BMO without Ironic, where:
-
CRDs are managed separately (as is already common practice and consistent with earlier concerns),
-
Helm is used only for the controller, RBAC, and related resources.
-
This is not a proposal for Helm to manage CRD lifecycle automatically, but rather to provide an optional, familiar packaging format for users who already operate clusters using Helm or GitOps tools.
Anything else you would like to add:
-
I am aware of earlier discussions and concerns around Helm support for BMO, and I believe those concerns are still valid — especially around CRD ownership and lifecycle.
-
The intention here is not to remove or replace the existing deployment approach, but to:
-
improve safety and reproducibility of the current script, and
-
optionally provide a more conventional and discoverable installation path for new users.
-
-
There is also an existing SUSE Helm chart for BMO, but it is currently outdated. Many users are understandably uncomfortable relying on third-party charts for core infrastructure components.
/kind feature