Operator
The operator is the engine. It's a Kubernetes controller (built with controller-runtime, Apache-2.0) that watches for UpgradeAnalysis resources, builds the logical mirror, computes the verdict, and publishes a report.
What it does
- Collects a cluster snapshot: workloads, nodes, storage, PDBs, add-ons, deprecated APIs.
- Evaluates add-on compatibility against the target version using the embedded matrix.
- Builds the dependency graph and propagates risk.
- Scores readiness (Health · Capacity · Stability · Compatibility) and computes the deterministic verdict.
- Publishes the verdict to the CR
statusand the full report to the configured destination. - Serves reports back over an in-cluster HTTP endpoint (reading remote destinations on demand).
- Remediates — executes approved RemediationPlans.
Custom resources
The operator defines two cluster-scoped CRDs and installs them itself at startup (embedded via go:embed) — no separate CRD apply step:
| CRD | Purpose |
|---|---|
UpgradeAnalysis | The input: what to analyze and how. Its status holds the verdict. |
RemediationPlan | AI-proposed fixes, gated on approval. |
See the full field reference in the CRD reference.
A minimal analysis
apiVersion: mirops.mirops.io/v1
kind: UpgradeAnalysis
metadata:
name: to-1-34
spec:
targetVersion: "1.34" # the only required field
Configuration surface
| Area | Fields |
|---|---|
| Target | targetVersion, scoringProfile |
| Scope | scope.mode, scope.excludeNamespaces |
| Source | source.type (file / s3 / blob / pvc) + destination fields |
| AI | ai.enabled, ai.provider, ai.model, ai.maxTokens, ai.credentialsSecret, ai.remediation.* |
| Resync | resync.interval |
Deterministic and reproducible
The operator recomputes the same verdict for the same mirror. It reconciles on spec changes and on-demand refresh — not on its own status writes — so it doesn't loop, and (with AI on) it memoizes the result per unchanged snapshot to avoid redundant model calls.
Built with
The operator is scaffolded with Kubebuilder and built on standard Kubernetes and cloud SDKs:
| Tool / library | Version |
|---|---|
| Go | 1.24 |
| Kubebuilder (project layout) | 4.10 · go.kubebuilder.io/v4 |
| controller-runtime | v0.22.4 |
controller-tools (controller-gen) | v0.19.0 |
Kubernetes libraries (client-go / api) | v0.34 |
| AWS SDK for Go v2 (S3 reports) | aws-sdk-go-v2 v1.41 · service/s3 v1.101 |
| Azure SDK for Go (Blob reports) | azidentity v1.13 · storage/azblob v1.6 |
Install
Install with the Helm chart, or jump to your first analysis.
- Source: github.com/miropshq/mirops