Create an analysis
UpgradeAnalysis is cluster-scoped — it has no namespace. Only targetVersion is required.
The simplest form
apiVersion: mirops.mirops.io/v1
kind: UpgradeAnalysis
metadata:
name: to-1-34
spec:
targetVersion: "1.34"
kubectl apply -f analysis.yaml
kubectl describe upgradeanalysis to-1-34 # decision, score, reason, blockers
A fuller example
apiVersion: mirops.mirops.io/v1
kind: UpgradeAnalysis
metadata:
name: to-1-34
spec:
targetVersion: "1.34"
scoringProfile: production # production (strict) | non-production (lenient)
scope:
mode: application # all (default) | application (skip system namespaces)
excludeNamespaces: [monitoring]
source:
type: file # file | s3 | blob | pvc
resync:
interval: "30m" # re-run automatically; empty = run once
See the full field list in the CRD reference.
Re-running an analysis
-
Change the spec — any edit triggers a fresh analysis.
-
Refresh in place — bump the
mirops.io/refreshannotation (this is what the Web UI's Re-analyze button does):kubectl annotate upgradeanalysis to-1-34 mirops.io/refresh="$(date +%s)" --overwrite -
On a schedule — set
resync.interval. The operator re-analyzes each interval and skips the AI call when the cluster snapshot hasn't changed.
Choose a report destination
The default file destination is served over HTTP in-cluster. For durable, shareable reports, use a remote destination (S3/Blob/PVC).
Next
- Read the report from the CLI or a remote store.
- Gate CI on the verdict.