StageSet vs Flux kustomize-controller

This is the closest comparison — StageSet is built for
Flux and borrows its conventions. Flux’s kustomize-controller
(and helm-controller) reconcile a source into the cluster continuously, exactly
like StageSet. The difference is granularity.
What kustomize-controller gives you
- Continuous reconciliation of a
Kustomizationfrom a Flux source, with pruning, health checks, drift correction, anddependsOnordering between Kustomizations. - Impersonation via
serviceAccountName,postBuildsubstitution, patches — the same surfaceStageSetdeliberately mirrors.
Where StageSet differs
- Ordering within a release.
kustomize-controllerapplies one Kustomization as a unit; ordering exists only between Kustomizations viadependsOn. To sequence three steps you create three Kustomizations and wire their dependencies.StageSetexpresses that as one resource with orderedstages— and the controller waits for each stage’s health before the next. - Typed actions between steps. Migrations, HTTP gates, waits, and transient applies are first-class actions; in plain Flux you’d model these as extra Kustomizations and Jobs.
- Release-level features. Update windows, versioned migrations, and rollback operate across the whole staged release.
- Source-native. A stage consumes a
GitRepository/OCIRepository/Bucketdirectly (just likekustomize-controller), or anExternalArtifact(RFC-0012), or a producer resolved to its artifact — which is how it also pairs with renderers like JaaS. - SOPS parity. Encrypted Secrets in a source decrypt the same way, via
spec.decryption(age, PGP, or cloud KMS), so a SOPS-using repo ports across unchanged.
Using them together
StageSet sits alongside the other Flux controllers and reuses Flux’s source layer,
notifications (Alert/Provider targeting kind: StageSet), and reconcile
annotations. Use kustomize-controller for ordinary one-shot reconciliation and
reach for StageSet when a release needs ordered, gated stages.