Released

PodSteer v0.6.0

The largest release yet. A new Topology page draws a namespace, several, or the whole cluster as one map in which every line is a relationship Kubernetes has, with PodSteer's findings on the boxes; switch on observed traffic and it adds request rates, errors and latency from the Prometheus your service mesh or eBPF tool already feeds, with nothing installed in the cluster. An application gains a Map and a Logs tab, logs gain level filters and a volume histogram, Kubernetes 1.37's gang scheduling has panels, and the pod table is filtered, sorted and paged by the application, which keeps a 10,000-pod cluster responsive. Linux and Windows get installers.

What you need to know.

  • Traffic on the topology reads your cluster's Prometheus, so it needs the monitoring-stack query switched on for that cluster under Settings → Clusters. It is off by default, as before.
  • Reading Linkerd's traffic from linkerd-viz's Prometheus usually needs a port-forward, so your account needs create on pods/portforward in that namespace; each query appears in the audit log as one.
  • With five namespaces or fewer in scope, traffic queries name those namespaces, so the names reach your Prometheus query log and the cluster's audit log.
  • Pod search now uses Go's regular-expression syntax: no lookaround and no backreferences. A pattern using them is reported as invalid and matches nothing.
  • Trend lines for clusters in background tabs are sparser, by design; the Trend panel says how often they are sampled.
  • On clusters over 128 nodes the disk figure can be partial or minutes old, and it says so.
  • Keep across restarts writes the namespace and the pod or Service name to settings.json, only for a forward you ticked. An older PodSteer ignores that field and drops it the next time it saves settings.
  • Linux users can install a package instead of unzipping.
  • Homebrew users: brew update, then brew upgrade --cask podsteer.

Topology

  • A Topology page: one namespace, several, or all of them as one map. Open it from the navigator, or from a namespace's row or details.
  • It draws workloads, ReplicaSets, Jobs, pods, Services, Ingresses, Gateway API gateways and routes when the cluster serves them, HorizontalPodAutoscalers, PodDisruptionBudgets, NetworkPolicies, ServiceAccounts, the ConfigMaps, Secrets and claims pods name, and custom resources that own something.
  • Every line is a relationship Kubernetes has. A NetworkPolicy is drawn as what it selects, not as allowed or blocked; ConfigMaps, Secrets and claims are names from templates and are never read.
  • Group by namespace, app label or any label, and collapse groups; with groups by application, tick which applications are drawn.
  • Switch kinds off in one row that scrolls sideways, each toggle with its complete count; search, and the map centres on the result.
  • The explanations (what is not drawn, what a status means) are in the page's help panel rather than under the map.
  • PodSteer's findings appear as badges on the boxes, and clicking a box opens its details in a drawer over the map.
  • The map never moves on its own: a Changed — Refresh badge says the scope changed, and an optional Live mode redraws without re-fitting the view.
  • Above 3,000 pods, pods are folded into counted boxes per workload, and the map says so.
  • Save the map as a PNG.

More about this →

Observed traffic

  • A traffic layer on the topology, a toggle in the toolbar and off until you switch it on, read from your cluster's own Prometheus: Istio, Linkerd, Beyla or OBI, Caretta, or Hubble's metrics.
  • Request or connection rates, error rates, and p50, p95 and p99 latency where the source exposes them, over 5 minutes, 15 minutes or an hour. The panel shows the PromQL it sent.
  • Lines move in the direction of the dependency, and traffic lines faster the busier they are. The motion is off under reduced motion and above 200 lines.
  • Nothing is installed in the cluster and Hubble Relay is not used. When no source is found, the panel says what would be needed.
  • Linkerd's own Prometheus, from linkerd-viz, is discovered and can be chosen. When a backend refuses the API server's proxy, as linkerd-viz's does, the query goes over a short-lived local port-forward instead.
  • Settings → Clusters has a picker for which discovered Prometheus answers.

More about this →

Namespace selector

  • The sidebar's namespace selector takes several namespaces: All, a filter box and checkboxes. A tick applies after a moment; there is no Apply button.
  • The set applies to Pods, Deployments and the other workloads, Events, Applications, Helm, Security, custom resources, the Multi-kind table and the Topology, and is remembered per cluster.
  • On All clusters the selector offers the union of the open clusters' namespaces, and says which clusters hold a namespace when not all do.
  • RBAC review stays per namespace, and the dialogs that need one namespace ask for it when several are selected.

More about this →

Applications and logs

  • A Map tab for an application: its workloads, their ReplicaSets, Jobs and pods, the Services that select them, its Ingresses, and the ConfigMaps, Secrets, PersistentVolumeClaims and ServiceAccounts they share. Only relationships that exist in the cluster are drawn.
  • An application's members are the objects carrying its app.kubernetes.io/instance label and what they own.
  • A Logs tab that reads all of an application's pods in one view, each pod in its own colour, capped at 40 streams.
  • Level filter chips on a log, including unknown, each with its count.
  • A log-volume histogram: click a bar to jump there. It can be driven from the keyboard.

More about this →

Overview

  • Version end-of-life and upgrade notes are icons with tooltips instead of a line of text.
  • The support table includes Kubernetes 1.37, and the tooltip says when the version you are checking against is itself out of support.

Kubernetes 1.37

  • Workload and PodGroup panels for scheduling.k8s.io/v1beta1, the gang-scheduling objects. They need the GenericWorkload feature gate on the cluster.
  • A pod links to its pod group, and PriorityClass is in the navigator.
  • In-place resize works on sidecar containers, and says so when the server accepted the change but did not apply it.

More about this →

AI agents

  • A new cluster_findings MCP tool returns the ranked findings with the objects behind them, filterable by severity and namespace.

More about this →

Staying connected

  • Credentials renewed in your kubeconfig reach tabs that are already open, and Retry after a 401 reads them again.
  • Live updates recover after a 401, for instance after the machine slept.
  • Throttling (429) is reported as throttling, not as a PodDisruptionBudget refusal.
  • A port-forward that cannot reconnect shows Lost with Reconnect instead of vanishing.
  • Keep across restarts, per port-forward and off by default: a kept forward is restored when you reconnect that cluster.
  • A panic in background work is contained instead of ending the session, a cached read stuck after one is fixed, and an unexpected error in the interface shows a notice.

Large clusters

  • The pod table is filtered, sorted and paged in the application: the data sent per refresh at 10,000 pods falls from about 23 MB to about 120 KB.
  • CSV export and Select all N matching cover every matching pod, not only the page on screen.
  • Every pod has a usage history, held in memory and never written to disk.
  • Clusters in the background are sampled less often, and the Trend panel states the cadence.
  • On clusters over 128 nodes, disk figures are refreshed in rotating batches and the coverage is shown, for example 87% (192/300).

Install and support

  • Linux: an AppImage, a .deb and an .rpm, for amd64 and arm64, next to the zip.
  • Windows: an installer next to the zip. Like the zip it is not code-signed yet, so SmartScreen warns; check it against the SHA-256 checksums.
  • Settings, then About: copy debug info (versions and the number of clusters, nothing else) and Report a bug.
  • The first-run screen offers Add cluster, importing from a cloud CLI, or choosing a kubeconfig folder.