Cluster assessment
Ranked findings instead of a pod list: crash loops, OOM kills, pods that will never schedule, sizing problems — each with what to do about it.
Capacity and trends
Scheduling is decided by what pods reserve, not by what they use, so PodSteer shows both on one track and names the gap between them. It samples each connected cluster while the application is open and keeps that history on your machine, and it can draw longer trends from the Prometheus or VictoriaMetrics you already run, sending a query only when you ask for one.
A cluster can refuse new pods while every usage graph looks calm, because the scheduler counts what pods reserved. PodSteer keeps allocatable capacity, requests, limits and usage as four separate figures, so "requested" and "used" are never folded into one dial you have to second-guess.
The totals leave out what should not be in them: finished pods occupy no node, and a cordoned node offers no pod slots. Efficiency divides what pods use by what they requested, never node usage, which also counts the kubelet, the container runtime and the operating system.
Usage comes from metrics-server, which is optional. When it is absent PodSteer says which of three things is true — not installed, not permitted to read it, or failing — because they need opposite next steps.
"Nothing measured" is kept apart from "no metrics API": a Deployment scaled to zero is not told to install metrics-server. A total that covers only some pods says how many it covers, counted against the pods metrics-server can actually report.
Kubernetes reports only the present, so PodSteer keeps its own record: it samples each connected cluster, every 30 seconds by default for the one on screen and less often for clusters in background tabs. The Trend panel says how often, so a sparse stretch is never read as an outage.
The history stays on your machine, for a day, a week or thirty days — or not at all, which also erases what was recorded. It carries no object names.
For trends longer than a session, PodSteer can chart the monitoring backend already in your cluster. It is off by default and set per cluster: On request puts a control on each chart, and When a chart opens sends a query as a chart opens or its range changes. Neither ever queries on the refresh tick.
Queries go through the API server's service proxy on your own credential, as GET requests, so no new host is contacted. The expressions are a fixed set, each aggregated to cluster or node level; there is no query box.
Be honest
Read next
Ranked findings instead of a pod list: crash loops, OOM kills, pods that will never schedule, sizing problems — each with what to do about it.
One namespace, several or all of them as one map — every line a relationship Kubernetes has — with observed traffic from Istio, Linkerd, Beyla, Caretta or Hubble.
Real tabs, one cluster each; one table across every open cluster; clusters found through your own cloud CLI.