github nklmilojevic/sofka v0.12.0
v0.12.0: Milestone 5 ships; fleet and right-sizing open Milestone 6

latest releases: v0.28.4, v0.28.3, v0.28.2...
2 months ago

Milestone 5 (debugging & collaboration) ships in full, joined by the first pieces of Milestone 6 (:fleet, :rightsize) and a ctrl-e compact mode for small panes.

Highlights

  • Debugging & collaboration is complete:debug (pod + node, the latter previewed and confirmed), :bundle redacted incident bundles, :snapshot / :snapshots capture-and-review, :info runtime diagnostics, and richer log filtering.
  • Fleet & right-sizing open Milestone 6 — an opt-in :fleet health dashboard, a Prometheus/VictoriaMetrics backend that autodiscovers in-cluster, and :rightsize with a strategic-merge patch preview (no mutation).
  • Compact mode (ctrl-e) — collapses the header and footer into a single info line, so a small tiled or multiplexed pane is almost all table.

Added

  • Ephemeral debug container (:debug on a pod) — attaches a throwaway debug container via kubectl debug, prompting for the image (prefilled from [debug].image). d in the container picker pins --target=<container> so the debug container shares that container's process namespace. Disabled in read-only mode and gated by the debug guardrail; recorded in the action journal (#66).
  • Node debug pod workflow (:debug on a node) — launches kubectl debug node/<node> with the host filesystem mounted at /host and host PID/network/IPC namespaces joined. sofka previews exactly that access and requires confirmation before creating it, tracks the node debuggers it launched this session, and ships :debug-clean to remove them afterwards. Gated by the node-debug guardrail (#67).
  • Redacted diagnostic bundles (:bundle / :bundle-save) — assembles a Markdown incident bundle off-thread (manifest, explanation, redacted YAML + owner, events, session timeline, metrics snapshot, bounded recent logs), then writes it to a file. Secret data / stringData, credential-looking annotations, and last-applied-configuration are stripped unconditionally, and a manifest discloses every redaction. :bundle-save writes the previewed bundle to a temp file (#68).
  • Screen dumps and structured snapshots (:snapshot / :snapshots) — captures the current table — its columns and visible rows, plus metadata (context, cluster, namespace, resource, filter, timestamp) — to a file as aligned text (default), json, or yaml. :snapshots browses saved captures newest-first with their age; opens one into a viewer with a staleness banner, d deletes the highlighted file. Files land in $XDG_STATE_HOME/sofka/snapshots (#69).
  • Runtime diagnostics (:info / sofka --info) — version/build, live context/cluster/API server, discovery + Metrics API status, watch error counts, config sources, an active-config summary (skin, readonly, aliases, plugins, views, bookmarks, guardrails, warnings), and the state/snapshot/bundle directories. sofka --info prints the static subset offline — handy in CI. Only identifiers and counts are emitted, never credentials, tokens, or Secret values (#70).
  • Richer log controls — the / filter now accepts a case-insensitive substring (highlighted, as before), a /regex/, or a leading ! to invert (keep non-matching lines). A malformed regex is flagged [invalid regex] rather than silently hiding the buffer. z clears the on-screen buffer; the live stream keeps appending. A new [logs] section configures initial tail, follow buffer, and an optional since lookback (#71).
  • Opt-in cross-context fleet dashboard (:fleet) — a side-by-side health summary of the kubeconfig contexts listed in [fleet].contexts: connectivity (with a clear error on the row if a context is unreachable), Kubernetes version, node readiness, unhealthy pods, Flux Ready=False failures, and the resolved read-only policy. Gathered concurrently with a per-context timeout so a slow cluster never blocks the rest. switches to the highlighted context; r re-gathers (#75).
  • Historical right-sizing (:rightsize, aliases :sizing, :vpa) — estimates right-sized requests from historical usage in a Prometheus-compatible backend. Per container: current requests vs P50/P95/P99 CPU & memory over the window, a suggested request (P95 + headroom), OOM & CPU-throttle evidence, and a strategic-merge patch preview you can copy with c and apply yourself. Zero-config: with no [providers.metrics], sofka autodiscovers a query Service in-cluster by well-known labels and reaches it through the API-server proxy; configure it via [providers.metrics] to point at an external URL or tune the window/headroom/step. Uses standard cAdvisor metric names; VictoriaMetrics cluster mode (vmselect) needs a tenant path in the URL (#76).

Changed

  • Compact mode (ctrl-e) — collapses the seven-line header and the footer into a single info line (kind · count · namespace · context, plus a transient flash and the live/sync dot), so a small tiled or multiplexed pane is almost all table. Folds k9s's separate header (ctrl-e) and footer (ctrl-g) toggles into one. Works in every mode (#74).

Full Changelog: v0.11.0...v0.12.0

Don't miss a new sofka release

NewReleases is sending notifications on new releases.