Meet

k9s

What It Is

k9s is a terminal based UI for Kubernetes clusters. It connects to whatever cluster your current kubectl context points to and gives you a live, keyboard driven view of every resource in the cluster: pods, deployments, services, configmaps, secrets, events, and more. Resources update in real time. You can tail logs, exec into containers, port forward to pods, delete resources, and drill through the ownership hierarchy from a Deployment down to individual containers, all without leaving the terminal and all without constructing kubectl commands by hand.

Why It Matters

The standard Kubernetes workflow for anyone inspecting a live cluster is a constant stream of kubectl commands: kubectl get pods -n my-namespace, then kubectl describe pod my-pod-7f9c8b-xkq2l, then kubectl logs my-pod-7f9c8b-xkq2l -c main-container -f, then kubectl exec -it my-pod-7f9c8b-xkq2l -- /bin/sh. Each command requires copying a generated pod name, specifying the namespace, and remembering which flags do what. For anyone working across multiple namespaces on multiple clusters, this becomes genuinely expensive cognitive overhead.

k9s reduces all of that to navigation. Press / to filter, arrow keys to move, l to stream logs, s to shell in, d to describe, ctrl-d to delete with a confirmation prompt. The pod name is already selected; you never type it. Switching namespaces is a single keypress. Switching clusters means changing your kubectl context, which k9s detects automatically. For an SRE doing an incident triage, or a DevOps engineer who needs to quickly verify that a deployment rolled out cleanly, k9s is significantly faster than the equivalent sequence of kubectl commands.

It also makes the cluster legible to engineers who are competent with Kubernetes conceptually but do not have every kubectl incantation memorised. A backend developer debugging a pod restart does not need to know the exact flags for log streaming; they navigate with arrow keys and press l.

In Practice
  • Live pod health at a glance: the pod list view shows CPU and memory usage, restart counts, readiness status, and age for every pod in the selected namespace. Pods with elevated restart counts or non ready states are visually distinct. During a deployment rollout you can watch the new pods come up and the old ones terminate in real time.
  • Log streaming with filtering: l on a selected pod opens a live log stream. Press f to activate a fuzzy filter over the log output. This is significantly faster than piping kubectl logs through grep when you know roughly what you are looking for but not the exact string.
  • Port forwarding: shift-f on a pod or service opens an interactive port forward dialog. No need to construct the kubectl port-forward command and remember which local port you chose. k9s tracks the forward for you.
  • Pulse and xray views: pulse gives a high level health summary across all resource types in the namespace. xray lets you drill into a Deployment and see the full ownership tree: ReplicaSet, Pods, and the containers inside each pod, all in a single navigable hierarchy.
  • Aliases and plugins: k9s supports custom command aliases and a plugin system that lets you bind shell commands to keys. Teams add plugins for common operations like opening a pod’s AWS CloudWatch logs, running a database migration job, or triggering a rollback.
Key Insight

k9s belongs in every engineer’s shell, not just the cluster operators. The moment an engineer can navigate a live cluster as fluently as they navigate a file system, the cluster stops being a black box and becomes part of their normal debugging surface. That familiarity pays off most during incidents, when you need information fast and have no patience for documentation lookups.


call to action image

Got a tool worth spotlighting?

If you have worked with something interesting and want to share why it matters, let’s talk.

Get in Touch