Add Streamshub Console Helm charts proposal#4
Add Streamshub Console Helm charts proposal#4jankalinic wants to merge 3 commits intostreamshub:mainfrom
Conversation
Signed-off-by: jkalinic <jkalinic@redhat.com>
Signed-off-by: jkalinic <jkalinic@redhat.com>
|
|
||
| ## Compatibility | ||
|
|
||
| - CRD management will follow Helm community best practices (CRDs in `crds/` directory) to avoid conflicts with existing CRD installations |
There was a problem hiding this comment.
This is a great addition to the ecosystem! Regarding the CRD management strategy, since CRDs in the crds/ directory are ignored during helm upgrade, there’s a risk of version drift where hte new operator expects a schema (or a new stored version) that isn't present in the cluster.
There was a problem hiding this comment.
given that the Kustomize proposal previously flagged this limitation, should we formalize a strategy for CRD lifecycles? Options like a dedicated crds sub-chart or a job-based upgrade hook might help ensure that the operator's reconciliation logic doesn't fail after a routine helm upgrade.
There was a problem hiding this comment.
Valid concern, and one that the Kustomize proposal also surfaced. Would be good to align it to stay consistent here.
001-streamshub-console-helm.md
Outdated
| - The chart should **not** attempt to manage external dependencies such as Strimzi, Kafka, or Prometheus in this initial phase. | ||
| Those components have already well-maintained charts and could be addressed in a follow-up effort. | ||
|
|
||
| ### Possible Future: StreamsHub Umbrella Chart |
There was a problem hiding this comment.
Helm dependencies (Chart.yaml) can only point to other charts, not specific K8s CRs like a Kafka/KRaft CR...tp achieve the flow described, the umbrella chart would likely depend on the strimzi-kafka-operator chart, while the Kafka CRs themselves would be templates within the umbrella chart's templates/ directory.
There was a problem hiding this comment.
This distinction is important for how we'll need to pass values down to the subcharts to ensure the operator is ready before the Kafka resources are reconciled
There was a problem hiding this comment.
You're right that Chart.yaml dependencies can only reference other Helm charts, not raw Kubernetes CRs. The phrasing "declare Helm dependencies on ... " might be misleading, if that's the case i can re-phrase it. What i actually meant was:
- The umbrella chart (if it exists in the future) declares a dependency for example on the
strimzi-kafka-operatorHelm chart - The Kafka CRs themselves live an example templates inside the umbrella chart.
001-streamshub-console-helm.md
Outdated
| ### Possible Future: StreamsHub Umbrella Chart | ||
|
|
||
| Once official charts exist for the Console operator and operands, it becomes possible to introduce a `streamshub` | ||
| umbrella Helm chart that composes the full stack. This chart would declare Helm dependencies on: |
There was a problem hiding this comment.
Another thing that came to mind is that helm only processes CRDs from the top-level chart's crds/ directory. CRDs defined in subcharts are silently skipped during install. So if the umbrella chart declares streamshub-console as a subchart dependency, the Console operator's CRDs won't be installed automatically.
There was a problem hiding this comment.
A common solution is to hoist all CRDs into the top-level umbrella chart's crds/ directory, or use a dedicated CRD loader job. Worth thinking through before the umbrella chart design is finalised, as it affects how the dependency structure would need to be laid out.
There was a problem hiding this comment.
Good point, and one that could easily catch us out if we don't design for it right away for console (before going for the umbrella chart).
If the Console operator chart is used as a subchart of the umbrella chart, its crds/ directory will be silently ignored on install — meaning the Console CRDs won't be present when the operator tries to reconcile.
The two main options to resolve this are:
- Put CRDs into the umbrella chart's
crds/directory — straightforward, but means duplicating CRD definitions across charts and keeping them in sync manually - Dedicated CRD loader job — a pre-install hook Job that applies CRDs via
kubectl apply, giving more control but adding complexity
A possible third option worth considering is dedicated streamshub-crds sub-chart (similar to the pattern used by cert-manager chart), which can be installed independently from the operator chart. This keeps CRD lifecycle explicit and avoids silent skipping.
This might to be something we should decide and agree on before the umbrella chart design is create — it directly affects the dependency and install ordering.
|
Having reviewed the the Kustomize PR and discussions, it may be worth revisiting whether the umbrella chart is the right direction. The CRD lifecycle limitations raised there and here - upgrade skipping, subcharts and the maintenance of keeping the stack in sync across components apply here as well and add some complexity. I will try to dig deeper and try to figure out more about the Helm limitations regarding CRDs. I think it's worth an open discussion on whether the umbrella chart belongs in this proposal, or whether it should be deferred until we have a clearer answer to those challenges. |
tomncooper
left a comment
There was a problem hiding this comment.
I think this is a good idea and would make the console more accessible.
My main comment is that I think discussion of an StreamsHub umbrella chart should be removed. That should be a separate proposal in my opinion.
I think you should have a separate section on CRD management and in discussing the various options you could reference the implications of each on using this chart as a sub-chart in some potential future umbrella chart.
My personal opinion is that Helm is not well suited to managing multiple operators and a deployment system with more fine grained control would be better. However, that is a discussion for a dedicated StreamsHub Umbrella Chart proposal.
001-streamshub-console-helm.md
Outdated
| - **Enable fine-tuned configuration** with value overrides, environment-specific configuration, and lifecycle management via Helm | ||
| - **Align with ecosystem standards**, making StreamsHub easier to discover and integrate | ||
| - **Unlock the possibility for a future StreamsHub Helm chart** — once the Console operator has its own chart, it becomes easier to compose a top-level `streamshub` chart | ||
| that depends on Console, Strimzi, Kafka, Prometheus, and other components, enabling full-stack deployment through a single `helm install` command |
There was a problem hiding this comment.
this shouldn't be a new line?
001-streamshub-console-helm.md
Outdated
| - The chart should **not** attempt to manage external dependencies such as Strimzi, Kafka, or Prometheus in this initial phase. | ||
| Those components have already well-maintained charts and could be addressed in a follow-up effort. | ||
|
|
||
| ### Possible Future: StreamsHub Umbrella Chart |
There was a problem hiding this comment.
My personal view is that this proposal shouldn't discuss an umbrella chart in detail, that is really for a separate proposal. The only part I think is relevant to mention an umbrella chart is with respect to the CRD management and how different options relate to potentially being used as a sub-chart.
001-streamshub-console-helm.md
Outdated
|
|
||
| - CRD management will follow Helm community best practices (CRDs in `crds/` directory) to avoid conflicts with existing CRD installations | ||
| - The chart will declare a minimum supported k8s version consistent with the operator's existing requirements | ||
| - Future versions of the chart will follow semantic versioning; breaking value changes will result in a major version bump and will be documented in a compatibility/migration guide |
There was a problem hiding this comment.
As I said above, I think the version numbering of the chart should not be linked to the Console version, however there should be a clear mapping documented on the release page and in the documentation.
|
|
||
| ### Delivery | ||
|
|
||
| - Charts to be hosted within the StreamsHub GitHub organisation, either in a dedicated `helm-charts` repository under a `${PROJECT_NAME}-charts/` directory |
There was a problem hiding this comment.
My view is that this chart should be managed from within the console repository (just like Strimzi). Ideally there would be system tests that test the helm chart build with new versions of the Console. That way it will be easier to make sure the helm chart is kept up to date with new releases.
001-streamshub-console-helm.md
Outdated
|
|
||
| - Charts to be hosted within the StreamsHub GitHub organisation, either in a dedicated `helm-charts` repository under a `${PROJECT_NAME}-charts/` directory | ||
| - Charts published to a Helm repository (like GitHub Pages or `oci` variants like Quay / DockerHub) + Artifact Hub following each release | ||
| - Chart versioning to follow the operator release cycle, with independent patch versioning where chart-only fixes are needed |
There was a problem hiding this comment.
This is kind of my pet theory, but I think that the chart version should not be linked to the operator version, they will diverge at some point (when you need fixes in the chart only) and so you might as well start from the position that they are separate to save confusion later.
|
|
||
| ## Compatibility | ||
|
|
||
| - CRD management will follow Helm community best practices (CRDs in `crds/` directory) to avoid conflicts with existing CRD installations |
There was a problem hiding this comment.
CRD management in Helm is......interesting. Personally, I think we should stick with the same approach as Strimzi (using the /crds directory) initially. This requires specific user intervention for upgrades but that is an established pattern.
I know you have mentioned a StreamsHub umbrella chart in this proposal, but I really feel that Helm is uniquely unsuited to managing multiple operator installations. I think a far better solution would be something that allows for more fine grained control, like a meta-operator (but perhaps OLM or ansible have better options).
I do think you should have specific section on CRD management and that you should discuss the various options in relation to this chart potentially being used as a sub-chart.
Signed-off-by: jkalinic <jkalinic@redhat.com>
This PR adds a proposal for introducing official Helm support for the StreamsHub Console operator and Console CR.