Skip to content

FAQ

Is it an operator? No. The agent is a timer loop: it collects, evaluates and writes its ClusterReadiness status every interval. The verdict depends on the knowledge base and the calendar (end-of-life dates), neither of which produces a Kubernetes event, so a watch-driven reconciler would requeue on unrelated churn and still miss the day an EOL date passes. There is no controller-runtime, informer cache, leader election or webhook. The argument in full is in the architecture guide.

Does it change anything in my cluster? No. The agent writes only its own ClusterReadiness object and (by default) that object's CRD. It never upgrades, patches or annotates anything. Security model and RBAC.

Why does it need to read every Secret? It does not read them all, but RBAC cannot grant less: listing Helm's release Secrets (owner=helm) needs list on all Secrets. rbac.helmSecrets=false removes the grant, at the cost of Helm chart findings. The trade-off.

Can it tell me which client still calls a deprecated API? Not by name. It reads the apiserver's apiserver_requested_deprecated_apis metric, which says that some client requested an API, not which one, and only for the apiserver replica that answered. The apiserver's audit log records the caller (the k8s.io/deprecated annotation); upgradescope does not read audit logs. Deprecated-API detection.

Why is my cluster unknown and not ready? A required check could not run, so a blocker may have been missed: most often a target past the knowledge base's horizon. Troubleshooting.

Why does the report list unrecognized images? Those are images that no add-on in the registry claims, such as a plain busybox. It is a gap in add-on detection, not a finding: it never changes the score or the verdict. If one is an add-on you expected to be judged, see the add-on registry for how to add it. Read the result.

How fresh is the knowledge base, and does it phone home? It is compiled into the binary and nothing is fetched at runtime; it is as fresh as the release you run. Knowledge base.

Is the score comparable between clusters and over time? Yes, for the same target and knowledge base: it is a fixed formula of the blocker and warning counts. Gate on the verdict, though; the score is for trends. Verdict and score.

Will the same scan give the same answer tomorrow? For the same inventory, knowledge base and target, yes, except where a date passes: end-of-life is calendar-based. Pin the binary in CI for a gate that changes only when you change it.

Does it work offline or air-gapped? scan --files needs nothing but the manifests. The agent talks only to its own apiserver and, optionally, your server. Mirror the image and the chart into your registry; image.repository and imagePullSecrets point the chart at it.

Can teams see only their own clusters on the server? Yes. A read token minted with upgradescope tokens create --read --teams payments reads only the clusters payments owns a namespace in, and only payments' findings and team scores; a finding that also covers other teams' namespaces is cut to payments' namespaces and objects, and any other cluster answers 404. An authenticating proxy's group header can set the scope instead. Tenants that must not share a database still need one server each. Read access.

Does it support kubectl client skew, CRD versions, feature gates? CRD versions yes: a scan reports deprecated, unserved and stored-but-unserved versions of the CRDs it finds, live and in --files (#157). Not today: client skew needs audit logs, and feature gates are not in the knowledge base.

Who wrote it? The design and the review are the maintainer's. Most of the code was written by coding agents (see the Co-Authored-By trailers in the git history), working from specs and plans drafted with them and approved by the author; the planning notes are not published, and the design decisions are in the architecture guide. The author interned at chkk.io, which sells in this category. upgradescope is clean-room: no proprietary code, data, schemas or documents were used, every knowledge-base entry is generated from upstream source or carries a public citation, and CI checks both. See Comparison and the background research.