Conversation
…g if a cluster mets requirements Signed-off-by: Christopher Haar <christopher.haar@upbound.io>
|
Docs preview: https://modelplane-docs-pr-488.vercel.app (ready once the site's Content workflow finishes) |
haarchri
force-pushed
the
provided-serving-stack
branch
from
October 1, 2026 17:35
128e339 to
cc12142
Compare
This branch has not been deployed
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.
Description of your changes
An existing cluster often already runs
cert-manager,kube-prometheus-stackand agatewaystack. Modelplane installed its own copies anyway, so the installs fought over cluster-scoped CRDs and the only way out was taking the break-glass Composition.This adds an all-or-nothing Provided mode. With
spec.cluster.existing.components: ProvidedModelplane installs no substrate at all. Every serving stack component now carries a role:substrate, or Modelplane's own configuration and each substrate entry states what a provided cluster must supply in its place: the APIs to check, the expectations nothing can check (controller wiring, GPU drivers), and what users can skip. The checks render as observe-only provider-kubernetes
Objectson the target cluster, and aRequirementsMetcondition on the ServingStack, mirrored onto theInferenceCluster, names exactly what is missing instead of failing later with an unclear error.Modelplane's own configuration (the gateway pair and its PKI, the KAI Queues, ModelExpress) still composes, with each substrate
depends_onedge gated on the checks standing in for it, so nothing is applied into a cluster whose API can't accept it. Unmet requirements block only their dependents and keep theServingStackunready; everything satisfiable reconciles, so an admin watches the checks go green one by one. On teardown Modelplane cannot hold a substrate it does not own, so finalizers on its configuration rely on the user keeping their controllers running.The field is immutable, like
spec.stack: flipping a live cluster from Managed to Provided would uninstall its substrate.Before:
After, on a cluster that already runs the substrate:
What the platform owner sees while the cluster falls short:
Validated end to end with
nix run .#e2e -- --provided --verify(CI labeltest-e2e-provided): the substrate is pre-installed from the generated inputs under non-mp-release names with kube-prometheus-stack held back, and the run assertsRequirementsMetnames it, flips to True once it installs, that the serving stack composed no Helm release of its own, and that a live request returns 200.Fixes #436
I have:
nix flake check(or./nix.sh flake check) and made sure it passes.git commit -s.